codebuilder-project/Jenkinsfile

151 lines
5.4 KiB
Groovy

pipeline {
agent {
node {
label 'docker'
}
}
environment {
// NEXUS_CREDENTIALS = credentials('jenkins_nexus')
DOCKER_IMAGE_TAG_NAME="codebuilder"
DOCKER_IMAGE_NAME="nclazz/codebuilder"
DOCKER_REGISTRY="docker.nclazz.de"
NAMED_TAG = "${ BRANCH_NAME == "master" ? "latest" : BRANCH_NAME == "staging" ? "staging" : "develop" }"
}
stages {
// Prepare the build environment
stage('Prepare') {
steps {
script {
VERSION = sh (script: "mvn -q -Dexec.executable=echo -Dexec.args='\\\${project.version}' --non-recursive exec:exec", returnStdout: true).trim().substring(1)
}
}
}
stage('Build') {
steps {
sh 'mvn clean package -DskipTests -B -s settings.xml'
}
}
stage('Test') {
steps {
sh 'mvn verify -B -s settings.xml'
jacoco(
changeBuildStatus: true,
exclusionPattern: '**/models/**, **/resources/**/*Controller.class',
minimumInstructionCoverage: '30',
maximumInstructionCoverage: '50',
minimumClassCoverage: '60',
maximumClassCoverage: '80'
)
recordIssues(
enabledForFailure: true,
aggregatingResults: true,
tools: [java(), checkStyle(), findBugs(pattern: '**/target/spotbugsXml.xml')]
)
}
}
stage('Deploy maven artifacts') {
when { branch 'master' }
steps {
withCredentials([usernamePassword(credentialsId: 'jenkins_nexus', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) {
sh 'mvn deploy -Dnexus.user=${USERNAME} -Dnexus.password=${PASSWORD} -B -s settings.xml'
}
script {
addEmbeddableBadgeConfiguration(id: "mavenArtifact", subject: "Maven Artifact", color: "green", status: "${VERSION}")
}
}
}
stage('Build Docker') {
when { branch 'master' }
steps {
dir('codebuilder-service') {
sh "docker build --tag $DOCKER_IMAGE_TAG_NAME:$VERSION ."
}
script {
addEmbeddableBadgeConfiguration(id: "dockerImage", subject: "Docker", color: "green", status: "${DOCKER_IMAGE_TAG_NAME}:${VERSION}")
}
}
}
stage('Deploy docker artifacts') {
when { branch 'master' }
steps {
script {
docker.withRegistry("https://"+env.DOCKER_REGISTRY, "jenkins_nexus") {
sh "docker tag $DOCKER_IMAGE_TAG_NAME:$VERSION $DOCKER_REGISTRY/$DOCKER_IMAGE_NAME:$VERSION"
sh "docker push $DOCKER_REGISTRY/$DOCKER_IMAGE_NAME:$VERSION"
sh "docker tag $DOCKER_IMAGE_TAG_NAME:$VERSION $DOCKER_REGISTRY/$DOCKER_IMAGE_NAME:$NAMED_TAG"
sh "docker push $DOCKER_REGISTRY/$DOCKER_IMAGE_NAME:$NAMED_TAG"
// sh "docker rm -vf \$(docker ps -a -q)"
}
}
}
}
}
post {
failure {
script {
emailext(
to: "notifications@nclazz.de",
from: "jenkins@nclazz.de",
subject: "Jenkins job ${env.JOB_NAME}#${env.BUILD_NUMBER} failed",
body: """
There is a build failure in ${env.JOB_NAME}.
Build: ${env.BUILD_URL}
Logs: ${env.BUILD_URL}console
Changes: ${env.BUILD_URL}changes
--
"""
)
}
}
unstable {
script {
emailext(
to: "notifications@nclazz.de",
from: "jenkins@nclazz.de",
subject: "Jenkins job ${env.JOB_NAME}#${env.BUILD_NUMBER} unstable",
body: """
Some tests have failed in ${env.JOB_NAME}.
Build: ${env.BUILD_URL}
Logs: ${env.BUILD_URL}console
Changes: ${env.BUILD_URL}changes
--
"""
)
}
}
fixed {
script {
emailext(
to: "notifications@nclazz.de",
from: "jenkins@nclazz.de",
subject: "Jenkins job ${env.JOB_NAME}#${env.BUILD_NUMBER} fixed",
body: """
The build ${env.JOB_NAME} completed successfully and is back to normal.
Build: ${env.BUILD_URL}
Logs: ${env.BUILD_URL}console
Changes: ${env.BUILD_URL}changes
--
"""
)
}
}
always {
junit(
allowEmptyResults: true,
testResults: '**/target/surefire-reports/**/*.xml'
)
cleanWs()
}
}
}