From d596780a64669a894bdcc4c0338c97092a31a0da Mon Sep 17 00:00:00 2001 From: hiondal Date: Sat, 13 Sep 2025 15:22:17 +0900 Subject: [PATCH] =?UTF-8?q?Jenkins=20=ED=8C=8C=EC=9D=B4=ED=94=84=EB=9D=BC?= =?UTF-8?q?=EC=9D=B8=20=EB=8B=A8=EA=B3=84=20=EA=B5=AC=EC=A1=B0=20=EA=B0=9C?= =?UTF-8?q?=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Build와 SonarQube Analysis 단계 분리 - SonarQube Analysis와 Quality Gate 통합 - SKIP_SONARQUBE 파라미터로 조건부 실행 구현 - 백엔드 CI/CD 가이드에 수정사항 반영 --- deployment/cicd/Jenkinsfile | 37 +++++++++++++++++++++-------------- kos-mock/data/kos_mock.mv.db | Bin 53248 -> 32768 bytes 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/deployment/cicd/Jenkinsfile b/deployment/cicd/Jenkinsfile index ae1b2d7..b28b239 100644 --- a/deployment/cicd/Jenkinsfile +++ b/deployment/cicd/Jenkinsfile @@ -71,6 +71,7 @@ podTemplate( def props def imageTag = getImageTag() def environment = params.ENVIRONMENT ?: 'dev' + def skipSonarQube = params.SKIP_SONARQUBE ?: false def services = ['api-gateway', 'user-service', 'bill-service', 'product-service', 'kos-mock'] try { @@ -91,14 +92,21 @@ podTemplate( } } - stage('Build & SonarQube Analysis') { + stage('Build') { + container('gradle') { + sh """ + chmod +x gradlew + ./gradlew build -x test + """ + } + } + + stage('SonarQube Analysis & Quality Gate') { + when { + not { skipSonarQube } + } container('gradle') { withSonarQubeEnv('SonarQube') { - sh """ - chmod +x gradlew - ./gradlew build -x test - """ - // 각 서비스별 테스트 및 SonarQube 분석 services.each { service -> sh """ @@ -110,15 +118,14 @@ podTemplate( -Dsonar.exclusions=**/config/**,**/entity/**,**/dto/**,**/*Application.class,**/exception/** """ } - } - } - } - - stage('Quality Gate') { - timeout(time: 10, unit: 'MINUTES') { - def qg = waitForQualityGate() - if (qg.status != 'OK') { - error "Pipeline aborted due to quality gate failure: ${qg.status}" + + // Quality Gate 확인 + timeout(time: 10, unit: 'MINUTES') { + def qg = waitForQualityGate() + if (qg.status != 'OK') { + error "Pipeline aborted due to quality gate failure: ${qg.status}" + } + } } } } diff --git a/kos-mock/data/kos_mock.mv.db b/kos-mock/data/kos_mock.mv.db index 7a9a5ccc6ac6022690214a6de04a1fc93024dd2e..d4c19957b4f84896337c462693648745b5c64816 100644 GIT binary patch delta 434 zcmZozz}(Qlq~c*^q?44BpPX%F4xxiHt5U5D4Gau)k~2#4fWnC;6IC>XO?1+7QcIFE zQj4riEK@BE6HT}_CeG)d{EweUiY%R*|H*R(FeREy=1h<=P1PyN&o8kuOtl1BY+zt$ zVv=H{Q<9krbcvB^a;k}8vQAlQQE_H|9>_g9d8rj8Ru+?^5+a!L879{(GvG*J%S|lM zGfmz6CP9aZ(RlL174l4p#+$8@uQDp7Fqx(@FfbJ}9ARYOW8egPOV2#f2+lH|Y?vA` z*(Plr_eMsTr;R7`uMwTRFPw+nKqoh`!pd^;o>WOj^T}!nO8ljHrNyZ!aHmaHJRz)U zjO0LLos#@yD{~7oo&4nF(t^aikpCusOk27!@fG_d1r8Mxot)G>D?=o$ YNWpAwW|(Sjk~(=~yx-&o1y)8b0Q-oF-2eap delta 2512 zcmeH}PiP!f9LL|A-R!@(NmL}ZLAyD9o zlid=v&F;~IBFXDPMA3s@3L;^|OIy^FM?u=si+CxBP=!KoV$(N&cchlkLk@y-dHZAL z&3pU4pYQiK-LBC6JT*3L%A&p0#HURy7-tvXp{9fo67fR2aoVg}mCdmU_Hna6PbIxt zb*xHZ+xl#f?F{zsf518J&Vk&_KEn~0Xv0**73&mTGbLGEw$@EWGuTx9>5(&Zb#1ZP zFsuBr23>ENRk78?W`!u2ZJ#_M761U_*piHUQa6 z;Ff#6bTJEc_x!}fL-4$NS-ChM|B~)c1v7KMKjP2KzZZ;!r?&jM@Z;-!eSMis{}2Ge z+42$h!b|T8@CUd2@;L!+xL-_f2=J_X=;+@9oO2Hz`w2pw-FodPFP@$GOMthTFM$i#uHNVgdFyi6qgpy&>3G< z6o`u0!TLx?_x6TlTUC;Kv!w^z8x8h`oy69V1f`-xtJqtC7(~_L3R4+Vuj&LhWg{qq zN>_33QNA~&5>HfRLU3H^1YY+WO$S2Piwpc zVBp)I{R6SX$%&HN zOKG-qGJgX3PV)uw_3@3ytcA{ zGXM~WE}ZC>>KyK=IrqbI5xO_VzD{|`yKp-*9#NR2Ddv{g8X}HDliWVZlOzfj z&TY^jtcY98{-}@c@4ZY4&y>Mlk1a7Nco9zNKGHo%68NycxD7&7WO~Xyib>SwBvVsyn84m8=B^j zu!$r*!x!$+fuh8^w`u5p&-8N7>ja&U<)~}yk(KW2B#7C$Q;)+d+tx;AtCSm$Jka|q QQZMbPrXeczTmuVt0WqEf!T