def git_version=""
def publish_version=""
def branch_name = ""
def gatewayImage = ""
pipeline {
agent {
label 'docker-agent'
}
options {
timestamps()
buildDiscarder(logRotator(numToKeepStr: '5'))
skipStagesAfterUnstable()
}
parameters {
booleanParam(name: 'PUBLISH_TO_NEXUS', defaultValue: true, description: 'You can override the publish version to Archiva.')
string(name: 'VERSION', defaultValue: '1.0.0', description: 'Service version')
string(name: 'IMAGE_NAME', defaultValue: 'paytail-admin-service', description: 'name of the docker image')
string(name: 'DEV_IMAGE_NAME', defaultValue: 'paytail-admin-service-dev', description: 'name of the dev docker image')
string(name: 'UAT_IMAGE_NAME', defaultValue: 'paytail-admin-service-uat', description: 'name of the uat docker image')
string(name: 'AWS_ACCOUNT_ID', defaultValue: '', description: 'aws account id')
string(name: 'AWS_DEFAULT_REGION', defaultValue: 'ap-south-1', description: 'aws default region')
string(name: 'UAT_TASK_FAMILY', defaultValue: 'uat-service', description: 'uat task family')
string(name: 'UAT_ECS_CLUSTER', defaultValue: 'uat-cluster', description: 'uat ecs cluster')
string(name: 'UAT_SERVICE_NAME', defaultValue: 'uat-serive-name', description: 'uat service name')
string(name: 'TASK_FAMILY', defaultValue: 'serive-name', description: 'prod task family')
string(name: 'ECS_CLUSTER', defaultValue: 'prod-cluster', description: 'prod ecs cluster')
string(name: 'SERVICE_NAME', defaultValue: 'serive-name', description: 'prod service name')
string(name: 'DEV_TASK_FAMILY', defaultValue: 'dev-serive-name', description: 'dev task family')
string(name: 'DEV_ECS_CLUSTER', defaultValue: 'dev-cluster', description: 'dev ecs cluster')
string(name: 'DEV_SERVICE_NAME', defaultValue: 'dev-serive-name', description: 'dev service name')
}
stages {
stage('Update Versions') {
steps {
script {
FAILED_STAGE=env.STAGE_NAME
git_version = sh (returnStdout: true, script: '''
git rev-parse --short HEAD
''').trim()
git_msg = sh (script: 'git log -1 --pretty=%B ${GIT_COMMIT}', returnStdout: true).trim()
branch_name = "${env.BRANCH_NAME}"
echo "Branch Name: ${branch_name} and Commit Message: ${git_msg}"
publish_version = "${params.VERSION}.${env.BUILD_NUMBER}"
currentBuild.displayName = publish_version
currentBuild.description = "Branch: ${branch_name} \n Publish Version: $publish_version"
sh """
mvn versions:set -DnewVersion='${publish_version}' -DgenerateBackupPoms=false
"""
}
}
}
stage('Build Admin Service') {
steps {
script {
echo "Admin Service Build Started"
sh '''
mvn clean install -DskipTests
'''
echo "Admin Service Build Complete"
}
}
}
stage('SonarQube Scan') {
steps {
script {
echo "SonarQube scan Started"
sh '''
mvn sonar:sonar
'''
echo "SonarQube scan Complete"
}
}
}
// stage('Push to Nexus') {
// when{
// expression {"${params.PUBLISH_TO_NEXUS}"}
// }
// steps {
// script {
// sh '''
// mvn clean deploy
// '''
// }
// }
// }
stage('Docker build') {
when{
expression {"${params.PUBLISH_TO_NEXUS}"}
}
steps {
script {
echo "Docker build and Push container to AWS ECR"
docker.withRegistry(
'https://069009843741.dkr.ecr.ap-south-1.amazonaws.com',
'ecr:ap-south-1:aws-credential'){
if (env.BRANCH_NAME == 'uat'){
gatewayImage = docker.build("${params.UAT_IMAGE_NAME}")
}
else if (env.BRANCH_NAME == 'dev'){
gatewayImage = docker.build("${params.DEV_IMAGE_NAME}")
}
else if(env.BRANCH_NAME == 'main' && git_msg.startsWith('Deploy')) {
gatewayImage = docker.build("${params.IMAGE_NAME}")
}
gatewayImage.push("${params.VERSION}.${env.BUILD_NUMBER}")
}
}
}
}
stage('Redeploy ECS Service') {
steps {
script {
echo "Docker deployment on AWS ECS"
withAWS(credentials: 'aws-credential',region: 'ap-south-1'){
if(env.BRANCH_NAME == 'uat' && git_msg.startsWith('Deploy')){
ECR_IMAGE="${params.AWS_ACCOUNT_ID}.dkr.ecr.${params.AWS_DEFAULT_REGION}.amazonaws.com/${params.UAT_IMAGE_NAME}:${params.VERSION}.${env.BUILD_NUMBER}"
TASK_DEFINITION=sh(script: "/usr/local/bin/aws ecs describe-task-definition --task-definition ${params.UAT_TASK_FAMILY} --region ${params.AWS_DEFAULT_REGION}",returnStdout: true)
echo "previous task definition: task${TASK_DEFINITION}"
NEW_TASK_DEFINTIION=sh(script: "/usr/local/bin/aws ecs describe-task-definition --task-definition ${params.UAT_TASK_FAMILY} --region ${params.AWS_DEFAULT_REGION} | jq 'map(.containerDefinitions[0].image=\"${ECR_IMAGE}\")' > uat-user-service.json",returnStdout: true)
sh("cat uat-user-service.json | jq '.[0] | del(.taskDefinitionArn) | del(.revision) | del(.status) | del(.requiresAttributes) | del(.compatibilities) | del(.registeredAt) |del (.registeredBy)' > uat-user-service-new.json")
NEW_REVISION=sh(script:"/usr/local/bin/aws ecs register-task-definition --region ${params.AWS_DEFAULT_REGION} --cli-input-json file://uat-user-service-new.json | jq '.taskDefinition.revision'",returnStdout: true)
echo "Revision Number ${NEW_REVISION}"
sh ("/usr/local/bin/aws ecs update-service --cluster ${params.UAT_ECS_CLUSTER} --service ${params.UAT_SERVICE_NAME} --task-definition ${params.UAT_TASK_FAMILY}:${NEW_REVISION}")
}
if(env.BRANCH_NAME == 'main' && git_msg.startsWith('Deploy')){
ECR_IMAGE="${params.AWS_ACCOUNT_ID}.dkr.ecr.${params.AWS_DEFAULT_REGION}.amazonaws.com/${params.IMAGE_NAME}:${params.VERSION}.${env.BUILD_NUMBER}"
TASK_DEFINITION=sh(script: "/usr/local/bin/aws ecs describe-task-definition --task-definition ${params.TASK_FAMILY} --region ${params.AWS_DEFAULT_REGION}",returnStdout: true)
echo "previous task definition: task${TASK_DEFINITION}"
NEW_TASK_DEFINTIION=sh(script: "/usr/local/bin/aws ecs describe-task-definition --task-definition ${params.TASK_FAMILY} --region ${params.AWS_DEFAULT_REGION} | jq 'map(.containerDefinitions[0].image=\"${ECR_IMAGE}\")' > user-service.json",returnStdout: true)
sh("cat user-service.json | jq '.[0] | del(.taskDefinitionArn) | del(.revision) | del(.status) | del(.requiresAttributes) | del(.compatibilities) | del(.registeredAt) |del (.registeredBy)' > user-service-new.json")
NEW_REVISION=sh(script:"/usr/local/bin/aws ecs register-task-definition --region ${params.AWS_DEFAULT_REGION} --cli-input-json file://user-service-new.json | jq '.taskDefinition.revision'",returnStdout: true)
echo "Revision Number ${NEW_REVISION}"
sh ("/usr/local/bin/aws ecs update-service --cluster ${params.ECS_CLUSTER} --service ${params.SERVICE_NAME} --task-definition ${params.TASK_FAMILY}:${NEW_REVISION}")
}
if(env.BRANCH_NAME == 'dev' && git_msg.startsWith('Deploy')){
ECR_IMAGE="${params.AWS_ACCOUNT_ID}.dkr.ecr.${params.AWS_DEFAULT_REGION}.amazonaws.com/${params.DEV_IMAGE_NAME}:${params.VERSION}.${env.BUILD_NUMBER}"
TASK_DEFINITION=sh(script: "/usr/local/bin/aws ecs describe-task-definition --task-definition ${params.DEV_TASK_FAMILY} --region ${params.AWS_DEFAULT_REGION}",returnStdout: true)
echo "previous task definition: task${TASK_DEFINITION}"
NEW_TASK_DEFINTIION=sh(script: "/usr/local/bin/aws ecs describe-task-definition --task-definition ${params.DEV_TASK_FAMILY} --region ${params.AWS_DEFAULT_REGION} | jq 'map(.containerDefinitions[0].image=\"${ECR_IMAGE}\")' > dev-user-service.json",returnStdout: true)
sh("cat dev-user-service.json | jq '.[0] | del(.taskDefinitionArn) | del(.revision) | del(.status) | del(.requiresAttributes) | del(.compatibilities) | del(.registeredAt) |del (.registeredBy)' > dev-user-service-new.json")
NEW_REVISION=sh(script:"/usr/local/bin/aws ecs register-task-definition --region ${params.AWS_DEFAULT_REGION} --cli-input-json file://dev-user-service-new.json | jq '.taskDefinition.revision'",returnStdout: true)
echo "Revision Number ${NEW_REVISION}"
sh ("/usr/local/bin/aws ecs update-service --cluster ${params.DEV_ECS_CLUSTER} --service ${params.DEV_SERVICE_NAME} --task-definition ${params.DEV_TASK_FAMILY}:${NEW_REVISION}")
}
}
}
}
}
}
post {
always{
sh '''
docker logout $DOCKER_REGISTRY
'''
cleanWs()
dir("${env.WORKSPACE}@tmp") {
deleteDir()
}
dir("${env.WORKSPACE}@script") {
deleteDir()
}
dir("${env.WORKSPACE}@script@tmp") {
deleteDir()
}
}
}
}