pipeline { agent any parameters { booleanParam(name: 'DRY_RUN', defaultValue: 'true', description: 'Stay on DEV branches') booleanParam(name: 'SKIP_TESTS', defaultValue: 'false', description: 'Skip tests') string(name: 'NEW_VERSION', defaultValue: '', description: 'New version, eg: 2020.0.0') string(name: 'NEXT_VERSION', defaultValue: '2020.1.0', description: 'Next version') string(name: 'NEW_VERSION_MESSAGE', defaultValue: 'Nouvelle version', description: 'New version message') string(name: 'GIT_CREDENTIAL_ID', defaultValue: 'jenkins-jenkins-ssh-key', description: '') } options { disableConcurrentBuilds() buildDiscarder(logRotator(numToKeepStr: '10')) } stages { stage('Prepare release') { steps { buildName "#${BUILD_NUMBER} ${params.NEW_VERSION}" script { env.LIFEISLIFE_RELEASE_BRANCH = (params.DRY_RUN ? 'dev' : 'master') env.LIFEISLIFE_DEV_BRANCH = (params.DRY_RUN ? 'dev' : 'dev') env.JOB_BUILD_WILDFLY = (params.DRY_RUN ? 'lifeislife/lifeislife-back/dev' : 'lifeislife/lifeislife-back/master') env.JOB_TEST_WILDFLY = (params.DRY_RUN ? 'lifeislife/lifeislife-it/dev' : 'lifeislife/lifeislife-it/master') env.CLUSTER_STACK = (params.DRY_RUN ? 'lifeislifedev' : 'lifeislifeprod') env.JOB_BUILD_FRONTENDS = (params.DRY_RUN ? 'lifeislife/lifeislife-front/dev' : 'lifeislife/lifeislife-front/master') env.SKIP_TESTS = params.SKIP_TEST } checkout poll: false, scm: [$class: 'GitSCM', branches: [[name: "*/${LIFEISLIFE_DEV_BRANCH}"],[name: "*/${LIFEISLIFE_RELEASE_BRANCH}"]], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'lifeislife-back']], userRemoteConfigs: [[credentialsId: 'jenkins-jenkins-ssh-key', url: 'ssh://git@gitlab.valuya.be:1022/lifeislife/lifeislife-back.git']]] dir ('lifeislife-back') { sh "echo 'back: merges: ' >>../release.log" sh "git log origin/${LIFEISLIFE_RELEASE_BRANCH}..origin/${LIFEISLIFE_DEV_BRANCH} --pretty=format:'[%cd %ce %h] %s' --min-parents=2 --date=short >>../release.log" sh "echo 'back: commits: ' >>../release.log" sh "git log origin/${LIFEISLIFE_RELEASE_BRANCH}..origin/${LIFEISLIFE_DEV_BRANCH} --pretty=format:'[%cd %ce %h] %s' --max-parents=1 --date=short >>../release.log" sh "echo '' >> ./release.log" } checkout poll: false, scm: [$class: 'GitSCM', branches: [[name: "*/${LIFEISLIFE_DEV_BRANCH}"],[name: "*/${LIFEISLIFE_RELEASE_BRANCH}"]], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'lifeislife-front']], userRemoteConfigs: [[credentialsId: 'jenkins-jenkins-ssh-key', url: 'ssh://git@gitlab.valuya.be:1022/lifeislife/lifeislife-front.git']]] dir ('lifeislife-front') { sh "echo 'Front: merges: ' >>../release.log" sh "git log origin/${LIFEISLIFE_RELEASE_BRANCH}..origin/${LIFEISLIFE_DEV_BRANCH} --pretty=format:'[%cd %ce %h] %s' --min-parents=2 --date=short >>../release.log" sh "echo 'Front: commits: ' >>../release.log" sh "git log origin/${LIFEISLIFE_RELEASE_BRANCH}..origin/${LIFEISLIFE_DEV_BRANCH} --pretty=format:'[%cd %ce %h] %s' --max-parents=1 --date=short >>../release.log" sh "echo '' >> ./release.log" } stash includes: 'release.log', name: 'release-log' } } stage('Release Lifeislife') { steps { build job: "lifeislife/release-lifeislife-back", parameters: [ string(name: 'NEW_VERSION', value: "${params.NEW_VERSION}"), string(name: 'RELEASE_BRANCH', value: "${env.LIFEISLIFE_RELEASE_BRANCH}"), string(name: 'GIT_REPO_BRANCH', value: "${env.LIFEISLIFE_DEV_BRANCH}"), ] } } stage('Test Lifeislife') { when { expression { return params.SKIP_TESTS != true } } steps { build job: "${env.JOB_TEST_WILDFLY}", parameters: [ booleanParam(name: 'SKIP_TESTS', value: false), ] } } stage('Build Lifeislife') { steps { build job: "${env.JOB_BUILD_WILDFLY}", parameters: [ booleanParam(name: 'SKIP_TESTS', value: true), booleanParam(name: 'FORCE_DEPLOY', value: true), ] } } stage('Update front api') { steps { build job: "lifeislife/update-api-lifeislife-front/${env.LIFEISLIFE_DEV_BRANCH}", parameters: [ string(name: 'API_VERSION', value: "${params.NEW_VERSION}"), booleanParam(name: 'SKIP_BUILD_LIBS', value: true), ] } } stage('Release lifeislife front') { steps { build job: "lifeislife/release-lifeislife-front/${env.LIFEISLIFE_DEV_BRANCH}", parameters: [ string(name: 'NEW_VERSION', value: "${params.NEW_VERSION}"), string(name: 'RELEASE_BRANCH', value: "${env.LIFEISLIFE_RELEASE_BRANCH}"), string(name: 'DEV_BRANCH', value: "${env.LIFEISLIFE_DEV_BRANCH}"), booleanParam(name: 'SKIP_BUILD', value: true), booleanParam(name: 'SKIP_NEXT_VERSION', value: true), ] } } stage('Build lifeislife-front') { steps { build job: "${env.JOB_BUILD_FRONTENDS}", parameters: [ ] } } stage('Update cluster state') { steps { build job: 'infra/cluster-conf-update', parameters: [ string(name:"STACK", value:"${env.CLUSTER_STACK}"), string(name:"VALUES_FILE", value:"values.wildfly.yaml"), string(name:"VALUES_KEY", value:".wildfly.deployment.imageTag"), string(name:"VALUES_VALUE", value:"\"${params.NEW_VERSION}\"") ] build job: 'infra/cluster-conf-update', parameters: [ string(name:"STACK", value:"${env.CLUSTER_STACK}"), string(name:"VALUES_FILE", value:"values.front-admin.yaml"), string(name:"VALUES_KEY", value:".adminFront.deployment.imageTag"), string(name:"VALUES_VALUE", value:"\"${params.NEW_VERSION}\"") ] build job: 'infra/cluster-conf-update', parameters: [ string(name:"STACK", value:"${env.CLUSTER_STACK}"), string(name:"VALUES_FILE", value:"values.front-customer.yaml"), string(name:"VALUES_KEY", value:".customerFront.deployment.imageTag"), string(name:"VALUES_VALUE", value:"\"${params.NEW_VERSION}\"") ] build job: 'infra/cluster-conf-update', parameters: [ string(name:"STACK", value:"${env.CLUSTER_STACK}"), string(name:"VALUES_FILE", value:"values.front-mypension.yaml"), string(name:"VALUES_KEY", value:".mypensionFront.deployment.imageTag"), string(name:"VALUES_VALUE", value:"\"${params.NEW_VERSION}\""), ] build job: 'infra/cluster-conf-update', parameters: [ string(name:"STACK", value:"${env.CLUSTER_STACK}"), string(name:"VALUES_FILE", value:"values.front-simu.yaml"), string(name:"VALUES_KEY", value:".simuFront.deployment.imageTag"), string(name:"VALUES_VALUE", value:"\"${params.NEW_VERSION}\""), ] } } stage('Release next version') { steps { build job: "lifeislife/release-lifeislife-back", parameters: [ string(name: 'NEW_VERSION', value: "${params.NEXT_VERSION}-SNAPSHOT"), string(name: 'RELEASE_BRANCH', value: "${env.LIFEISLIFE_DEV_BRANCH}"), string(name: 'GIT_REPO_BRANCH', value: "${env.LIFEISLIFE_RELEASE_BRANCH}"), booleanParam(name: 'SKIP_PUSH_TAG', value: true), ] build job: "lifeislife/release-lifeislife-front/${env.LIFEISLIFE_RELEASE_BRANCH}", parameters: [ string(name: 'NEW_VERSION', value: "${params.NEXT_VERSION}-rc.0"), string(name: 'RELEASE_BRANCH', value: "${env.LIFEISLIFE_DEV_BRANCH}"), string(name: 'DEV_BRANCH', value: "${env.LIFEISLIFE_RELEASE_BRANCH}"), booleanParam(name: 'SKIP_BUILD', value: true), booleanParam(name: 'SKIP_NEXT_VERSION', value: true), booleanParam(name: 'SKIP_PUSH_TAG', value: true), ] } } } post { failure { mail( to: 'charlyghislain@gmail.com', cc: 'yannick@valuya.be', subject: "lifeislife RELEASE ${BUILD_NUMBER} failed", body: "See job at ${BUILD_URL}" ) } success { unstash 'release-log' script { env.RELEASE_LOG = readFile(file: './release.log') env.MAIL_BODY = "Changes: \n" + "${RELEASE_LOG}" } mail( to: 'charlyghislain@gmail.com', cc: 'yannick@valuya.be', subject: "lifeislife ${params.NEW_VERSION} released", body: "${env.MAIL_BODY}" ) } } }