HomeAbout
[DevOps] Jenkins Build Pipeline 최적화: SonarQube 연동 및 통합으로 코드 품질 관리 자동화
DevOps
[DevOps] Jenkins Build Pipeline 최적화: SonarQube 연동 및 통합으로 코드 품질 관리 자동화
NASA1515
NASA1515
August 11, 2021
1 min

목차

01
😎 About This Post
02
✔ SonarQube ??

😎 About This Post


Devops Tap의 시리즈 포스트들은 최종적으로 아래 항목을 지향합니다.

  1. SonarQube로 Build 될 이미지의 소스코드에 대한 전략적 정적분석을
  2. Anchore로 빌드된 이미지에 대한 분석을
  3. OWASP ZAP으로 배포 된 서비스에 대한 동적분석

저는 위 세가지 보안 항복을 Jenkins를 이용해 자동화 하였습니다.


사용 할 툴은 다음과 같습니다.

  • Jenkins
  • Sonarqube

✔ SonarQube ??


  • 위키백과 왈

소나큐브(SonarQube, 이전 이름: 소나/Sonar)는 20개 이상의 프로그래밍 언어에서 버그, 코드 스멜, 보안 취약점을 발견할 목적으로 정적 코드 분석으로 자동 리뷰를 수행하기 위한 지속적인 코드 품질 검사용 오픈 소스 플랫폼이다.
소나큐브는 중복 코드, 코딩 표준, 유닛 테스트, 코드 커버리지, 코드 복잡도, 주석, 버그 및 보안 취약점의 보고서를 제공한다.


SonarQube 설치

  • 이번 포스트에서 SonarQube의 설치과정은 다루지 않습니다. 즉 이미 SonarQube 서버와, Jenkins 서버가 설치되었다는 가정하에 진행하였습니다.
  • 설치에 관련된 포스트는 여기를 참고해주세요

Jenkins 설정


  • Jenkins 내에서 SonarQube를 사용하기 위해서는 아래 플러그인 설치가 필요합니다.

  • 자세한 플러그인 정보는 링크 확인해주세요

플러그인 설치가 완료되었다면 Jenkins 환경설정에서 Sonarqube 서버의 설정이 필요합니다.

  • 설치한 SonarQube 서버의 정보를 기입해줍니다

Jenkins Global tool configuration 탭에서 Scanner에 대한 설정을 합니다.

  • 별다르게 상이하는 부분은 없이 동일하게 설정하면 동작됩니다.

파이프라인 프로젝트에서 SonarQube의 변수들을 선언 해줍니다(스크립트의 편의성을 위함)


이제 SonarQube 서버에서 Jenkins 서버에 대한 Webhook을 설정합니다.

  • Jenkins 서버의 IP와 Port로 웹훅을 걸어주시면 됩니다.

정상적으로 설정이 되었다면 다음과 같이 웹훅이 생성됩니다.

AAAAAAAAAAADDDDD

  • 이제 Jenkins에서 SonarQube를 사용 할 수 있습니다!!


Jenkins Pipeline Script 수정


  • 그럼 파이프라인 스크립트 내에 SonarQube와 관련된 내용을 삽입해보겠습니다.

파이프라인 내용

properties([
parameters([
    string(name: 'sonar.projectKey', defaultValue: 'com.appsecco:dvja'),
    string(name: 'sonar.host.url', defaultValue: 'http://34.64.237.112:9000'),
    string(name: 'sonar.login', defaultValue: '608cacd6bb83c50712ebb34c4cba377c841cdebb')
]) 
])
...
  • 우선 간단하게 파이프라인을 작성하기위해 변수 설정을 했습니다.

그리고 SonarQube와 SonarQube 내에있는 Dependency-Check를 작성해줍니다.

        stage ('Dependency-Check Analysis') {
            steps {
                sh '/var/lib/jenkins/dependency-check/bin/dependency-check.sh --scan `pwd` --format XML --out /var/lib/jenkins/workspace/ci-build-pipeline/dependency-check-report --prettyPrint'
                
                dependencyCheckPublisher pattern: 'dependency-check-report/dependency-check-report.xml'
            }
        }
        stage('Sonarqube and Quality gate') {
            options {
                timeout(time: 5, unit: 'MINUTES')
                retry(2)
            }
            steps {
                withSonarQubeEnv('SonarQube Server') {
                    sh "mvn sonar:sonar"
                }
                script {
                    qualitygate = waitForQualityGate()
                    if (qualitygate.status != "OK") {
                        currentBuild.result = "FAILURE"
                    }
                }
            }
        }

여기까지만 하면 파이프라인 내에서는 SonarQube는 정상동작합니다.


파이프라인 실행 결과

  • 이제 모든 파이프라인 구성이 완료되었습니다.

  • 파이프라인 스크립트의 STAGE별 순서 진행도를 위와 같이 확인할 수 있습니다.
  • 또한 SonarQube의 분석 결과 그래프도 위와 같이 확인할 수 있습니다.

SonarQube의 Check-style 등의 경우 다른 리포트를 생성합니다.

KakaoTalk_20201228_200227145

  • PASSED의 경우 사용자가 ERROR Level을 임의로 설정 할 수 있습니다.

Tags

#DevOps#GCP#Kubernetes#SonarQube
NASA1515

NASA1515

Data Engineer

Hello I'M Wonseok aka NASA1515

Expertise

Public Cloud
k8s/Docker
Python

Social Media

instagramwebsitelinkedingithub

Related Posts

[DevOps] Maven을 사용한 Java Application 빌드 및 배포 & DevSecOps Pipeline 통합 및 자동화 고도화
[DevOps] Maven을 사용한 Java Application 빌드 및 배포 & DevSecOps Pipeline 통합 및 자동화 고도화
2021-08-20
1 min

Topics

CloudDevelop

Social Media