From 7a8a7fe4d157a7ac9b0ced6d648947e090e90a4a Mon Sep 17 00:00:00 2001 From: Juan Ferrer Toribio Date: Wed, 26 Feb 2025 17:06:54 +0100 Subject: [PATCH] refs #4685 Jenkinsfile improved for branch deploy --- Jenkinsfile | 88 +++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 76 insertions(+), 12 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 2a53e04..ebfa971 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,33 +1,81 @@ #!/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('Build') { - when {branch 'master'} + stage('Version') { + when { + expression { PROTECTED_BRANCH } + } steps { script { def packageJson = readJSON file: 'package.json' - env.VERSION = packageJson.version + def version = "${packageJson.version}-build${env.BUILD_ID}" + writeFile(file: 'VERSION.txt', text: version) + echo "VERSION: ${version}" } - sh 'docker-compose build --build-arg BUILD_ID=$BUILD_ID --parallel' } } - stage('Push') { - when {branch 'master'} + stage('Build') { + when { + expression { PROTECTED_BRANCH } + } environment { - CREDENTIALS = credentials('docker-registry') + 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 { - script { - def packageJson = readJSON file: 'package.json' - env.VERSION = packageJson.version + 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' } - sh 'docker login --username $CREDENTIALS_USR --password $CREDENTIALS_PSW $REGISTRY' - sh 'docker-compose push' } } } @@ -38,3 +86,19 @@ pipeline { } } } + +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') + } +}