mycdc/Jenkinsfile

105 lines
2.9 KiB
Groovy

#!/usr/bin/env groovy
def PROTECTED_BRANCH
node {
stage('Setup') {
PROTECTED_BRANCH = [
'dev',
'test',
'master',
'main',
'beta'
].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 {
anyOf {
branch 'dev'
branch 'test'
}
}
environment {
VERSION = readFile 'VERSION.txt'
}
steps {
withKubeConfig([
serverUrl: "$KUBERNETES_API",
credentialsId: 'kubernetes',
namespace: "mycdc-${env.BRANCH_NAME}"
]) {
sh 'kubectl set image deployment/producer main=$REGISTRY/mycdc-producer:$VERSION'
sh 'kubectl set image deployment/consumer 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) {
def isLatest = ['master', 'main'].contains(env.BRANCH_NAME)
docker.withRegistry("https://${env.REGISTRY}", 'docker-registry') {
image.push()
image.push(env.BRANCH_NAME)
if (isLatest) image.push('latest')
}
}