diff --git a/Jenkinsfile b/Jenkinsfile index 9383a53ea157c3f72f9ca153713c89ad2df1035f..e5fe0a6f449d1db822d685a76e8a80af2a4eb990 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -23,17 +23,10 @@ pipeline { steps { script { FAILED_STAGE = env.STAGE_NAME - def rootPom = readMavenPom file: 'pom.xml' - def rootVersion = rootPom.version - - def serverPom = readMavenPom file: 'pluto-server/pom.xml' - def serverVersion = serverPom.version - - def interfacePom = readMavenPom file: 'pluto-interface/pom.xml' - def interfaceVersion = interfacePom.version - - def mailPom = readMavenPom file: 'mail-service/pom.xml' - def mailVersion = mailPom.version + def rootVersion = getPomVersion('pom.xml') + def serverVersion = getPomVersion('pluto-server/pom.xml') + def interfaceVersion = getPomVersion('pluto-interface/pom.xml') + def mailVersion = getPomVersion('mail-service/pom.xml') if(env.BRANCH_NAME == 'release'){ if ( !(rootVersion ==~ RELEASE_REGEX) || !(serverVersion ==~ RELEASE_REGEX) || !(interfaceVersion ==~ RELEASE_REGEX) || !(mailVersion ==~ RELEASE_REGEX)) { @@ -105,61 +98,57 @@ pipeline { } } - stage('Push Docker image') { + stage('Tag and Push Docker image') { steps { script { FAILED_STAGE=env.STAGE_NAME - def pom = readMavenPom file: 'pom.xml' - def version = pom.version + IMAGE_TAG = generateImageTag() - container("docker") { - withCredentials([usernamePassword(credentialsId: 'jenkins-docker-login', usernameVariable: 'USER', passwordVariable: 'PASSWORD')]) { - sh 'docker login docker.ozg-sh.de -u ${USER} -p ${PASSWORD}' + tagAndPushDockerImage(IMAGE_TAG) - sh "docker tag docker.ozg-sh.de/pluto:build-latest docker.ozg-sh.de/pluto:${env.BRANCH_NAME}-${version}" - sh "docker push docker.ozg-sh.de/pluto:${env.BRANCH_NAME}-${version}" + if (env.BRANCH_NAME == 'master') { + tagAndPushDockerImage('snapshot-latest') + tagAndPushDockerImage('e2e-test') + } + else if (env.BRANCH_NAME == 'release') { + tagAndPushDockerImage('latest') + } + } + } + } - if (env.BRANCH_NAME == 'master') { - sh 'docker tag docker.ozg-sh.de/pluto:build-latest docker.ozg-sh.de/pluto:e2e-test' - sh 'docker push docker.ozg-sh.de/pluto:e2e-test' + stage('Trigger Dev rollout') { + when { + branch 'master' + } + steps { + script { + FAILED_STAGE = env.STAGE_NAME - sh 'docker tag docker.ozg-sh.de/pluto:build-latest docker.ozg-sh.de/pluto:snapshot-latest' - sh 'docker push docker.ozg-sh.de/pluto:snapshot-latest' - } + checkoutProvisioningRepo() - if (env.BRANCH_NAME == 'release') { - sh 'docker tag docker.ozg-sh.de/pluto:build-latest docker.ozg-sh.de/pluto:latest' - sh 'docker push docker.ozg-sh.de/pluto:latest' - } - } - } + setNewPlutoProvisioningVersion('dev') + + pushNewProvisioningVersion('dev') } } } - - stage('Deploy Pluto') { - when { - anyOf { - branch 'master' - branch 'release' - } + stage('Trigger Test | Stage rollout') { + when { + branch 'release' } steps { script { - FAILED_STAGE = env.STAGE_NAME - } - container("kubectl"){ - script { - if (env.BRANCH_NAME == 'master') { - sh 'kubectl rollout restart deployment/pluto -n sh-kiel-dev' - sh 'kubectl rollout status deployment/pluto -n sh-kiel-dev' - - sh 'kubectl rollout restart deployment/pluto -n sh-ea-dev' - sh 'kubectl rollout status deployment/pluto -n sh-ea-dev' - } - } - } + FAILED_STAGE = env.STAGE_NAME + + checkoutProvisioningRepo() + + setNewPlutoProvisioningVersion('test') + setNewPlutoProvisioningVersion('stage') + + pushNewProvisioningVersion('test stage') + } } } @@ -246,6 +235,80 @@ pipeline { } } + + +Void tagAndPushDockerImage(String newTag){ + container("docker") { + withCredentials([usernamePassword(credentialsId: 'jenkins-docker-login', usernameVariable: 'USER', passwordVariable: 'PASSWORD')]) { + sh 'docker login docker.ozg-sh.de -u ${USER} -p ${PASSWORD}' + + sh "docker tag docker.ozg-sh.de/pluto:build-latest docker.ozg-sh.de/pluto:${newTag}" + sh "docker push docker.ozg-sh.de/pluto:${newTag}" + } + } +} + +String getPomVersion(String pomFile){ + def pom = readMavenPom file: pomFile + + return pom.version +} + +String generateImageTag() { + def imageTag = "${env.BRANCH_NAME}-${getPomVersion('pom.xml')}" + + if (env.BRANCH_NAME == 'master') { + imageTag += "-${env.GIT_COMMIT.take(7)}" + } + + return imageTag +} + +Void checkoutProvisioningRepo() { + withCredentials([usernamePassword(credentialsId: 'jenkins-gitea-access-token', passwordVariable: 'TOKEN', usernameVariable: 'USER')]) { + sh 'git clone https://${USER}:${TOKEN}@git.ozg-sh.de/mgm/provisioning.git' + + if (env.BRANCH_NAME == 'release') { + dir('provisioning') { + sh 'git checkout release' + } + } + } +} + +Void setNewPlutoProvisioningVersion(String environment) { + dir("provisioning") { + def envFile = "inventories/group_vars/${environment}/versions" + + if (env.BRANCH_NAME == 'release') { + envFile = "playbook/inventory/versions/${environment}.yml" + } + + def envVersions = readYaml file: envFile + + envVersions.versions.pluto.image.tag = IMAGE_TAG + + writeYaml file: envFile, data: envVersions, overwrite: true + } +} + +Void pushNewProvisioningVersion(String environment) { + withCredentials([usernamePassword(credentialsId: 'jenkins-gitea-access-token', passwordVariable: 'TOKEN', usernameVariable: 'USER')]) { + dir('provisioning') { + if (env.BRANCH_NAME == 'release') { + sh 'git add playbook/inventory/versions/.' + } + else { + sh 'git add inventories/group_vars/*/versions' + } + sh 'git config user.email "jenkins@ozg.de"' + sh 'git config user.name "jenkins"' + sh "git commit -m 'jenkins rollout ${environment} pluto version ${IMAGE_TAG}'" + sh 'git push https://${USER}:${TOKEN}@git.ozg-sh.de/mgm/provisioning.git' + } + } +} + Void sendFailureMessage() { def room = '' def data = """{"msgtype":"m.text", \