# SonarQube를 pod로 설치하고 서비스를 실행하는 작업에 대해 알아본다.
1. SonarQube란?
소나큐브는 20개 이상의 프로그래밍 언어에서 버그, 코드 스멜, 보안 취약점을 발견할 목적으로
정적 코드 분석으로 자동 리뷰를 수행하기 위한 지속적인 코드 품질 검사용 오픈 소스 플랫폼이다.
- SonarQube화면 예시 (위키피디아)
- SonarQube는 jenkinsfile에 정의하며 정의된 내용에 따라 jenkinsfile에서 docker이미지로 생성시 아래와 같이 스프링부트 코드를 분석후 결과를 기록한다.
2. Helm으로 Sonaqube 설치하기
- Helm Code Clone 하기
URL : https://github.com/metleeha/k8s-helm-sonarqube.git
- git clone 하기
git clone https://github.com/metleeha/k8s-helm-sonarqube.git
- 소나큐브를 설치할 네임스페이스 생성
kubectl create ns sonar-demo
- PstgreSQL PersistentVolume/PersistentVolumeClaim 생성
3. PostgreSQL PV 생성
clone한 git 폴더에서 postgre/pv.yaml을 열어서 아래 부분을 수정 한다.
pv생성시 사용하는 pv명은 demo-postgre-pv 로 prefix만 수정한다.
파일을 vim으로 열어보면 아래와 같다.
apiVersion: v1
kind: PersistentVolume
metadata:
name: demo-postgre-pv # modify
namespace: sonar-demo # modify
labels:
type: postgre
spec:
storageClassName: postgre
accessModes:
- ReadWriteOnce
capacity:
storage: 10Gi
hostPath:
path: "/bitnami/postgresql"
- 적용한다.
적용 명령어 : kubectl apply -f pv.yaml
pv를 확인해보면 아래와 같다. 정상적으로 생성된것을 확인 할 수 있다.
$ kubectl get pv -A
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
demo-postgre-pv 10Gi RWO Retain Available postgre 7s
4. PostgreSQL PVC 생성
복제한 git 폴더에서 postgre/pvc.yaml을 열어서 아래 부분을 수정 한다.
pv생성시 사용하는 pv명은 demo-postgre-pv 로 prefix만 수정한다.
파일을 vim으로 열어보면 아래와 같다.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: demo-postgre-pvc # modify
namespace: sonar-demo # modify
labels:
type: postgre
spec:
storageClassName: postgre
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
- 적용한다.
적용명령어 : kubectl apply -f pvc.yaml
적용 후 pvc를 확인해보면 아래와 같다. 정상적으로 생성된 것을 확인 할 수 있다.
kubectl get pvc -n sonar-demo
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
demo-postgre-pvc Bound demo-postgre-pv 10Gi RWO postgre 67s
5. Sonarqube PersistentVolume/PersistentVolumeClaim 생성
- Sonarqube PV 생성
복제한 git 폴더에서 sonarqube/pv.yaml을 열어서 아래 부분을 수정 한다.
pv생성시 사용하는 pv명은 demo-sonarqube-pv 로 prefix만 수정한다.
vim 파일을 열어보면 아래와 같다.
apiVersion: v1
kind: PersistentVolume
metadata:
name: demo-sonarqube-pv
namespace: sonar-demo
labels:
type: sonarqube
spec:
storageClassName: sonarqube
accessModes:
- ReadWriteOnce
capacity:
storage: 10Gi
hostPath:
path: /opt/sonarqube
적용 명령어 : kubectl apply -f pv.yaml
생성한 pv를 확인하면 아래와 같다.
kubectl get pv -A
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
demo-sonarqube-pv 10Gi RWO Retain Available sonarqube 43s
- Sonarqube PVC 생성
복제한 git 폴더에서 sonarqube/pvc.yaml을 열어서 아래 부분을 수정 한다.
pv생성시 사용하는 pv명은 demo-sonarqube-pv 로 prefix만 수정한다.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: demo-sonarqube-pvc
namespace: sonar-demo
labels:
type: sonarqube
spec:
storageClassName: sonarqube
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 8Gi
적용 명령어 : kubectl apply -f pvc.yaml
생성한 pvc를 확인하면 아래와 같다.
kubectl get pvc -n sonar-demo
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
demo-sonarqube-pvc Bound demo-sonarqube-pv 10Gi RWO sonarqube 20s
6. 생성한 pv와 pvc를 namespace 기준으로 조회해보자.
명령어 : kubectl get pvc,pv -n sonar-demo
결과는 아래와 같다. pv와 pvc를 각각 쌍으로 생성한것을 확인 할 수 있다.
kubectl get pvc,pv -n sonar-demo
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
persistentvolumeclaim/demo-postgre-pvc Bound demo-postgre-pv 10Gi RWO postgre 11m
persistentvolumeclaim/demo-sonarqube-pvc Bound demo-sonarqube-pv 10Gi RWO sonarqube 3m11s
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
persistentvolume/demo-postgre-pv 10Gi RWO Retain Bound sonar-demo/demo-postgre-pvc postgre 16m
persistentvolume/demo-sonarqube-pv 10Gi RWO Retain Bound sonar-demo/demo-sonarqube-pvc sonarqube 7m13s
7. Helm을 이용해 Sonarqube 설치
- helm version 확인
helm version
version.BuildInfo{Version:"v3.10.1", GitCommit:"9f88ccb62c900000000000", GitTreeState:"clean", GoVersion:"go1.18.7"}
- helm repo update
helm repo update
- ./postgre/경로의 리소스 → helm으로 postgreSQL 설치 실행
helm repository를 추가 : helm repo add bitnami https://charts.bitnami.com/bitnami
- postgreSQL 설치
helm 이름을 수정.
demo-postgre 의 prefix만 수정.(중요)
persistence.existingClaim 의 값을 생성한 pvc로 수정.
demo-postgre-pvc 에서 prefix만 수정.(중요)
namespace를 수정.(중요)
3개의 정보를 규칙에 따라 수정 하였으면, 다시 한번 수정된 내용을 확인하고 콘솔창에서 수정한 명령을 실행한다.
helm install demo-postgre stable/postgresql \
--set persistence.existingClaim=demo-postgre-pvc \
--set persistence.enabled=false \
--set postgresqlUsername=sonarUser \
--set postgresqlPassword=sonarPass \
--set postgresqlDatabase=sonarDB \
--namespace sonar-demo
정상 설치가 되면 아래와 같은 화면이 출력된다.
- ./sonarqube/ helm 으로 Sonarqube 설치 실행
리파지토리 추가, helm 리파지토리를 추가한다.
helm repo add oteemo https://oteemo.github.io/charts/
sonarqube 설치
helm 이름을 수정.
demo-sonarqube의 prefix만 수정.(중요)
postgresql.postgresqlServer 의 값을 수정.
demo-postgre-postgresql 에서 prefix만 수정.(중요)
namespace를 수정.(중요)
서비스 타입을 로드밸런서로 수정 후 실행한다.
3개의 정보를 규칙에 따라 수정 하였으면, 다시 한번 수정된 내용을 확인하고 콘솔창에서 수정한 명령을 실행 한다.
helm install demo-sonarqube oteemo/sonarqube \
--set postgresql.postgresqlServer=demo-postgre-postgresql \
--set service.type=LoadBalancer \
--set postgresql.enabled=false \
--set postgresql.postgresqlUsername=sonarUser \
--set postgresql.postgresqlPassword=sonarPass \
--set postgresql.postgresqlDatabase=sonarDB \
--namespace sonar-demo
- 정상적으로 생성 시 아래와 같은 화면이 출력 된다.
9. Sonarqube 설치 확인 및 로그인
- clone 받은 git 소스에서 아래와 같이 권한을 부여한다.
chmod 750 show_url.sh
- 아래의 명령어로 접속정보, 계정, 패스워드를 출력한다. id와 패스워드를 확인한다.
./show_url.sh sonar-demo
Sonarqube url is http://ip-10-0-129-131.ap-northeast-2.compute.internal:
ID is admin
admin passwd is admin
10. 소나큐브 웹 접속하기
위에서 LoadBalancer 타입으로 서비스를 생성 하였으므로, 기반 로드밸런서 타입인 CLB로 서비스가 생성되어 있을 것이다. 로드밸런서 탭으로 이동하여 DNS 주소를 확인한다.
ELB DNS 주소:9000으로 접속하면 아래와 같은 로그인 화면을 볼 수 있다.
접속하기, 위에서 아이디와 비밀번호를 확인 하였고, 해당 정보를 기반으로 접속하면 아래와 같다.
지금까지 helm을 이용하여 Sonaqube를 실행하는 과정을 알아 보았다.
CI/CD 구현 시 Sonarqube를 활용한 정적 분석을 진행해 보자.