From 7f61144c216c2aad3a632baf875df87cb148a3d7 Mon Sep 17 00:00:00 2001
From: OZGCloud <ozgcloud@mgm-tp.com>
Date: Mon, 11 Dec 2023 16:30:53 +0100
Subject: [PATCH] OZG-4453 OZG-4670 adjust JenkinsFile

---
 Jenkinsfile | 220 ++++++++++++++++++++++++++--------------------------
 1 file changed, 112 insertions(+), 108 deletions(-)

diff --git a/Jenkinsfile b/Jenkinsfile
index 8e94fdc..4ab729f 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -6,17 +6,19 @@ pipeline {
     }
 
     environment {
-        BLUE_OCEAN_URL = "https://jenkins.infra.ozg-cloud.systems/job/ozgcloud-keycloak-operator/job/${env.BRANCH_NAME}/${env.BUILD_NUMBER}/"
         RELEASE_REGEX = /\d+.\d+.\d+/
         SNAPSHOT_REGEX = /\d+.\d+.\d+-SNAPSHOT/
         FAILED_STAGE = ""
         SH_SUCCESS_STATUS_CODE = 0
+
+        KEYCLOAK_OPERATOR_NAME = 'ozgcloud-keycloak-operator'
+        ELASTIC_OPERATOR_NAME = 'ozgcloud-elastic-operator'
     }
 
     options {
         timeout(time: 1, unit: 'HOURS')
         disableConcurrentBuilds()
-        buildDiscarder(logRotator(numToKeepStr: '5'))
+        buildDiscarder(logRotator(numToKeepStr: '10'))
     }
 
     stages {
@@ -27,8 +29,7 @@ pipeline {
                     def rootPom = readMavenPom file: 'pom.xml'
                     def rootVersion = rootPom.version
 
-
-                    if(env.BRANCH_NAME == 'release'){
+                    if(isReleaseBranch()){
                         if ( !isReleaseVersion([rootVersion])) {
                             error("Keine Release Version für Branch ${env.BRANCH_NAME}.")
                         }
@@ -40,7 +41,7 @@ pipeline {
                 }
             }
         }
-        stage('Build OzgCloud Keycloak Operator') {
+        stage('Build OzgCloud Operator') {
             steps {
                 script {
                     FAILED_STAGE=env.STAGE_NAME
@@ -93,25 +94,27 @@ pipeline {
                 }
 
                 configFileProvider([configFile(fileId: 'maven-settings', variable: 'MAVEN_SETTINGS')]) {
-                        sh 'mvn -s $MAVEN_SETTINGS spring-boot:build-image -DskipTests -Dmaven.wagon.http.retryHandler.count=3'
+                    sh 'mvn -s $MAVEN_SETTINGS spring-boot:build-image -DskipTests -Dmaven.wagon.http.retryHandler.count=3'
                 }
-           }
+            }
         }
 
-
         stage('Tag and Push Docker image') {
             steps {
                 script {
                     FAILED_STAGE=env.STAGE_NAME
                     IMAGE_TAG = generateImageTag()
 
-                    tagAndPushDockerImage('ozgcloud-keycloak-operator', IMAGE_TAG)
+                    tagAndPushDockerImage(KEYCLOAK_OPERATOR_NAME, IMAGE_TAG)
+                    tagAndPushDockerImage(ELASTIC_OPERATOR_NAME, IMAGE_TAG)
                 
-                    if (env.BRANCH_NAME == 'master') {
-                        tagAndPushDockerImage('ozgcloud-keycloak-operator', 'snapshot-latest')
+                    if (isMasterBranch()) {
+                        tagAndPushDockerImage(KEYCLOAK_OPERATOR_NAME, 'snapshot-latest')
+                        tagAndPushDockerImage(ELASTIC_OPERATOR_NAME, 'snapshot-latest')
                     }
-                    else if (env.BRANCH_NAME == 'release') {
-                        tagAndPushDockerImage('ozgcloud-keycloak-operator', 'latest')
+                    else if (isReleaseBranch()) {
+                        tagAndPushDockerImage(KEYCLOAK_OPERATOR_NAME, 'latest')
+                        tagAndPushDockerImage(ELASTIC_OPERATOR_NAME, 'latest')
                     }
                 }
             }
@@ -123,15 +126,18 @@ pipeline {
                     FAILED_STAGE=env.STAGE_NAME
                     HELM_CHART_VERSION = generateHelmChartVersion()
 
-                    dir('ozgcloud-keycloak-operator/src/main/helm') {
-                        sh "helm lint -f ../../test/helm/linter_values.yaml"
-
-                        sh "helm unittest --helm3 -f '../../test/helm/*.yaml' -f '../../test/helm/*/*.yaml' ."
-
-                        sh "helm package --version=${HELM_CHART_VERSION} ."
+                    testAndDeployKeycloakHelmChart(HELM_CHART_VERSION)
+                }
+            }
+        }
+        
+        stage('Test, build and deploy Elastic-Operator Helm Chart') {
+            steps {
+                script {
+                    FAILED_STAGE=env.STAGE_NAME
+                    HELM_CHART_VERSION = generateHelmChartVersion()
 
-                        deployHelmChart("ozgcloud-keycloak-operator", HELM_CHART_VERSION)
-                    }
+                    testAndDeployElasticHelmChart(HELM_CHART_VERSION)
                 }
             }
         }
@@ -144,11 +150,7 @@ pipeline {
                 script {
                     FAILED_STAGE = env.STAGE_NAME
 
-                    cloneGitopsRepo()
-
-                    setNewDevVersion()
-
-                    pushNewDevVersion()
+                    doDevRollout()
                 }
             }
         }
@@ -161,68 +163,57 @@ pipeline {
                 script {
                     FAILED_STAGE = env.STAGE_NAME
 
-                    cloneGitopsRepo()
-
-                    setNewTestVersion()
-
-                    pushNewTestVersion()
+                    doTestRollout()
                 }
             }
         }
 
         stage ('OWASP Dependency-Check Vulnerabilities') {
             steps {
-                    dependencyCheck additionalArguments: ''' 
-                        -o "./" 
-                        -s "./"
-                        -f "ALL" 
-                        -d /dependency-check-data
-                        --suppression dependency-check-supressions.xml
-                        --disableKnownExploited
-                        --noupdate
-                        --disableArchive
-                        --prettyPrint''', odcInstallation: 'dependency-check-owasp'
-
-                    dependencyCheckPublisher( 
-                        pattern: 'dependency-check-report.xml' ,
-                        //unstableNewCritical: 999,
-                        //unstableNewHigh: 999,
-                        //unstableNewMedium: 999,
-                        //unstableNewLow: 999,
-                        //unstableTotalCritical: 999,
-                        //unstableTotalHigh: 999,
-                        //unstableTotalMedium: 999,
-                        //unstableTotalLow: 999,
-                        //failedNewCritical: 999,
-                        //failedNewHigh: 999,
-                        //failedNewMedium: 999,
-                        //failedNewLow: 999,
-                        //failedTotalCritical: 999,
-                        //failedTotalHigh: 999,
-                        //failedTotalMedium: 999,
-                        //failedTotalLow: 999
-                    )            }
-        }
-    }
-    post {
-        failure {
-            script {
-                if (env.BRANCH_NAME == 'master' || env.BRANCH_NAME == 'release') {
-                    //sendFailureMessage()
-                }
+                dependencyCheck additionalArguments: ''' 
+                    -o "./" 
+                    -s "./"
+                    -f "ALL" 
+                    -d /dependency-check-data
+                    --suppression dependency-check-supressions.xml
+                    --disableKnownExploited
+                    --noupdate
+                    --disableArchive
+                    --prettyPrint''', odcInstallation: 'dependency-check-owasp'
+
+                dependencyCheckPublisher( 
+                    pattern: 'dependency-check-report.xml'
+                )           
             }
         }
     }
 }
 
+
+Void testAndDeployKeycloakHelmChart(String helmChartVersion){  
+    dir("${KEYCLOAK_OPERATOR_NAME}/src/main/helm") {
+        runHelmTests()
+        deployHelmChart(KEYCLOAK_OPERATOR_NAME, helmChartVersion)
+    }
+}
+
+Void testAndDeployElasticHelmChart(String helmChartVersion){  
+    dir("${ELASTIC_OPERATOR_NAME}/src/main/helm") {
+        //TBD
+        //runHelmTests()
+        //deployHelmChart(ELASTIC_OPERATOR_NAME, helmChartVersion)
+    }
+}
+
+Void runHelmTests(){
+    sh 'helm lint -f ../../test/helm/linter_values.yaml'
+    sh "helm unittest --helm3 -f '../../test/helm/*.yaml' -f '../../test/helm/*/*.yaml' ."
+    sh "helm package --version=${HELM_CHART_VERSION} ."
+}
+
 Void deployHelmChart(String helmChartName, String helmChartVersion) {       
     withCredentials([usernamePassword(credentialsId: 'jenkins-nexus-login', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]){
-        if (env.BRANCH_NAME == 'release') {
-            result = sh script: '''curl -u $USERNAME:$PASSWORD https://nexus.ozg-sh.de/service/rest/v1/components?repository=ozg-base-apps -F file=@'''+helmChartName+'''-'''+helmChartVersion+'''.tgz''', returnStdout: true
-        }
-        else {
-            result = sh script: '''curl -u $USERNAME:$PASSWORD https://nexus.ozg-sh.de/service/rest/v1/components?repository=ozg-base-apps-snapshot -F file=@'''+helmChartName+'''-'''+helmChartVersion+'''.tgz''', returnStdout: true
-        }
+        result = sh script: '''curl -u $USERNAME:$PASSWORD''' + getHelmRepoUrl() + ''' -F file=@'''+helmChartName+'''-'''+helmChartVersion+'''.tgz''', returnStdout: true
 
         if (result != '') {
             error(result)
@@ -230,34 +221,32 @@ Void deployHelmChart(String helmChartName, String helmChartVersion) {
     }
 }
 
+String getHelmRepoUrl(){
+    if (isReleaseBranch()) {
+        return "https://nexus.ozg-sh.de/service/rest/v1/components?repository=ozg-base-apps"
+    }
+    return "https://nexus.ozg-sh.de/service/rest/v1/components?repository=ozg-base-apps-snapshot"
+}
+
 String generateHelmChartVersion() {
     def chartVersion = getPomVersion('pom.xml')
 
-    if (env.BRANCH_NAME == 'master') {
+    if (isMasterBranch()) {
         chartVersion += "-${env.GIT_COMMIT.take(7)}"
     }
-    else if (env.BRANCH_NAME != 'release') {
+    else if (!isReleaseBranch()) {
         chartVersion += "-${env.BRANCH_NAME}"
     }
 
-    return chartVersion.replaceAll("_", "-")
+    return chartVersion.replaceAll('_', '-')
 }
 
-Void sendFailureMessage() {
-    def room = ''
-    def data = """{"msgtype":"m.text", \
-                    "body":"OzgCloud-Keycloak-Operator: Build Failed. Stage: ${FAILED_STAGE} Build-ID: ${env.BUILD_NUMBER} Link: ${BLUE_OCEAN_URL}", \
-                    "format": "org.matrix.custom.html", \
-                    "formatted_body":"OzgCloud-Keycloak-Operator: Build Failed. Stage: ${FAILED_STAGE} Build-ID: <a href='${BLUE_OCEAN_URL}'>${env.BUILD_NUMBER}</a>"}"""
-       
-    if (env.BRANCH_NAME == 'master') {
-        room = "!iQPAvQIiRwRpNOszjw:matrix.ozg-sh.de"
-    }
-    else if (env.BRANCH_NAME == 'release') {
-        room = "!oWZpUGTFsxkJIYNfYg:matrix.ozg-sh.de"
-    }
+Boolean isMasterBranch() {
+    return env.BRANCH_NAME == 'master'
+}
 
-    sh "curl -XPOST -H 'authorization: Bearer ${getElementAccessToken()}' -d '${data}' https://matrix.ozg-sh.de/_matrix/client/v3/rooms/$room/send/m.room.message"
+Boolean isReleaseBranch() {
+    return env.BRANCH_NAME == 'release'
 }
 
 String getElementAccessToken() {
@@ -266,32 +255,47 @@ String getElementAccessToken() {
     }
 }
 
-Void setNewDevVersion() {
-    setNewOzgOperatorVersion('dev')
+Void doDevRollout() {
+    cloneGitopsRepo()
+    setNewOperatorVersion('dev')
+    pushNewGitopsVersion('dev')
 }
 
-Void setNewTestVersion() {
-    setNewOzgOperatorVersion('test')
+Void doTestRollout() {
+    cloneGitopsRepo()
+    setNewOperatorVersion('test')
+    pushNewGitopsVersion('test')
 }
 
-Void setNewOzgOperatorVersion(String environment) {
-    dir("gitops") {
-        def envFile = "${environment}/application/values/ozgcloud-keycloak-operator-values.yaml"
-        def envVersions = readYaml file: envFile
+Void setNewOperatorVersion(String environment) {
+    dir('gitops') {
+        updateKeycloakOperatorVersions()
+        updateElasticOperatorVersions()
+    }
+}
 
-        envVersions.ozgcloud_keycloak_operator.image.tag = IMAGE_TAG
-        envVersions.ozgcloud_keycloak_operator.helm.version = HELM_CHART_VERSION
+Void updateKeycloakOperatorVersions(String environment){
+    def valuesFile = getApplicationValues(environment, KEYCLOAK_OPERATOR_NAME)
+    def envVersions = readYaml file: envFile
 
-        writeYaml file: envFile, data: envVersions, overwrite: true
-    }
+    envVersions.ozgcloud_keycloak_operator.image.tag = IMAGE_TAG
+    envVersions.ozgcloud_keycloak_operator.helm.version = HELM_CHART_VERSION
+
+    writeYaml file: envFile, data: envVersions, overwrite: true
 }
 
-Void pushNewDevVersion() {
-    pushNewGitopsVersion('dev')
+Void updateElasticOperatorVersions(String environment){
+    def valuesFile = getApplicationValues(environment, ELASTIC_OPERATOR_NAME)
+    def envVersions = readYaml file: envFile
+
+    envVersions.ozgcloud_elastic_operator.image.tag = IMAGE_TAG
+    envVersions.ozgcloud_elastic_operator.helm.version = HELM_CHART_VERSION
+
+    writeYaml file: envFile, data: envVersions, overwrite: true
 }
 
-Void pushNewTestVersion() {
-    pushNewGitopsVersion('test')
+String getApplicationValues(String environment, String valuesFileName) {
+    return "${environment}/application/values/${valuesFileName}-values.yaml"
 }
 
 Void pushNewGitopsVersion(String environment) {
-- 
GitLab