diff --git a/Jenkinsfile b/Jenkinsfile index 5c98f9e156de8cbb3a48541a70aef7b786f69448..6b8510a79431753fe9c46cefc39df0c4212bd8a1 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,18 +1,18 @@ pipeline { agent { node { - label 'jenkins-worker' + label 'jenkins-quarkus-build-agent' } } environment { - BLUE_OCEAN_URL = "https://jenkins.ozg-sh.de/blue/organizations/jenkins/user-manager/detail/${env.BRANCH_NAME}/${env.BUILD_NUMBER}/pipeline" + BLUE_OCEAN_URL = "https://jenkins.ozg-sh.de/job/user-manager/job/${env.BRANCH_NAME}/${env.BUILD_NUMBER}/" RELEASE_REGEX = /\d+.\d+.\d+/ SNAPSHOT_REGEX = /\d+.\d+.\d+-SNAPSHOT/ FAILED_STAGE = "" //The container runtime (e.g. docker) that is used to do an image based build. If this is set then a container build is always done. - QUARKUS_NATIVE_CONTAINER_RUNTIME = "podman" + QUARKUS_NATIVE_CONTAINER_RUNTIME = "docker" QUARKUS_CONTAINER_IMAGE_NAME = "user-manager" QUARKUS_CONTAINER_IMAGE_TAG = "build-latest" } @@ -28,14 +28,9 @@ pipeline { steps { script { FAILED_STAGE = env.STAGE_NAME - def rootPom = readMavenPom file: 'pom.xml' - def rootVersion = rootPom.version - - def userManagerPom = readMavenPom file: 'user-manager-server/pom.xml' - def userManagerVersion = userManagerPom.version - - def interfacePom = readMavenPom file: 'user-manager-interface/pom.xml' - def interfaceVersion = interfacePom.version + def rootVersion = getPomVersion('pom.xml') + def userManagerVersion = getPomVersion('user-manager-server/pom.xml') + def interfaceVersion = getPomVersion('user-manager-interface/pom.xml') if(env.BRANCH_NAME == 'release'){ if ( !(rootVersion ==~ RELEASE_REGEX) || !(userManagerVersion ==~ RELEASE_REGEX) || !(interfaceVersion ==~ RELEASE_REGEX)) { @@ -59,64 +54,56 @@ pipeline { script { FAILED_STAGE=env.STAGE_NAME } - container("maven-17"){ - configFileProvider([configFile(fileId: 'maven-settings', variable: 'MAVEN_SETTINGS')]) { - sh 'mvn -pl user-manager-interface -s $MAVEN_SETTINGS clean deploy -Dmaven.wagon.http.retryHandler.count=3' - } + + configFileProvider([configFile(fileId: 'maven-settings', variable: 'MAVEN_SETTINGS')]) { + sh './mvnw -pl user-manager-interface -s $MAVEN_SETTINGS clean deploy -Dmaven.wagon.http.retryHandler.count=3' } } } - + stage('Build UserManager') { steps { script { FAILED_STAGE=env.STAGE_NAME - } - container("quarkus-22"){ + configFileProvider([configFile(fileId: 'maven-settings', variable: 'MAVEN_SETTINGS')]) { - sh './mvnw -pl user-manager-server -s $MAVEN_SETTINGS clean deploy -Dmaven.wagon.http.retryHandler.count=3' - - junit testResults: '**/target/surefire-reports/*.xml', skipPublishingChecks: true - } - } + sh './mvnw -pl user-manager-server -s $MAVEN_SETTINGS clean deploy -Dmaven.wagon.http.retryHandler.count=3' + junit testResults: '**/target/surefire-reports/*.xml', skipPublishingChecks: true + } + } } } - + stage('Build native container image') { steps { script { FAILED_STAGE=env.STAGE_NAME - - container("quarkus-22"){ - withCredentials([usernamePassword(credentialsId: 'jenkins-docker-login', usernameVariable: 'USER', passwordVariable: 'PASSWORD')]) { - configFileProvider([configFile(fileId: 'maven-settings', variable: 'MAVEN_SETTINGS')]) { - sh './mvnw -pl user-manager-server -s $MAVEN_SETTINGS clean verify -Pnative -Dquarkus.container-image.registry=docker.ozg-sh.de -Dquarkus.container-image.username=${USER} -Dquarkus.container-image.password=${PASSWORD} -Dquarkus.container-image.push=true -Dquarkus.container-image.build=true -Dmaven.wagon.http.retryHandler.count=3' - } + + withCredentials([usernamePassword(credentialsId: 'jenkins-nexus-login', usernameVariable: 'USER', passwordVariable: 'PASSWORD')]) { + configFileProvider([configFile(fileId: 'maven-settings', variable: 'MAVEN_SETTINGS')]) { + sh './mvnw -pl user-manager-server -s $MAVEN_SETTINGS clean verify -Pnative -Dquarkus.container-image.registry=docker.ozg-sh.de -Dquarkus.container-image.username=${USER} -Dquarkus.container-image.password=${PASSWORD} -Dquarkus.container-image.push=true -Dquarkus.container-image.build=true -Dquarkus.native.remote-container-build=true -Dmaven.wagon.http.retryHandler.count=3' } - } - } + } + } } } - + stage('Sonar Checks') { + when { + branch 'master' + } steps { - script { + script { FAILED_STAGE=env.STAGE_NAME - } - container("maven-17") { - configFileProvider([configFile(fileId: 'maven-settings', variable: 'MAVEN_SETTINGS')]) { - dir('user-manager-server') { - script { - try { - if (env.BRANCH_NAME == 'master') { - withSonarQubeEnv('sonarqube-ozg-sh'){ - def workspace = WORKSPACE - sh "mvn -s $MAVEN_SETTINGS test sonar:sonar -Dsonar.coverage.jacoco.xmlReportPaths=${env.WORKSPACE}/user-manager-server/target/jacoco-report/jacoco.xml" - } - } - } catch (Exception e) { - unstable("SonarQube failed") - } + + configFileProvider([configFile(fileId: 'maven-settings', variable: 'MAVEN_SETTINGS')]) { + dir('user-manager-server') { + try { + withSonarQubeEnv('sonarqube-ozg-sh'){ + sh "./mvnw -s $MAVEN_SETTINGS test sonar:sonar -Dsonar.coverage.jacoco.xmlReportPaths=${env.WORKSPACE}/user-manager-server/target/jacoco-report/jacoco.xml" + } + } catch (Exception e) { + unstable("SonarQube failed") } } } @@ -144,20 +131,18 @@ pipeline { stage('Test, build and deploy Helm Chart') { steps { - container('k8s') { - script { - FAILED_STAGE=env.STAGE_NAME - HELM_CHART_VERSION = generateHelmChartVersion() + script { + FAILED_STAGE=env.STAGE_NAME + HELM_CHART_VERSION = generateHelmChartVersion() - dir('src/main/helm') { - sh "helm lint -f test-values.yaml" + dir('src/main/helm') { + sh "helm lint -f test-values.yaml" - sh "helm unittest -f '../../test/helm/*.yaml' -v '../../test/unit-values.yaml' ." + sh "helm unittest -f '../../test/helm/*.yaml' -v '../../test/unit-values.yaml' ." - sh "helm package --version=${HELM_CHART_VERSION} ." + sh "helm package --version=${HELM_CHART_VERSION} ." - deployHelmChart(HELM_CHART_VERSION) - } + deployHelmChart(HELM_CHART_VERSION) } } } @@ -214,10 +199,10 @@ pipeline { Void deployHelmChart(String helmChartVersion) { withCredentials([usernamePassword(credentialsId: 'jenkins-nexus-login', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]){ if (env.BRANCH_NAME == 'release') { - result = sh script: '''curl -u $USERNAME:$PASSWORD http://nexus.dev-tools:8081/service/rest/v1/components?repository=ozg-base-apps -F file=@user-manager-'''+helmChartVersion+'''.tgz''', returnStdout: true + result = sh script: '''curl -u $USERNAME:$PASSWORD https://nexus.ozg-sh.de/service/rest/v1/components?repository=ozg-base-apps -F file=@user-manager-'''+helmChartVersion+'''.tgz''', returnStdout: true } else { - result = sh script: '''curl -u $USERNAME:$PASSWORD http://nexus.dev-tools:8081/service/rest/v1/components?repository=ozg-base-apps-snapshot -F file=@user-manager-'''+helmChartVersion+'''.tgz''', returnStdout: true + result = sh script: '''curl -u $USERNAME:$PASSWORD https://nexus.ozg-sh.de/service/rest/v1/components?repository=ozg-base-apps-snapshot -F file=@user-manager-'''+helmChartVersion+'''.tgz''', returnStdout: true } if (result != '') { @@ -325,13 +310,11 @@ String generateImageTag() { } 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" + withCredentials([usernamePassword(credentialsId: 'jenkins-nexus-login', usernameVariable: 'USER', passwordVariable: 'PASSWORD')]) { + sh 'docker login docker.ozg-sh.de -u ${USER} -p ${PASSWORD}' + sh "docker 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}" - } + sh "docker tag docker.ozg-sh.de/root/user-manager:build-latest docker.ozg-sh.de/user-manager:${newTag}" + sh "docker push docker.ozg-sh.de/user-manager:${newTag}" } } \ No newline at end of file