You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
148 lines
6.8 KiB
Plaintext
148 lines
6.8 KiB
Plaintext
3 years ago
|
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."
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|