Jenkins 파이프라인 최적화: SonarQube 분석을 services.each 루프로 리팩토링 및 Docker 빌드 timeout 설정 추가

This commit is contained in:
hiondal 2025-09-12 16:05:57 +09:00
parent e945db9dfe
commit 0e9c206ae1

View File

@ -58,43 +58,19 @@ podTemplate(
sh """ sh """
chmod +x gradlew chmod +x gradlew
./gradlew build -x test ./gradlew build -x test
# 각 서비스별 테스트 및 분석
./gradlew :api-gateway:test :api-gateway:jacocoTestReport :api-gateway:sonar \\
-Dsonar.projectKey=phonebill-api-gateway-${environment} \\
-Dsonar.projectName=phonebill-api-gateway \\
-Dsonar.java.binaries=build/classes/java/main \\
-Dsonar.coverage.jacoco.xmlReportPaths=build/reports/jacoco/test/jacocoTestReport.xml \\
-Dsonar.exclusions=**/config/**,**/entity/**,**/dto/**,**/*Application.class,**/exception/**
./gradlew :user-service:test :user-service:jacocoTestReport :user-service:sonar \\
-Dsonar.projectKey=phonebill-user-service-${environment} \\
-Dsonar.projectName=phonebill-user-service \\
-Dsonar.java.binaries=build/classes/java/main \\
-Dsonar.coverage.jacoco.xmlReportPaths=build/reports/jacoco/test/jacocoTestReport.xml \\
-Dsonar.exclusions=**/config/**,**/entity/**,**/dto/**,**/*Application.class,**/exception/**
./gradlew :bill-service:test :bill-service:jacocoTestReport :bill-service:sonar \\
-Dsonar.projectKey=phonebill-bill-service-${environment} \\
-Dsonar.projectName=phonebill-bill-service \\
-Dsonar.java.binaries=build/classes/java/main \\
-Dsonar.coverage.jacoco.xmlReportPaths=build/reports/jacoco/test/jacocoTestReport.xml \\
-Dsonar.exclusions=**/config/**,**/entity/**,**/dto/**,**/*Application.class,**/exception/**
./gradlew :product-service:test :product-service:jacocoTestReport :product-service:sonar \\
-Dsonar.projectKey=phonebill-product-service-${environment} \\
-Dsonar.projectName=phonebill-product-service \\
-Dsonar.java.binaries=build/classes/java/main \\
-Dsonar.coverage.jacoco.xmlReportPaths=build/reports/jacoco/test/jacocoTestReport.xml \\
-Dsonar.exclusions=**/config/**,**/entity/**,**/dto/**,**/*Application.class,**/exception/**
./gradlew :kos-mock:test :kos-mock:jacocoTestReport :kos-mock:sonar \\
-Dsonar.projectKey=phonebill-kos-mock-${environment} \\
-Dsonar.projectName=phonebill-kos-mock \\
-Dsonar.java.binaries=build/classes/java/main \\
-Dsonar.coverage.jacoco.xmlReportPaths=build/reports/jacoco/test/jacocoTestReport.xml \\
-Dsonar.exclusions=**/config/**,**/entity/**,**/dto/**,**/*Application.class,**/exception/**
""" """
// 각 서비스별 테스트 및 SonarQube 분석
services.each { service ->
sh """
./gradlew :${service}:test :${service}:jacocoTestReport :${service}:sonar \\
-Dsonar.projectKey=phonebill-${service}-${environment} \\
-Dsonar.projectName=phonebill-${service} \\
-Dsonar.java.binaries=build/classes/java/main \\
-Dsonar.coverage.jacoco.xmlReportPaths=build/reports/jacoco/test/jacocoTestReport.xml \\
-Dsonar.exclusions=**/config/**,**/entity/**,**/dto/**,**/*Application.class,**/exception/**
"""
}
} }
} }
} }
@ -109,24 +85,26 @@ podTemplate(
} }
stage('Build & Push Images') { stage('Build & Push Images') {
container('podman') { timeout(time: 30, unit: 'MINUTES') {
withCredentials([usernamePassword( container('podman') {
credentialsId: 'acr-credentials', withCredentials([usernamePassword(
usernameVariable: 'USERNAME', credentialsId: 'acr-credentials',
passwordVariable: 'PASSWORD' usernameVariable: 'USERNAME',
)]) { passwordVariable: 'PASSWORD'
sh "podman login acrdigitalgarage01.azurecr.io --username \$USERNAME --password \$PASSWORD" )]) {
sh "podman login acrdigitalgarage01.azurecr.io --username \$USERNAME --password \$PASSWORD"
services.each { service -> services.each { service ->
sh """ sh """
podman build \\ podman build \\
--build-arg BUILD_LIB_DIR="${service}/build/libs" \\ --build-arg BUILD_LIB_DIR="${service}/build/libs" \\
--build-arg ARTIFACTORY_FILE="${service}.jar" \\ --build-arg ARTIFACTORY_FILE="${service}.jar" \\
-f deployment/container/Dockerfile-backend \\ -f deployment/container/Dockerfile-backend \\
-t acrdigitalgarage01.azurecr.io/phonebill/${service}:${environment}-${imageTag} . -t acrdigitalgarage01.azurecr.io/phonebill/${service}:${environment}-${imageTag} .
podman push acrdigitalgarage01.azurecr.io/phonebill/${service}:${environment}-${imageTag} podman push acrdigitalgarage01.azurecr.io/phonebill/${service}:${environment}-${imageTag}
""" """
}
} }
} }
} }