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