Ein “Release” Build entspricht im Wesentlichen einem Snapshit-Build. Unterschied ist:
Ein Release Build wird als Pipeline angelegt. Die zu verwendende Release Version kann über den Parameter ReleaseVersion
eingegeben
werden. Dies kann im Jenkinsfile oder in in der Konfguration konfiguriert werden.
Wir definieren den Parameter ReleaseVersion
im Jenkinsfile (siehe unten).
Schritte:
pipeline {
agent any
options {
skipStagesAfterUnstable()
buildDiscarder(logRotator(numToKeepStr: '5'))
}
parameters {
string(name: 'ReleaseVersion', defaultValue: '', description: 'Version angeben (Format x.y.z)')
}
stages {
stage('Clone') {
steps {
checkout scm
}
}
stage('Tag') {
steps {
sh "git tag -a release-${ReleaseVersion} -m \"Release ${ReleaseVersion}\""
}
}
stage('Maven: clean deploy') {
agent {
docker {
image 'maven:3-alpine'
args '-v /root/.m2:/root/.m2 --network=host '
}
}
steps {
configFileProvider([configFile(fileId: 'jenkins-maven-settings', variable: 'MAVEN_SETTINGS')]) {
sh "mvn -s ${MAVEN_SETTINGS} fr.jcgay.maven.plugins:buildplan-maven-plugin:list-phase -Dbuildplan.tasks=clean,deploy"
// Mit CI fiendly versions:
sh "mvn -s ${MAVEN_SETTINGS} -Drevision=${ReleaseVersion} clean deploy"
}
}
post {
always {
junit allowEmptyResults: true, testResults: 'target/surefire-reports/*.xml'
}
}
}
stage('push tag') {
steps {
// https://issues.jenkins-ci.org/browse/JENKINS-28335
sh 'git config --local credential.helper "! echo username=\\$GIT_USERNAME; echo password=\\$GIT_PASSWORD;"'
withCredentials([usernamePassword(credentialsId: 'git-pass-credentials-ID', passwordVariable: 'GIT_PASSWORD', usernameVariable: 'GIT_USERNAME')]) {
sh "git push origin release-${ReleaseVersion}"
}
}
post {
always {
sh 'git config --local --unset credential.helper'
}
}
}
}
}
agent
docker “maven:3-alpine” wird nur für stage
Maven Build verwendet. Dieser agent hat u.a. kein git installiert,
so dass Aufrufe der Art ` sh “git …”` nicht funktionierensh 'git config --local credential.helper "! echo username=\\$GIT_USERNAME; echo password=\\$GIT_PASSWORD;"'
GIT_USERNAME
und GIT_PASSWORD
werden mit withCredentials([usernamePassword(credentialsId: 'git-pass-credentials-ID', passwordVariable: 'GIT_PASSWORD', usernameVariable: 'GIT_USERNAME')])
...
gefüllt (siehe https://issues.jenkins-ci.org/browse/JENKINS-28335.Da die Maven Version des Projektes CI-friendly ist (https://maven.apache.org/maven-ci-friendly.html), wird durch das setzen einer konkreten Version kein neuer Commit erzeugt (der Quellkode wird nicht verändert). Es wird lediglich ein Tag auf einen vorhandenen Commit gesetzt.