diff --git a/Jenkinsfile b/Jenkinsfile index 1f909ef5a02c987fd514c45aa951701dc36094ca..4e78a4bfc6138433bd452183744d592a28c3f4b0 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -105,50 +105,27 @@ 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 - - container("docker") { - withCredentials([usernamePassword(credentialsId: 'jenkins-docker-login', usernameVariable: 'USER', passwordVariable: 'PASSWORD')]) { - sh 'docker login docker.ozg-sh.de -u ${USER} -p ${PASSWORD}' - - //intelliform adapter - sh "docker tag docker.ozg-sh.de/intelliform-adapter:build-latest docker.ozg-sh.de/intelliform-adapter:${env.BRANCH_NAME}-${version}" - sh "docker push docker.ozg-sh.de/intelliform-adapter:${env.BRANCH_NAME}-${version}" - - if (env.BRANCH_NAME == 'master') { - sh 'docker tag docker.ozg-sh.de/intelliform-adapter:build-latest docker.ozg-sh.de/intelliform-adapter:snapshot-latest' - sh 'docker push docker.ozg-sh.de/intelliform-adapter:snapshot-latest' - } - - if (env.BRANCH_NAME == 'release') { - sh 'docker tag docker.ozg-sh.de/intelliform-adapter:build-latest docker.ozg-sh.de/intelliform-adapter:latest' - sh 'docker push docker.ozg-sh.de/intelliform-adapter:latest' - } - - //formsolutions adapter - sh "docker tag docker.ozg-sh.de/formsolutions-adapter:build-latest docker.ozg-sh.de/formsolutions-adapter:${env.BRANCH_NAME}-${version}" - sh "docker push docker.ozg-sh.de/formsolutions-adapter:${env.BRANCH_NAME}-${version}" - - if (env.BRANCH_NAME == 'master') { - sh 'docker tag docker.ozg-sh.de/formsolutions-adapter:build-latest docker.ozg-sh.de/formsolutions-adapter:snapshot-latest' - sh 'docker push docker.ozg-sh.de/formsolutions-adapter:snapshot-latest' - } - - if (env.BRANCH_NAME == 'release') { - sh 'docker tag docker.ozg-sh.de/formsolutions-adapter:build-latest docker.ozg-sh.de/formsolutions-adapter:latest' - sh 'docker push docker.ozg-sh.de/formsolutions-adapter:latest' - } - } + IMAGE_TAG = generateImageTag() + + tagAndPushDockerImage('intelliform-adapter', IMAGE_TAG) + tagAndPushDockerImage('formsolutions-adapter', IMAGE_TAG) + + if (env.BRANCH_NAME == 'master') { + tagAndPushDockerImage('intelliform-adapter', 'snapshot-latest') + tagAndPushDockerImage('formsolutions-adapter', 'snapshot-latest') + } + else if (env.BRANCH_NAME == 'release') { + tagAndPushDockerImage('intelliform-adapter', 'latest') + tagAndPushDockerImage('formsolutions-adapter', 'latest') } } } } - stage('Rollout Dev Intelliform-Adapter') { + stage('Trigger Dev rollout') { when { branch 'master' } @@ -156,38 +133,31 @@ pipeline { script { FAILED_STAGE = env.STAGE_NAME - rolloutDev() + checkoutProvisioningRepo() + + setNewProvisioningVersion('dev') + + pushNewProvisioningVersion('dev') } } } stage('Trigger Test | Stage rollout') { when { - // todo rename to release - branch 'ozg-2502' + branch 'release' } steps { script { FAILED_STAGE = env.STAGE_NAME - def pom = readMavenPom file: 'pom.xml' - def version = pom.version - - withCredentials([usernamePassword(credentialsId: 'jenkins-gitea-access-token', passwordVariable: 'TOKEN', usernameVariable: 'USER')]) { - sh 'git clone https://${USER}:${TOKEN}@git.ozg-sh.de/mgm/provisioning.git' - - // todo remove - dir('provisioning') { - sh 'git checkout ozg-2502' - } + checkoutProvisioningRepo() - setNewProvisioningVersion('test', version) - setNewProvisioningVersion('stage', version) + setNewProvisioningVersion('test') + setNewProvisioningVersion('stage') - pushNewProvisioningVersion(USER, TOKEN, version) - } - } - } + pushNewProvisioningVersion('test stage') + } + } } } post { @@ -224,54 +194,64 @@ String getElementAccessToken() { } } -Void restartDeployment(namespace, deployment) { - sh "kubectl rollout restart deployment/${deployment} -n ${namespace}" - sh "kubectl rollout status deployment/${deployment} -n ${namespace}" +Void setNewProvisioningVersion(String environment) { + dir("provisioning") { + def envFile = "playbook/inventory/versions/${environment}.yml" + def envVersions = readYaml file: envFile + + envVersions.versions.afm_adapter.image.tag = IMAGE_TAG + envVersions.versions.fs_adapter.image.tag = IMAGE_TAG + + writeYaml file: envFile, data: envVersions, overwrite: true + } } -String getDeployments(namespace) { - return sh (script: "kubectl get deployment -n \$NAMESPACE", returnStdout: true) +Void pushNewProvisioningVersion(String environment) { + withCredentials([usernamePassword(credentialsId: 'jenkins-gitea-access-token', passwordVariable: 'TOKEN', usernameVariable: 'USER')]) { + dir('provisioning') { + sh 'git add playbook/inventory/versions/.' + sh 'git config user.email "jenkins@ozg.de"' + sh 'git config user.name "jenkins"' + sh "git commit -m 'jenkins rollout ${environment} afm-adapter fs-adapter version ${IMAGE_TAG}'" + sh 'git push https://${USER}:${TOKEN}@git.ozg-sh.de/mgm/provisioning.git' + } + } } -Void rolloutDev() { - def namespaces = sh(script: '''kubectl get namespaces -l 'ozg-environment=dev,update-namespace notin (false)' -o custom-columns=NAME:.metadata.name --no-headers''', returnStdout: true) - printl "namespaces: ${namespaces}" +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' - namespaces.each { namespace -> - deployments = getDeployments(namespace) - - if (deployments.contains("fs-adapter")) { - restartDeployment(namespace, "fs-adapter") + // todo remove git checkout + dir('provisioning') { + sh 'git checkout ozg-2502' } + } +} - if (deployments.contains("afm-adapter")) { - restartDeployment(namespace, "afm-adapter") - } +Void tagAndPushDockerImage(String imageName, 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}' - if (deployments.contains("if-adapter")) { - restartDeployment(namespace, "if-adapter") + sh "docker tag docker.ozg-sh.de/${imageName}:build-latest docker.ozg-sh.de/${imageName}:${newTag}" + sh "docker push docker.ozg-sh.de/${imageName}:${newTag}" } } } -Void setNewProvisioningVersion(String environment, String version) { - dir("provisioning") { - def envFile = "playbook/inventory/versions/${environment}.yml" - def envVersions = readYaml file: envFile - - envVersions.versions.afm_adapter.image.tag = version - envVersions.versions.fs_adapter.image.tag = version +String getPomVersion(String pomFile){ + def pom = readMavenPom file: pomFile - writeYaml file: envFile, data: envVersions, overwrite: true - } + return pom.version } -Void pushNewProvisioningVersion(String user, String token, String version) { - dir('provisioning') { - sh 'git add playbook/inventory/versions/.' - sh 'git config user.email "jenkins@ozg.de"' - sh 'git config user.name "jenkins"' - sh "git commit -m 'jenkins rollout afm-adapter fs-adapter test stage version ${version}'" - sh 'git push https://${USER}:${TOKEN}@git.ozg-sh.de/mgm/provisioning.git' +String generateImageTag() { + def imageTag = "${env.BRANCH_NAME}-${getPomVersion('pom.xml')}" + + if (env.BRANCH_NAME == 'master') { + imageTag += "-${env.GIT_COMMIT.take(7)}" } + + return imageTag } \ No newline at end of file