From 5b48c22ad0f641c031142bd161681bc88dc023f8 Mon Sep 17 00:00:00 2001 From: ondal Date: Tue, 30 Sep 2025 23:54:37 +0900 Subject: [PATCH] =?UTF-8?q?Jenkins=20SonarQube=20=ED=8C=8C=EC=9D=B4?= =?UTF-8?q?=ED=94=84=EB=9D=BC=EC=9D=B8=20=EA=B0=9C=EC=84=A0:=20=EA=B0=81?= =?UTF-8?q?=20=EC=84=9C=EB=B9=84=EC=8A=A4=EB=B3=84=20=EA=B0=9C=EB=B3=84=20?= =?UTF-8?q?Quality=20Gate=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - withSonarQubeEnv wrapper를 각 서비스별로 개별 적용 - Quality Gate 확인을 서비스별로 순차 처리 - sonar.java.binaries와 sonar.coverage.jacoco.xmlReportPaths 경로 정확히 지정 - 'No previous SonarQube analysis found' 오류 해결 - 각 단계별 상세 로깅 추가 --- deployment/cicd/Jenkinsfile_ArgoCD | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/deployment/cicd/Jenkinsfile_ArgoCD b/deployment/cicd/Jenkinsfile_ArgoCD index 5e59f55..5b6293e 100644 --- a/deployment/cicd/Jenkinsfile_ArgoCD +++ b/deployment/cicd/Jenkinsfile_ArgoCD @@ -86,6 +86,7 @@ podTemplate( try { stage("Get Source") { + checkout scm props = readProperties file: "deployment/cicd/config/deploy_env_vars_${environment}" } @@ -105,27 +106,37 @@ podTemplate( echo "⏭️ Skipping SonarQube Analysis (SKIP_SONARQUBE=${params.SKIP_SONARQUBE})" } else { container('gradle') { - withSonarQubeEnv('SonarQube') { - // 각 서비스별 테스트 및 SonarQube 분석 - services.each { service -> + // 각 서비스별로 개별적으로 SonarQube 분석 및 Quality Gate 확인 + services.each { service -> + withSonarQubeEnv('SonarQube') { + echo "🔍 Starting SonarQube analysis for ${service}..." + + // 서비스별 테스트 및 SonarQube 분석 sh """ ./gradlew :${service}:test :${service}:jacocoTestReport :${service}:sonar \\ -Dsonar.projectKey=phonebill-${service}-dg0500 \\ -Dsonar.projectName=phonebill-${service}-dg0500 \\ - -Dsonar.java.binaries=build/classes/java/main \\ - -Dsonar.coverage.jacoco.xmlReportPaths=build/reports/jacoco/test/jacocoTestReport.xml \\ + -Dsonar.java.binaries=${service}/build/classes/java/main \\ + -Dsonar.coverage.jacoco.xmlReportPaths=${service}/build/reports/jacoco/test/jacocoTestReport.xml \\ -Dsonar.exclusions=**/config/**,**/entity/**,**/dto/**,**/*Application.class,**/exception/** """ + + echo "✅ SonarQube analysis completed for ${service}" } - // Quality Gate 확인 - timeout(time: 10, unit: 'MINUTES') { + // 각 서비스별 Quality Gate 확인 + timeout(time: 5, unit: 'MINUTES') { + echo "⏳ Waiting for Quality Gate result for ${service}..." def qg = waitForQualityGate() if (qg.status != 'OK') { - error "Pipeline aborted due to quality gate failure: ${qg.status}" + error "❌ Quality Gate failed for ${service}: ${qg.status}" + } else { + echo "✅ Quality Gate passed for ${service}" } } } + + echo "🎉 All services passed SonarQube Quality Gates!" } } }