Skip to content
Snippets Groups Projects
Jenkinsfile 9.4 KiB
Newer Older
  • Learn to ignore specific revisions
  • /*
     * Copyright (C) 2023 Das Land Schleswig-Holstein vertreten durch den
     * Ministerpräsidenten des Landes Schleswig-Holstein
     * Staatskanzlei
     * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
     *
     * Lizenziert unter der EUPL, Version 1.2 oder - sobald
     * diese von der Europäischen Kommission genehmigt wurden -
     * Folgeversionen der EUPL ("Lizenz");
     * Sie dürfen dieses Werk ausschließlich gemäß
     * dieser Lizenz nutzen.
     * Eine Kopie der Lizenz finden Sie hier:
     *
     * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
     *
     * Sofern nicht durch anwendbare Rechtsvorschriften
     * gefordert oder in schriftlicher Form vereinbart, wird
     * die unter der Lizenz verbreitete Software "so wie sie
     * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
     * ausdrücklich oder stillschweigend - verbreitet.
     * Die sprachspezifischen Genehmigungen und Beschränkungen
     * unter der Lizenz sind dem Lizenztext zu entnehmen.
     */
    
    @Library('ozgcloud-libs') _
    
    
    OZGCloud's avatar
    OZGCloud committed
    pipeline {
        agent {
           node {
               label 'jenkins-build-agent-jdk-11'
            }
        }
    
        environment {
    
            PIPELINE_NAME = "Code-SH: formcycle-plugin"
    
    OZGCloud's avatar
    OZGCloud committed
            RELEASE_REGEX = /\d+.\d+.\d+/
            SNAPSHOT_REGEX = /\d+.\d+.\d+-SNAPSHOT/
            FAILED_STAGE = ""
            SH_SUCCESS_STATUS_CODE = 0
    
    
            VORGANG_MANAGER_INTERFACE_VERSION="2.0.0"
    
            FORMCYCLE_INTERFACE_VERSION=readFormCycleInterfaceVersion()
    
    OZGCloud's avatar
    OZGCloud committed
        }
    
        options {
            timeout(time: 1, unit: 'HOURS')
            disableConcurrentBuilds()
            buildDiscarder(logRotator(numToKeepStr: '5'))
        }
    
        stages {
    
    
    OZGCloud's avatar
    OZGCloud committed
            stage('clone formcycle-interface (eingang-manager) repo') {
    
    OZGCloud's avatar
    OZGCloud committed
    
                steps {
                    script {
    
    OZGCloud's avatar
    OZGCloud committed
                        cloneEingangAdapterRepo()
                    }
                }
            }
    
            stage('build vorgang-manager-interface for java 11') {
    
                steps {
                    script {
    
                        echo "Using FORMCYCLE Interface Version: ${FORMCYCLE_INTERFACE_VERSION}"
    
    OZGCloud's avatar
    OZGCloud committed
    
    
    OZGCloud's avatar
    OZGCloud committed
                        cloneVorgangManagerRepo()
    
    OZGCloud's avatar
    OZGCloud committed
                    }
                    configFileProvider([configFile(fileId: 'maven-settings', variable: 'MAVEN_SETTINGS')]) {
                        sh 'mvn --version'
    
                        // nur temporär die Java Version in der Pom anpassen, weil die für das Release 2.0.0 fest verdrahtet ist
                        sh 'xmlstarlet ed --pf -L -N w="http://maven.apache.org/POM/4.0.0" -u "//w:project/w:properties/w:maven.compiler.source" -v 11 vorgang-manager/vorgang-manager-interface/pom.xml'
                        sh 'xmlstarlet ed --pf -L -N w="http://maven.apache.org/POM/4.0.0" -u "//w:project/w:properties/w:maven.compiler.target" -v 11 vorgang-manager/vorgang-manager-interface/pom.xml'
    
    
    OZGCloud's avatar
    OZGCloud committed
                        sh 'mvn -f vorgang-manager/vorgang-manager-interface -s $MAVEN_SETTINGS --no-transfer-progress -Djava.version=11 install'
    
    OZGCloud's avatar
    OZGCloud committed
                    }
                }
            }
    
            stage('build formcycle-interface for java 11') {
    
                steps {
                    configFileProvider([configFile(fileId: 'maven-settings', variable: 'MAVEN_SETTINGS')]) {
                        sh 'mvn --version'
    
                        sh 'mvn --no-transfer-progress -f eingang-manager/formcycle-adapter/formcycle-adapter-interface -s $MAVEN_SETTINGS -Djava.version=11 install'
    
    OZGCloud's avatar
    OZGCloud committed
                    }
                }
            }
    
    
            stage('Set Version') {
    
              when {
                not {
                    anyOf {
    
                        branch 'main'
    
                        branch 'release'
                    }
                }
              }
              steps {
                    script {
                        FAILED_STAGE=env.STAGE_NAME
    
                        JAR_TAG = getPomVersion('pom.xml').replace("SNAPSHOT", "${env.BRANCH_NAME}-SNAPSHOT")
    
                    }
                    configFileProvider([configFile(fileId: 'maven-settings', variable: 'MAVEN_SETTINGS')]) {
                        sh "mvn -s $MAVEN_SETTINGS versions:set -DnewVersion=${JAR_TAG} -DprocessAllModules=true"
                        
                    }
              }
            }
    
    OZGCloud's avatar
    OZGCloud committed
            stage('Maven Build') {
                steps {
                    script {
                        FAILED_STAGE=env.STAGE_NAME
                    }
                    configFileProvider([configFile(fileId: 'maven-settings', variable: 'MAVEN_SETTINGS')]) {
                        sh 'mvn --version'
    
                        sh 'mvn --no-transfer-progress -s $MAVEN_SETTINGS -P ci-build clean install -Dmaven.wagon.http.retryHandler.count=3'
    
    OZGCloud's avatar
    OZGCloud committed
                            
                        script {
    
    	                    if (isMainBranch()) {
    
    		                    withSonarQubeEnv('sonarqube-ozg-sh'){
    		        				sh 'mvn -s $MAVEN_SETTINGS sonar:sonar'
    
    OZGCloud's avatar
    OZGCloud committed
    		                    }
    
    OZGCloud's avatar
    OZGCloud committed
                        }
                    }
                }
                post {
                    always{
                        junit testResults: '**/target/surefire-reports/*.xml', skipPublishingChecks: true
                    }
                }
            }
    
    
    OZGCloud's avatar
    OZGCloud committed
            stage ('Deploy SBOM to DependencyTrack') {
                steps {
                    script {
    
    OZGCloud's avatar
    OZGCloud committed
                        IMAGE_TAG = "${env.BRANCH_NAME}-${getPomVersion('pom.xml')}"
    
    OZGCloud's avatar
    OZGCloud committed
    
                        configFileProvider([configFile(fileId: 'maven-settings', variable: 'MAVEN_SETTINGS')]) {
                            withCredentials([string(credentialsId: 'dependency-track-api-key', variable: 'API_KEY')]) {
    
                                catchError(buildResult: 'UNSTABLE', stageResult: 'FAILURE') {
                                    sh "mvn  --no-transfer-progress -s $MAVEN_SETTINGS io.github.pmckeown:dependency-track-maven-plugin:upload-bom -Ddependency-track.apiKey=$API_KEY -Ddependency-track.projectVersion=${IMAGE_TAG} -Ddependency-track.dependencyTrackBaseUrl=https://dependency-track.ozg-sh.de"
                                }
                            }
                        }
                    }
                }
            }
    
    OZGCloud's avatar
    OZGCloud committed
    
    
    OZGCloud's avatar
    OZGCloud committed
            stage('Deploy to Nexus'){
                steps {
                    script {
                        FAILED_STAGE = env.STAGE_NAME
                    }
                    configFileProvider([configFile(fileId: 'maven-settings', variable: 'MAVEN_SETTINGS')]) {
    
                        sh 'mvn --no-transfer-progress -s $MAVEN_SETTINGS -DskipTests deploy -Dmaven.wagon.http.retryHandler.count=3'
    
                         sh "mvn -s $MAVEN_SETTINGS versions:revert"
    
    OZGCloud's avatar
    OZGCloud committed
    //		   Es sollte erstmal auskommentiert bleiben. Es kann man später als Beispiel für Deployment in Xima Cloud
    // 		   verwendet werden
    
    //         stage('Deploy FormCycle Plugin to FC-server') {
    //             when {
    //                 anyOf {
    
    //                     branch 'main'
    
    //                 }
    //             }
    //
    //             steps {
    //                 script {
    //                     FAILED_STAGE=env.STAGE_NAME
    //                 }
    //                 configFileProvider([configFile(fileId: 'maven-settings', variable: 'MAVEN_SETTINGS')]) {
    //
    //                         sh 'mvn --version'
    //                         sh 'mvn --no-transfer-progress -s $MAVEN_SETTINGS -P ci-build fc-deploy:deploy -DfcDeployUrl="https://formcycle.dev.ozg-sh.de/formcycle" -DfcDeployClientId="2" -DfcDeployToken=adminhase23 -DskipTests=true -Dmaven.wagon.http.retryHandler.count=3'
    //                 }
    //             }
    //             post {
    //                 always{
    //                     junit testResults: '**/target/surefire-reports/*.xml', skipPublishingChecks: true
    //                 }
    //             }
    //         }
    
    OZGCloud's avatar
    OZGCloud committed
        }
    
        post {
            failure {
                script {
                    sendMatrixMessage.sendFailureMessage(FAILED_STAGE)
                }
            }
        }
    
    OZGCloud's avatar
    OZGCloud committed
    }
    
    
    OZGCloud's avatar
    OZGCloud committed
    Void cloneVorgangManagerRepo() {
    
    OZGCloud's avatar
    OZGCloud committed
        withCredentials([usernamePassword(credentialsId: 'jenkins-gitea-access-token', passwordVariable: 'TOKEN', usernameVariable: 'USER')]) {
            
    
    OZGCloud's avatar
    OZGCloud committed
                sh 'git clone https://${USER}:${TOKEN}@git.ozg-sh.de/ozgcloud-app/vorgang-manager.git'
    
    OZGCloud's avatar
    OZGCloud committed
            
        }
    
    OZGCloud's avatar
    OZGCloud committed
        dir("vorgang-manager") {
    
            if ( !isSnapshotVersion([VORGANG_MANAGER_INTERFACE_VERSION]) ) {
                sh 'git checkout tags/${VORGANG_MANAGER_INTERFACE_VERSION} -b branch'
            }
    
    OZGCloud's avatar
    OZGCloud committed
        }
    
    OZGCloud's avatar
    OZGCloud committed
        configureGit("vorgang-manager")
    
    OZGCloud's avatar
    OZGCloud committed
    }
    
    
    OZGCloud's avatar
    OZGCloud committed
    Void cloneEingangAdapterRepo() {
    
    OZGCloud's avatar
    OZGCloud committed
        withCredentials([usernamePassword(credentialsId: 'jenkins-gitea-access-token', passwordVariable: 'TOKEN', usernameVariable: 'USER')]) {
            
    
                sh 'git clone https://${USER}:${TOKEN}@git.ozg-sh.de/ozgcloud-app/eingang-manager.git'
    
    OZGCloud's avatar
    OZGCloud committed
            
        }
    
            if ( !isSnapshotVersion([FORMCYCLE_INTERFACE_VERSION]) ) {
                sh 'git checkout tags/${FORMCYCLE_INTERFACE_VERSION} -b branch'
            }
    
        configureGit("eingang-manager")
    
    OZGCloud's avatar
    OZGCloud committed
    }
    
    Void configureGit(String directory) {
        final email = "jenkins@ozg-sh.de"
        final name = "jenkins"
    
        dir(directory) {
            sh "git config user.email '${email}'"
            sh "git config user.name '${name}'"
        }
    }
    
    OZGCloud's avatar
    OZGCloud committed
    
    String readFormCycleInterfaceVersion() {
    
        return sh(returnStdout: true, script: 'xmlstarlet sel -N w="http://maven.apache.org/POM/4.0.0" -t -v "//w:project/w:properties/w:formcycle-adapter-interface.version" -n pom.xml').trim()
    
    OZGCloud's avatar
    OZGCloud committed
    }
    
    
    Boolean isSnapshotVersion(List versions) {
        return matchRegexVersion(versions, SNAPSHOT_REGEX)
    }
    
    Boolean matchRegexVersion(List versions, String regex) {
        for (version in versions) {
            if ( !(version ==~ regex) ) {
                return false
            }
        }
    
        return true
    
    }
    String getPomVersion(String pomFile){
        def pom = readMavenPom file: pomFile
    
        return pom.version
    
    }
    
    Boolean isMainBranch() {
        return env.BRANCH_NAME == 'main'