pipeline {
agent any
options { disableConcurrentBuilds() }
environment {
IMAGE_NAME = 'docker.nextuser.com/nextuser/poc_elc_ai-api:latest'
CONTAINER_NAME = 'poc_elc_ai-api'
REGISTRY = credentials('jenkins-portus')
PROJECT = projectName()
SWAGGER_PROD = 'https://elc-ai.nextuser.com/'
}
stages {
stage('Build App') {
steps {
sh 'docker build . --no-cache -t ' + IMAGE_NAME
}
}
stage('Docker Image Push') {
when {
branch 'master'
}
steps {
dockerLogin REGISTRY_USR, REGISTRY_PSW
sh 'docker push ' + IMAGE_NAME
sh 'docker rmi ' + IMAGE_NAME
}
}
stage('deploy prod') {
when {
branch 'master'
}
environment {
DOCKER_HOST = 'tcp://172.13.0.46:2375'
}
steps {
script {
def deployTime = benchmark {
dockerLogin REGISTRY_USR, REGISTRY_PSW
if (!swarmCheck().contains(CONTAINER_NAME)) {
swarmDeploy CONTAINER_NAME
echo 'deployed entire service'
} else {
swarmUpdate(CONTAINER_NAME + "_" + CONTAINER_NAME, IMAGE_NAME)
echo 'updated service'
}
}
def buildTime = currentBuild.durationString.replace(' and counting', '')
slackMessage = "Deployed *${env.JOB_NAME} to PROD* \n" +
"Links: <${env.RUN_DISPLAY_URL}|Pipeline>" +
", <${LinkGenerator.kibana("${CONTAINER_NAME}")}|Logtrail>" +
", <${SWAGGER_PROD}|Swagger> \n" +
"Deployment time: ${deployTime} ms, Pipeline time: ${buildTime}"
}
slackSend(channel: 'general', color: 'good', message: slackMessage)
}
}
}
post {
success {
script {
if (env.BRANCH_NAME == 'master') {
return
}
def buildTime = currentBuild.durationString.replace(' and counting', '')
slackSend(channel: 'general', color: 'good',
message: "Success *${env.JOB_NAME} [${env.BUILD_NUMBER}]*" +
" (<${env.RUN_DISPLAY_URL}|Pipeline>)" +
"\nPipeline time: ${buildTime}")
}
}
failure {
slackSend(color: 'danger', message:
"Failed '${env.JOB_NAME} [${env.BUILD_NUMBER}]' (<${env.RUN_DISPLAY_URL}|Pipeline>)")
}
}
}