Engineering/DevOps

Kubernetes에 SonarQube설치를 통한 소스품질관리

망고v 2023. 8. 21. 11:47

소스품질관리를 위해 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