소스품질관리를 위해 Kubernetes에 SonarQube를 설치한다.
설치
아래의 각 자원을 kubectl Apply file(-f)하여 설치를 진행한다.
Persistent Volume 생성
SonarQube를 Persistent하게 운영하기 위해서 PostgreSQL을 별도 설치해서 운영할 수 있지만, 간단히 PV를 mount하여 서비스 운영/유지도 가능하다. *아래는 Block Stroage(Storage Class)를 활용한 PVC 생성
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: sonarqube-volume
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: ebs-gp3
volumeMode: Filesystem
Deployment 생성
일반적인 nginx-deployment 에서 아래와 같이 PVC를 mount하는 line의 추가와 container image 변경(+port)로 간단히 수정한 deployment.yaml 파일
/opt/sonarqube/data 경로만 PV로 mount하면 서비스가 재기동이 되어도 기존 코드품질 분석 Data 유지 가능하다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: sonarqube-deployment
spec:
replicas: 1
selector:
matchLabels:
app: sonarqube
template:
metadata:
labels:
app: sonarqube
spec:
volumes:
- name: pvc-volume
persistentVolumeClaim:
claimName: sonarqube-volume
containers:
- name: sonarqube
image: {{Docker-Image-Registry}}/library/sonarqube
ports:
- containerPort: 9000
protocol: TCP
volumeMounts:
- name: pvc-volume
mountPath: /opt/sonarqube/data
Service 생성
간단히 접근만 가능하도록 ClusterIP로 생성한다. 필요시 다른 Type으로 Service를 생성해서 접근 편의성 제공
apiVersion: v1
kind: Service
metadata:
name: sonarqube-svc
spec:
ports:
- protocol: TCP
port: 9000
targetPort: 9000
selector:
app: sonarqube
type: ClusterIP
테스트
접근
아래와 같이 Localhost의 9000 port를 활용하여 SonarQube k8s/service로 접근
➜ ~ kubectl port-forward svc/sonarqube-svc 9000:9000 -n {{namespace}}
Forwarding from 127.0.0.1:9000 -> 9000
Forwarding from [::1]:9000 -> 9000
maven Project - Run analysis
코드 분석하고자 하는 repository의 Project를 생성하면 아래와 같이 실행 가능한 Token 발행
아래 command로 실행하면 해당 Project에 SonarQube 분석 결과 확인 가능
mvn clean verify sonar:sonar \
-Dsonar.projectKey=test \
-Dsonar.projectName='test' \
-Dsonar.host.url=http://localhost:9000 \
-Dsonar.token={{Token}}
'Engineering > DevOps' 카테고리의 다른 글
Gradle 적용 및 Maven과 비교 (0) | 2024.04.25 |
---|---|
Grafana 설치 (kubernetes/aws) (0) | 2024.03.21 |
Prometheus 설치 (kubernetes/aws) (0) | 2024.03.20 |
npm package Nexus bulk upload (0) | 2023.08.30 |
private Nexus로 npm repository 관리하기 (0) | 2023.08.29 |