사전 준비 및 수동 검증
SonarScanner 최신 버전은 Java 언어 스캔 플러그인을 내장하고 있어 추가 설치가 불필요합니다.
1. 소스 코드 클론
git clone git@192.168.1.128:root/demo-maven-service.git
2. Maven 빌드
cd demo-maven-service/
mvn clean package
ls target/ # SonarScanner가 스캔할 컴파일된 클래스 확인
3. SonarScanner 설정
cd /usr/local/sonar-scanner/conf
vim sonar-scanner.properties
# 분석 대상 디렉토리
sonar.sources=.
# SonarQube 로그인 정보
sonar.login=admin
sonar.password=123456
sonar.projectVersion=1.0
sonar.sourceEncoding=UTF-8
# SonarQube 서버 URL
sonar.host.url=http://192.168.1.134:9000
sonar.ws.timeout=30
4. 수동 스캔 실행
sonar-scanner -Dsonar.projectKey=demo-maven-service \
-Dsonar.projectName=demo-maven-service \
-Dsonar.projectDescription='첫 번째 프로젝트!' \
-Dsonar.links.homepage=http://www.baidu.com \
-Dsonar.sources=src \
-Dsonar.java.binaries=target/classes \
-Dsonar.java.test.binaries=target/test-classes \
-Dsonar.java.surefire.report=target/surefire-reports
5. 결과 확인
로그에서 INFO: ANALYSIS SUCCESSFUL 메시지를 확인한 후, 제공된 URL로 접속하여 결과를 확인합니다.
Pipeline에 SonarScanner 통합
참고: SonarQube Community Edition은 브랜치별로 프로젝트를 구분하지 못하므로, 브랜치별로 별도 프로젝트를 생성해야 합니다.
1. Shared Library 작성
// sonarqube.groovy
package org.devops
def runSonarScan(projectName, projectDesc, projectPath) {
def scannerHome = "/usr/local/sonar-scanner"
def timestamp = sh returnStdout: true, script: 'date +%Y%m%d%H%M%S'
timestamp = timestamp.trim()
sh """
${scannerHome}/bin/sonar-scanner \
-Dsonar.projectKey=${projectName} \
-Dsonar.projectName=${projectName} \
-Dsonar.projectVersion=${timestamp} \
-Dsonar.projectDescription=${projectDesc} \
-Dsonar.links.homepage=http://www.baidu.com \
-Dsonar.sources=${projectPath} \
-Dsonar.java.binaries=target/classes \
-Dsonar.java.test.binaries=target/test-classes \
-Dsonar.java.surefire.report=target/surefire-reports
"""
}
2. Jenkinsfile 수정
def sonarTool = new org.devops.sonarqube()
pipeline {
stages {
stage('Build') {
steps {
// 빌드 단계 구현
}
}
stage('QA') {
steps {
script {
echo "코드 스캔 시작"
sonarTool.runSonarScan("${JOB_NAME}", "${JOB_NAME}", "src")
}
}
}
}
}
3. 테스트
저장소에 push 이벤트가 발생하면 Pipeline이 자동 실행됩니다.
SonarQube Jenkins 플러그인 활용
참고 문서: SonarQube Jenkins Extension Guide
1. 플러그인 설치
Jenkins 관리 화면에서 SonarQube Scanner 플러그인을 설치합니다.
2. 인증 토큰 생성
SonarQube 대시보드에서 User > My Account > Security 탭에서 토큰을 생성합니다.
3. Jenkins에 자격 증명 등록
Jenkins > Manage Credentials에서 생성한 토큰을 Secret text 형태로 등록합니다.
4. SonarQube 서버 설정
Manage Jenkins > Configure System > SonarQube servers 섹션에서 서버 이름, URL, 인증 정보를 입력합니다.
5. 전역 도구 설정
Manage Jenkins > Global Tool Configuration > SonarQube Scanner에서 설치 옵션을 지정합니다.
6. Shared Library 업데이트
플러그인 API를 활용하여 withSonarQubeEnv 블록을 사용합니다.
7. 실행 확인
Pipeline을 재실행하여 정상 동작을 확인합니다.
다중 SonarQube 서버 구성
1. 서버 추가
Manage Jenkins > Configure System > SonarQube servers에서 여러 서버를 등록합니다.
2. Shared Library 개선
파라미터로 서버 이름을 전달받아 withSonarQubeEnv('서버명')으로 분기 처리합니다.
3. Jenkinsfile 수정
각 환경에 맞는 파라미터를 전달합니다.
4. 검증
각 서버로 분석 결과가 전송되는지 확인합니다.