pipeline { agent any stages { stage('Git Pull') { steps { script { try { //echo 'prepare' //git branch: "master", credentialsId: "$GIT_CREDENTIALS_ID", url: 'git@github.com:minuk926/xit-framework.git/' git branch: 'master', url: 'git@github.com:minuk926/xit-framework.git', credentialsId: 'jenkins_aws_connect_key' sh rm -rf .git sh 'ls -al' env.cloneResult=true } catch (error) { print(error) env.cloneResult=false currentBuild.result = 'FAILURE' } } } } stage('Build WAR') { when { expression { return env.cloneResult ==~ /(?i)(Y|YES|T|TRUE|ON|RUN)/ } } steps { script{ try { sh """ rm -rf deploy mkdir deploy """ sh "sudo sed -i \"s/module_name=.*/module_name=${env.JOB_NAME}\\:${env.BUILD_NUMBER}/g\" /var/lib/jenkins/workspace/${env.JOB_NAME}/src/main/resources/application.properties" sh "cat /var/lib/jenkins/workspace/${env.JOB_NAME}/src/main/resources/application.properties" sh 'gradlew clean bootWar' sh """ cd deploy cp /var/lib/jenkins/workspace/${env.JOB_NAME}/build/libs/*.war ./ROOT.war """ env.gradleBuildResult=true } catch (error) { print(error) echo 'Remove Deploy Files' sh "sudo rm -rf /var/lib/jenkins/workspace/${env.JOB_NAME}/*" env.gradleBuildResult=false currentBuild.result = 'FAILURE' } } } post { success { slackSend channel: '#pipeline-deploy', color: 'good', message: "The pipeline ${currentBuild.fullDisplayName} stage Build WAR successfully." } failure { slackSend channel: '#pipeline-deploy', color: 'danger', message: "The pipeline ${currentBuild.fullDisplayName} stage Build WAR failed." } } } stage('Docker Build'){ when { expression { return env.mavenBuildResult ==~ /(?i)(Y|YES|T|TRUE|ON|RUN)/ } } steps { script{ try { sh""" #!/bin/bash cd ./deploy cat>Dockerfile<<-EOF FROM ${ECR_BASE_URL}:latest ADD ${env.JOB_NAME}.jar /home/${env.JOB_NAME}.jar CMD nohup java -jar /home/${env.JOB_NAME}.jar 1> /dev/null 2>&1 EXPOSE 9000 EOF""" sh""" cd ./deploy docker rmi -f \$(docker images -q) \$(aws ecr get-login --no-include-email --region ap-northeast-2) docker build -t ${SERVICE_NAME.toLowerCase()} . docker tag ${SERVICE_NAME.toLowerCase()}:latest ${ECR_TASK_URL}:ver${env.BUILD_NUMBER} docker push ${ECR_TASK_URL}:ver${env.BUILD_NUMBER} """ echo 'Remove Deploy Files' sh "sudo rm -rf /var/lib/jenkins/workspace/${env.JOB_NAME}/*" env.dockerBuildResult=true } catch (error) { print(error) echo 'Remove Deploy Files' sh "sudo rm -rf /var/lib/jenkins/workspace/${env.JOB_NAME}/*" env.dockerBuildResult=false currentBuild.result = 'FAILURE' } } } post { success { slackSend channel: '#jenkins', color: 'good', message: "The pipeline ${currentBuild.fullDisplayName} stage Docker Build successfully." } failure { slackSend channel: '#jenkins', color: 'danger', message: "The pipeline ${currentBuild.fullDisplayName} stage Docker Build failed." } } } stage('Deploy'){ when { expression { return env.dockerBuildResult ==~ /(?i)(Y|YES|T|TRUE|ON|RUN)/ } } steps { script{ try { withAWS(credentials:"$AWS_CREDENTIALS") { sh "aws ecs describe-task-definition --task-definition ${TASK_DEFINITION} --region ap-northeast-2 --query \"taskDefinition.{\"family\": family, \"containerDefinitions\": containerDefinitions, \"executionRoleArn\": executionRoleArn,\"requiresCompatibilities\": requiresCompatibilities}\" --output json > task-definition.json" def task_repository_name = sh( script:""" echo \"${ECR_TASK_URL}\" | awk \'{ split(\$0, arr, \"/\"); print arr[2] }\' """, returnStdout: true ).trim() sh "sudo sed -i \"9s/${task_repository_name}:.*/${task_repository_name}:ver${env.BUILD_NUMBER}\\\",/g\" task-definition.json" sh "cat task-definition.json" sh "aws ecs register-task-definition --cli-input-json file://task-definition.json --region ap-northeast-2" sh "aws ecs update-service --cluster ${CLUSTER_NAME} --service ${SERVICE_NAME} --task-definition ${TASK_DEFINITION} --region ap-northeast-2" } } catch (error) { print(error) echo 'Remove Deploy Files' sh "sudo rm -rf /var/lib/jenkins/workspace/${env.JOB_NAME}/*" currentBuild.result = 'FAILURE' } } } post { success { slackSend channel: '#jenkins', color: 'good', message: "The pipeline ${currentBuild.fullDisplayName} successfully." } failure { slackSend channel: '#jenkins', color: 'danger', message: "The pipeline ${currentBuild.fullDisplayName} failed." } } } } }