From 038282de6aaf0d40314bc3e229eb7fbd94793ae7 Mon Sep 17 00:00:00 2001 From: OZGCloud <ozgcloud@mgm-tp.com> Date: Wed, 12 Oct 2022 10:21:42 +0200 Subject: [PATCH] ozg-2502 append git hash after master docker tag --- Jenkinsfile | 146 ++++++++++++++++++++++++---------------------------- 1 file changed, 68 insertions(+), 78 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index c3da1a0c..7034cb5d 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -87,11 +87,6 @@ pipeline { script { FAILED_STAGE=env.STAGE_NAME - def pom = readMavenPom file: 'pom.xml' - def version = pom.version - - BRANCH_AND_VERSION = "${env.BRANCH_NAME}-${version}" - container("quarkus-22"){ withCredentials([usernamePassword(credentialsId: 'jenkins-docker-login', usernameVariable: 'USER', passwordVariable: 'PASSWORD')]) { configFileProvider([configFile(fileId: 'maven-settings', variable: 'MAVEN_SETTINGS')]) { @@ -128,34 +123,19 @@ 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 - - BRANCH_AND_VERSION = "${env.BRANCH_NAME}-${version}" - - container("quarkus-22") { - withCredentials([usernamePassword(credentialsId: 'jenkins-docker-login', usernameVariable: 'USER', passwordVariable: 'PASSWORD')]) { - sh 'podman login docker.ozg-sh.de -u ${USER} -p ${PASSWORD}' - sh 'podman pull docker.ozg-sh.de/root/user-manager:build-latest' - - echo "Version: ${BRANCH_AND_VERSION}"; - sh "podman tag docker.ozg-sh.de/root/user-manager:build-latest docker.ozg-sh.de/user-manager:${BRANCH_AND_VERSION}" - sh "podman push docker.ozg-sh.de/user-manager:${BRANCH_AND_VERSION}" - - if (env.BRANCH_NAME == 'master') { - sh 'podman tag docker.ozg-sh.de/root/user-manager:build-latest docker.ozg-sh.de/user-manager:snapshot-latest' - sh 'podman push docker.ozg-sh.de/user-manager:snapshot-latest' - } - - if (env.BRANCH_NAME == 'release') { - sh 'podman tag docker.ozg-sh.de/root/user-manager:build-latest docker.ozg-sh.de/user-manager:latest' - sh 'podman push docker.ozg-sh.de/user-manager:latest' - } - } + FAILED_STAGE = env.STAGE_NAME + IMAGE_TAG = generateImageTag() + + tagAndPushDockerImage(IMAGE_TAG) + + if (env.BRANCH_NAME == 'master') { + tagAndPushDockerImage('snapshot-latest') + } + else if (env.BRANCH_NAME == 'release') { + tagAndPushDockerImage('latest') } } } @@ -168,53 +148,31 @@ pipeline { steps { script { FAILED_STAGE = env.STAGE_NAME - initK8s() - - container("k8s"){ - sh """ - error=0 - for NAMESPACE in \$(kubectl get namespaces -l 'ozg-environment=dev,update-namespace notin (false)' -o custom-columns=NAME:.metadata.name --no-headers); \ - do \ - if kubectl get deployment -n \$NAMESPACE | grep user-manager; then \ - kubectl rollout restart deployment/user-manager -n \$NAMESPACE; \ - if ! kubectl rollout status deployment/user-manager -n \$NAMESPACE; then \ - error=1; \ - fi; \ - fi; \ - done - exit \$error - """ - } + + 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' + checkoutProvisioningRepo() - // todo remove - dir('provisioning') { - sh 'git checkout ozg-2502' - } - - setNewProvisioningVersion('test', version) - setNewProvisioningVersion('stage', version) + setNewProvisioningVersion('test') + setNewProvisioningVersion('stage') - pushNewProvisioningVersion(USER, TOKEN, version) - } + pushNewProvisioningVersion('test stage') } } } @@ -254,32 +212,64 @@ String getElementAccessToken() { } } -Void setNewProvisioningVersion(String environment, String version) { +Void setNewProvisioningVersion(String environment) { dir("provisioning") { def envFile = "playbook/inventory/versions/${environment}.yml" def envVersions = readYaml file: envFile - envVersions.versions.user_manager.image.tag = version + envVersions.versions.user_manager.image.tag = IMAGE_TAG writeYaml file: envFile, data: envVersions, overwrite: true } } -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 user-manager test stage version ${version}'" - sh 'git push https://${USER}:${TOKEN}@git.ozg-sh.de/mgm/provisioning.git' +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' + + // todo remove git checkout + dir('provisioning') { + sh 'git checkout ozg-2502' + } + } +} + +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} user-manager version ${IMAGE_TAG}'" + sh 'git push https://${USER}:${TOKEN}@git.ozg-sh.de/mgm/provisioning.git' + } } } -Void initK8s(){ - container("k8s") { - configFileProvider([configFile(fileId: 'jenkins-kuby-kubeconfig', variable: 'KUBE_CONFIG')]) { - sh 'mkdir ~/.kube' - sh 'cp ${KUBE_CONFIG} ~/.kube/config' +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 tagAndPushDockerImage(String newTag) { + container("quarkus-22") { + withCredentials([usernamePassword(credentialsId: 'jenkins-docker-login', usernameVariable: 'USER', passwordVariable: 'PASSWORD')]) { + sh 'podman login docker.ozg-sh.de -u ${USER} -p ${PASSWORD}' + sh "podman pull docker.ozg-sh.de/root/user-manager:build-latest" + + sh "podman tag docker.ozg-sh.de/root/user-manager:build-latest docker.ozg-sh.de/user-manager:${newTag}" + sh "podman push docker.ozg-sh.de/user-manager:${newTag}" } } } \ No newline at end of file -- GitLab