Select Git revision
Jenkinsfile
Jenkinsfile 8.68 KiB
pipeline {
agent {
node {
label 'jenkins-worker'
}
}
environment {
BLUE_OCEAN_URL = "https://jenkins.ozg-sh.de/blue/organizations/jenkins/user-manager/detail/${env.BRANCH_NAME}/${env.BUILD_NUMBER}/pipeline"
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_CONTAINER_IMAGE_NAME = "user-manager"
QUARKUS_CONTAINER_IMAGE_TAG = "build-latest"
}
options {
timeout(time: 1, unit: 'HOURS')
disableConcurrentBuilds()
buildDiscarder(logRotator(numToKeepStr: '5'))
}
stages {
stage('Check Version') {
steps {
script {
FAILED_STAGE = env.STAGE_NAME
def rootPom = readMavenPom file: 'pom.xml'
def rootVersion = rootPom.version
if(env.BRANCH_NAME == 'release'){
if ( !(rootVersion ==~ RELEASE_REGEX)) {
error("Keine Release Version für Branch ${env.BRANCH_NAME}.")
}
} else {
if ( !(rootVersion ==~ SNAPSHOT_REGEX) ) {
error("Keine Snapshot Version für Branch ${env.BRANCH_NAME}.")
}
}
}
}
}
stage('Build UserManager') {
steps {
script {
FAILED_STAGE=env.STAGE_NAME
}
container("quarkus-22"){
configFileProvider([configFile(fileId: 'maven-settings', variable: 'MAVEN_SETTINGS')]) {
sh './mvnw -s $MAVEN_SETTINGS clean deploy -Dmaven.wagon.http.retryHandler.count=3'
}
}
}
}
stage('Build native container 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')]) {
configFileProvider([configFile(fileId: 'maven-settings', variable: 'MAVEN_SETTINGS')]) {
sh './mvnw -s $MAVEN_SETTINGS clean package -DskipTests -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'
sh 'podman login docker.ozg-sh.de -u ${USER} -p ${PASSWORD}'
echo "Version: ${BRANCH_AND_VERSION}";
sh "podman tag 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 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 root/user-manager:build-latest docker.ozg-sh.de/user-manager:latest'
sh 'podman push docker.ozg-sh.de/user-manager:latest'
}
}
}
}
}
}
}
stage('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}'
echo "Version: ${BRANCH_AND_VERSION}";
//sh "podman tag 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 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 root/user-manager:build-latest docker.ozg-sh.de/user-manager:latest'
//sh 'podman push docker.ozg-sh.de/user-manager:latest'
//}
}
}
}
}
}
stage('Deploy UserManager') {
when {
anyOf {
branch 'master'
branch 'release'
}
}
steps {
script {
FAILED_STAGE = env.STAGE_NAME
}
container("kubectl"){
script {
if (env.BRANCH_NAME == 'master') {
sh 'kubectl rollout restart deployment/user-manager -n sh-kiel-dev'
sh 'kubectl rollout status deployment/user-manager -n sh-kiel-dev'
sh 'kubectl rollout restart deployment/user-manager -n sh-ea-dev'
sh 'kubectl rollout status deployment/user-manager -n sh-ea-dev'
}
}
}
}
}
stage('Sonar Checks') {
steps {
script {
FAILED_STAGE=env.STAGE_NAME
}
container("maven-17") {
configFileProvider([configFile(fileId: 'maven-settings', variable: 'MAVEN_SETTINGS')]) {
script {
try {
if (env.BRANCH_NAME == 'master') {
withSonarQubeEnv('sonarqube-ozg-sh'){
sh 'mvn -s $MAVEN_SETTINGS sonar:sonar'
}
}
} catch (Exception e) {
unstable("SonarQube failed")
}
}
}
}
}
}
}
post {
always{
junit testResults: '**/target/surefire-reports/*.xml', skipPublishingChecks: true
}
failure {
script {
if (env.BRANCH_NAME == 'master' || env.BRANCH_NAME == 'release') {
//sendFailureMessage()
}
}
}
}
}
Void sendFailureMessage() {
def room = ''
def data = """{"msgtype":"m.text", \
"body":"UserManager: Build Failed. Stage: ${FAILED_STAGE} Build-ID: ${env.BUILD_NUMBER} Link: ${BLUE_OCEAN_URL}", \
"format": "org.matrix.custom.html", \
"formatted_body":"UserManager: 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"
}
sh "curl -XPOST -H 'authorization: Bearer ${getElementAccessToken()}' -d '${data}' https://matrix.ozg-sh.de/_matrix/client/v3/rooms/$room/send/m.room.message"
}
String getElementAccessToken() {
withCredentials([string(credentialsId: 'element-login-json', variable: 'LOGIN_JSON')]) {
return readJSON ( text: sh (script: '''curl -XPOST -d \"$LOGIN_JSON\" https://matrix.ozg-sh.de/_matrix/client/v3/login''', returnStdout: true)).access_token
}
}