151 lines
5.4 KiB
Groovy
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()
|
|
}
|
|
}
|
|
} |