jenkins 파이프라인 코드


젠킨스 파이프라인 코드 (groovy) ``` def LAST_STAGE // def BASE_CONFIG_CHANGED = false def DECLARED_MODULE = ['Engine', 'cruzlink-adapter', 'common', 'Filter', 'eureka', 'config', 'generator'] def affectedModules = [] def affectedList = '' def DOCKER_IMAGE = [] def buildMessage def lastCommitFile = "last_commit.txt" pipeline { agent any tools { maven 'maven3.8.5' } environment { //docker IMAGE_NAME = 'cruzapim' BUILD_TARGET_HOME = '${BUILD_HOME}' } stages { stage('Checkout') { steps { script { LAST_STAGE = 'Checkout' } git branch: 'develop', credentialsId: 'hkpark', url: 'git@gitlab.direa.synology.me:cruzlink-next/cruzlink-next.git' } } stage('Build') { steps { script { LAST_STAGE = "$env.STAGE_NAME" def changes = [] if (!fileExists(lastCommitFile)) { echo 'Not exists' sh "touch $lastCommitFile" } def type = sh(returnStdout: true, script: "echo $env.gitlabActionType").trim() if ("$type" == 'PUSH') { echo "source : $env.gitlabSourceBranch" echo "target : $env.gitlabTargetBranch" def before = sh(returnStdout: true, script: 'cat last_commit.txt').trim() def after = sh(returnStdout: true, script: "echo $env.gitlabAfter").trim() buildMessage = sh(returnStdout: true, script: " git log -n 1 --pretty=format:%s $after").trim() echo 'is push' echo 'checking diff' changes = sh(returnStdout: true, script: "git --no-pager diff $before $after --name-only").trim().split() changes.each { c -> if (c.indexOf('/') > 1) { def module = c.substring(0, c.indexOf('/')).trim() if (DECLARED_MODULE.contains(module)) { affectedModules.add("$module") } // else if ("$module" == 'baseConfig') { // BASE_CONFIG_CHANGED = true // } } } if (affectedModules.size() > 0) { affectedList = affectedModules.unique().join(',') echo "Building Targets: $affectedList" sh "mvn clean package -DskipTests -pl $affectedList -T 5" } else { echo 'No Targets to Build' sh 'mvn clean' } } else { echo 'Building All Modules' affectedModules = DECLARED_MODULE affectedList = DECLARED_MODULE.join(',') sh 'mvn clean package -DskipTests -T 5' } } } } stage('SonarQube analysis') { steps { script { LAST_STAGE = "$env.STAGE_NAME" } withSonarQubeEnv('SonarQubeServer') { sh "mvn verify sonar:sonar \ -DskipTests \ -Dsonar.projectKey=cruzlink-next-dev \ -Dsonar.projectName=cruzlink-next-dev \ -Dsonar.java.coveragePlugin=jacoco" } } } stage('Jacoco') { steps { script { LAST_STAGE = "$env.STAGE_NAME" } jacoco() } } stage('SonarQube Quality Gate') { steps { script { LAST_STAGE = 'SonarQube Quality Gate' } timeout(time: 1, unit: 'MINUTES') { script { echo 'Start~~~~' def qg = waitForQualityGate() echo "Status: ${qg.status}" if (qg.status != 'OK') { echo "NOT OK Status: ${qg.status}" error "Pipeline aborted due to quality gate failure: ${qg.status}" } else { echo "OK Status: ${qg.status}" } echo 'End~~~~' } } } } stage('parallel') { parallel { stage('Update Jar file to server') { steps { script { if (affectedModules.size() > 0) { sshPublisher( publishers: [ sshPublisherDesc( configName: 'ansible', transfers: [ sshTransfer( sourceFiles: '*/target/*.jar', removePrefix: '', remoteDirectory: './cruzlink-next/jar', // execCommand: "ansible-playbook -e '{\"modules\": '[${affectedList}]'}' /home/ansible/ansible/semaphore/playbooks/modules-dev-playbook.yaml" ) ], usePromotionTimestamp: false, verbose: true ) ] ) } } } } // stage('Docker Image Build & Push to Nexus') { // } } } } post { success { // script { // mattermostSend ( // color: 'good', // message: "작업 성공: ${env.JOB_NAME} #${env.BUILD_NUMBER}", // ) // } echo "작업 성공: ${env.JOB_NAME} #${env.BUILD_NUMBER}" } failure { // script { // echo 'failed' // mattermostSend ( // color: 'danger', // message: "작업 실패: ${env.JOB_NAME} #${env.BUILD_NUMBER} $LAST_STAGE", // ) // } echo "작업 실패: ${env.JOB_NAME} #${env.BUILD_NUMBER} $LAST_STAGE" } } } ```
되돌아가기 수정