#!/usr/bin/env groovy def PROTECTED_BRANCH def IS_LATEST node { stage('Setup') { PROTECTED_BRANCH = [ 'dev', 'test', 'master', 'main', 'beta' ].contains(env.BRANCH_NAME) IS_LATEST = ['master', 'main'].contains(env.BRANCH_NAME) // https://www.jenkins.io/doc/book/pipeline/jenkinsfile/#using-environment-variables echo "NODE_NAME: ${env.NODE_NAME}" echo "WORKSPACE: ${env.WORKSPACE}" } } pipeline { agent any options { disableConcurrentBuilds() } stages { stage('Version') { when { expression { PROTECTED_BRANCH } } steps { script { def packageJson = readJSON file: 'package.json' def version = "${packageJson.version}-build${env.BUILD_ID}" writeFile(file: 'VERSION.txt', text: version) echo "VERSION: ${version}" } } } stage('Build') { when { expression { PROTECTED_BRANCH } } environment { VERSION = readFile 'VERSION.txt' } parallel { stage('Producer') { steps { dockerBuild 'mycdc-producer', '.', 'assets/Dockerfile.producer' } } stage('Consumer') { steps { dockerBuild 'mycdc-consumer', '.', 'assets/Dockerfile.consumer' } } } } stage('Deploy') { when { branch 'dev' branch 'test' } environment { VERSION = readFile 'VERSION.txt' } steps { withKubeConfig([ serverUrl: "$KUBERNETES_API", credentialsId: 'kubernetes', namespace: 'mycdc' ]) { sh 'kubectl set image deployment/producer-$BRANCH_NAME main=$REGISTRY/mycdc-producer:$VERSION' sh 'kubectl set image deployment/consumer-$BRANCH_NAME main=$REGISTRY/mycdc-consumer:$VERSION' } } } } post { unsuccessful { setEnv() sendEmail() } } } def dockerBuild(imageName, context, dockerfile = null) { if (dockerfile == null) dockerfile = "${context}/Dockerfile" def baseImage = "${imageName}:${env.VERSION}" def image = docker.build(baseImage, "-f ${dockerfile} ${context}") dockerPush(image) } def dockerPush(image) { docker.withRegistry("https://${env.REGISTRY}", 'docker-registry') { image.push() image.push(env.BRANCH_NAME) if (IS_LATEST) image.push('latest') } }