Groovy Jenkins Pipeline, Baby!
Problem: Langwierige und schwer nachvollziehbare Änderungen bei vielen Microservices
Jenkins ist ein weit verbreitetes CICD-Tool. Wenn man mit vielen Microservices arbeitet, kann es sehr aufwendig werden. Kleine Änderungen, wie eine neue URL, können da schon mal zu einer langwierigen Aufgabe werden, da sowas für jeden Job gemacht werden muss. Es ist auch schwer nachzuvollziehen welche Änderungen wann von wem durchgeführt wurden, da es keine Änderungshistorie gibt.
Lösung: Jobs als Groovy-Code definieren mit der "Jenkins Pipeline"
Mit der Plugin-Suite "Jenkins Pipeline" kann man verschiedene Jobs als Groovy-Code definieren. Diesen kann man dann in die Versionsverwaltung seiner Wahl einchecken und auch neben dem Projektcode pflegen und weiterentwickeln.
Im Zusammenhang mit einer Multibranch-Pipeline werden alle Branches eines Projektes automatisch nach der Bauanleitung im 'Jenkinsfile' gebaut.
Beispiel für Groovy Code
Ein Projekt mit mehreren Services, die alle mit Maven gebaut werden. Bei einem Merge auf den Branch develop soll eine neue Version gebaut werden.
Coffee-Service, Food-Service: Jenkinsfile
def pipeline
stage('Load pipeline') {
// Load the pipeline from the shared repository
fileLoader.withGit(
'https://url-to-pipeline-repo.git',
'master',
' id-of-in-jenkins-stored-credentials') {
// Every service is able to use pipeline.groovy
pipeline = fileLoader.load('pipeline.groovy')
}
}
pipeline.execute()
Pipeline Repo: pipeline.groovy
def execute() {
stage('Checkout') {
checkout scm
}
stage('Build service') {
sh "mvn clean install"
}
// The variable env.BRANCH_NAME is automatically set to the current branch.
// As a consequence of this feature the pipeline can deal with every new branch
if ("develop".equals(env.BRANCH_NAME) {
stage('Release') {
sh "mvn release:prepare release:perform"
}
}
}
Weiterführende Aspekte
---
Autor
Christof Huber / Software Developer / Business Division Automotive Bavaria