Jenkinsfile.sonar: SonarQube 설정 이름 보정 및 스캐너 탐색 폴백
- SONAR_ENV_NAME 을 실제 등록명 SonarQube-Community 로 수정 - 스캐너 툴 이름 미지정 시 후보 이름 탐색 후 PATH 의 sonar-scanner 폴백 - 스캐너를 못 찾으면 원인이 드러나는 메시지와 함께 실패 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
+41
-7
@@ -2,7 +2,8 @@
|
|||||||
//
|
//
|
||||||
// 전제 (Jenkins 쪽 설정 이름이 다르면 environment 블록의 SONAR_* 만 고치면 된다)
|
// 전제 (Jenkins 쪽 설정 이름이 다르면 environment 블록의 SONAR_* 만 고치면 된다)
|
||||||
// 1) Manage Jenkins > System > SonarQube servers 에 서버 등록 (이름: SONAR_ENV_NAME)
|
// 1) Manage Jenkins > System > SonarQube servers 에 서버 등록 (이름: SONAR_ENV_NAME)
|
||||||
// 2) Manage Jenkins > Tools > SonarQube Scanner 에 스캐너 등록 (이름: SONAR_SCANNER_TOOL)
|
// 2) Manage Jenkins > Tools > SonarQube Scanner 에 스캐너 등록
|
||||||
|
// (SONAR_SCANNER_TOOL 이 비어 있으면 흔한 이름을 탐색하고, 없으면 PATH 의 sonar-scanner 사용)
|
||||||
// 3) Quality Gate 대기를 쓰려면 SonarQube 서버에
|
// 3) Quality Gate 대기를 쓰려면 SonarQube 서버에
|
||||||
// Administration > Configuration > Webhooks 에 <JENKINS_URL>/sonarqube-webhook/ 등록
|
// Administration > Configuration > Webhooks 에 <JENKINS_URL>/sonarqube-webhook/ 등록
|
||||||
// 4) Job 의 Git 설정에서 shallow clone 을 끄고 tags/history 를 받아와야 blame 기반 "새 코드" 판정이 정확하다.
|
// 4) Job 의 Git 설정에서 shallow clone 을 끄고 tags/history 를 받아와야 blame 기반 "새 코드" 판정이 정확하다.
|
||||||
@@ -32,8 +33,11 @@ pipeline {
|
|||||||
|
|
||||||
environment {
|
environment {
|
||||||
// --- Jenkins 설정 이름 (환경에 맞게 수정) ---
|
// --- Jenkins 설정 이름 (환경에 맞게 수정) ---
|
||||||
SONAR_ENV_NAME = 'SonarQube'
|
// Manage Jenkins > System > SonarQube servers 의 Name
|
||||||
SONAR_SCANNER_TOOL = 'SonarScanner'
|
SONAR_ENV_NAME = 'SonarQube-Community'
|
||||||
|
// Manage Jenkins > Tools > SonarQube Scanner 에 등록한 이름.
|
||||||
|
// 비워두면 아래 후보 이름들을 순서대로 탐색하고, 그래도 없으면 PATH 의 sonar-scanner 를 쓴다.
|
||||||
|
SONAR_SCANNER_TOOL = ''
|
||||||
|
|
||||||
// --- 툴체인 ---
|
// --- 툴체인 ---
|
||||||
JAVA_HOME = '/apps/opts/jdk8' // gradle 컴파일용 (프로젝트는 Java 8)
|
JAVA_HOME = '/apps/opts/jdk8' // gradle 컴파일용 (프로젝트는 Java 8)
|
||||||
@@ -142,11 +146,29 @@ pipeline {
|
|||||||
stage('SonarQube analysis') {
|
stage('SonarQube analysis') {
|
||||||
steps {
|
steps {
|
||||||
script {
|
script {
|
||||||
def scannerHome = tool name: env.SONAR_SCANNER_TOOL,
|
// 스캐너 위치 결정: 지정 이름 > 흔한 등록 이름 후보 > PATH 의 sonar-scanner
|
||||||
type: 'hudson.plugins.sonar.SonarRunnerInstallation'
|
def candidates = env.SONAR_SCANNER_TOOL?.trim()
|
||||||
|
? [env.SONAR_SCANNER_TOOL.trim()]
|
||||||
|
: ['SonarScanner', 'SonarQube Scanner', 'sonar-scanner', 'SonarScanner CLI', 'sonarqube-scanner']
|
||||||
|
|
||||||
|
def scannerHome = null
|
||||||
|
for (name in candidates) {
|
||||||
|
try {
|
||||||
|
scannerHome = tool name: name, type: 'hudson.plugins.sonar.SonarRunnerInstallation'
|
||||||
|
echo "SonarScanner tool: '${name}' -> ${scannerHome}"
|
||||||
|
break
|
||||||
|
} catch (ignored) {
|
||||||
|
// 등록되지 않은 이름은 건너뛴다
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (scannerHome == null) {
|
||||||
|
echo 'Jenkins Tools 에 등록된 SonarQube Scanner 를 찾지 못했다. PATH 의 sonar-scanner 로 진행한다.'
|
||||||
|
echo '(Manage Jenkins > Tools 에 등록한 뒤 environment 의 SONAR_SCANNER_TOOL 에 그 이름을 넣으면 확실하다.)'
|
||||||
|
}
|
||||||
|
|
||||||
withSonarQubeEnv(env.SONAR_ENV_NAME) {
|
withSonarQubeEnv(env.SONAR_ENV_NAME) {
|
||||||
withEnv(["SONAR_SCANNER_HOME=${scannerHome}"]) {
|
withEnv(["SONAR_SCANNER_HOME=${scannerHome ?: ''}"]) {
|
||||||
sh '''
|
sh '''
|
||||||
set -eu
|
set -eu
|
||||||
|
|
||||||
@@ -177,7 +199,19 @@ pipeline {
|
|||||||
JUNIT_ARG="-Dsonar.junit.reportPaths=build/test-results/test"
|
JUNIT_ARG="-Dsonar.junit.reportPaths=build/test-results/test"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
"$SONAR_SCANNER_HOME/bin/sonar-scanner" \
|
# Tools 에 등록된 스캐너가 없으면 PATH 에서 찾는다
|
||||||
|
if [ -n "${SONAR_SCANNER_HOME:-}" ] && [ -x "$SONAR_SCANNER_HOME/bin/sonar-scanner" ]; then
|
||||||
|
SCANNER="$SONAR_SCANNER_HOME/bin/sonar-scanner"
|
||||||
|
elif command -v sonar-scanner >/dev/null 2>&1; then
|
||||||
|
SCANNER="$(command -v sonar-scanner)"
|
||||||
|
else
|
||||||
|
echo "sonar-scanner 실행 파일을 찾지 못했다."
|
||||||
|
echo "Manage Jenkins > Tools > SonarQube Scanner 에 등록하거나 노드 PATH 에 설치할 것."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
echo "scanner: $SCANNER"
|
||||||
|
|
||||||
|
"$SCANNER" \
|
||||||
-Dsonar.projectVersion="${BUILD_NUMBER}" \
|
-Dsonar.projectVersion="${BUILD_NUMBER}" \
|
||||||
-Dsonar.java.libraries="$LIBS" \
|
-Dsonar.java.libraries="$LIBS" \
|
||||||
-Dsonar.java.test.libraries="$TEST_LIBS" \
|
-Dsonar.java.test.libraries="$TEST_LIBS" \
|
||||||
|
|||||||
Reference in New Issue
Block a user