Доброе утро!
Данная маленькая заметка содержит шаблон Declarative Pipeline для CI Jenkins, который можно использовать в приложениях на Spring Boot и легко адаптировать под прочие подобные случаи.
Предусловия: есть Jenkins, интегрированный с Gitlab CE, приложение на Spring Boot, сборочная система Maven.
Необходимо написать Jenkinsfile, который позволит Jenkins'у собирать, тестировать, уведомлять о результатах Gitlab и автора коммита.
В результате получился такой шаблон:
pipeline {
agent any
environment{
JAVA_HOME = '/usr/lib/jvm/java-11-openjdk-amd64/'
}
stages {
stage('Build') {
steps {
gitlabCommitStatus(name: 'Build') {
sh 'mvn -B -DskipTests clean package'
}
}
}
stage('Test') {
steps {
gitlabCommitStatus(name: 'Test') {
sh 'mvn test'
}
}
post {
always {
junit 'target/surefire-reports/*.xml'
}
}
}
stage('Deploy') {
when {
expression {
return "$GIT_BRANCH" == "origin/master"
}
}
steps {
gitlabCommitStatus(name: 'Deploy') {
sh "sb-deploy.pl deploy/config.ph"
}
}
}
}
post {
always {
emailext(body: '$DEFAULT_CONTENT',
recipientProviders: [[$class: 'DevelopersRecipientProvider'],
[$class: 'RequesterRecipientProvider']],
subject: '$DEFAULT_SUBJECT')
}
}
}
sb-deploy.pl
— скрипт, установленный на хосте с Jenkins, умеющий деплоить приложения на наши виртуальные машины. gitlabCommitStatus
позволяет писать результаты стадии в Gitlab. emailext
отправит результаты автору коммита, если в Jenkins заданы корректные настройки SMTP.
Если кому-то пригодится — хорошо, нет — ну и ладно, сам не потеряю.