Disons que j'ai un simple fichier de pipeline Jenkins comme ci-dessous:
pipeline {
agent any
stages {
stage('Test') {
steps {
sh ...
}
}
stage('Build') {
steps {
sh ...
}
}
stage('Publish') {
when {
buildingTag()
}
steps {
sh ...
send_slack_message("Built tag")
}
}
}
post {
failure {
send_slack_message("Error building tag")
}
}
}
Puisqu'il y a beaucoup de builds sans balises tous les jours, je ne veux pas envoyer de message mou sur les builds sans balises . Mais pour les builds de balises, je veux envoyer soit un message de réussite, soit un message d'échec, quelle que soit l'étape où il a échoué.
Donc, pour l'exemple ci-dessus, je veux:
Pour autant que je sache, il n'y a pas de "section de message conditionnelle" dans la syntaxe du pipeline Jenkins, ce qui pourrait vraiment m'aider ici. Ma question est donc la suivante: y a-t-il une autre façon de faire cela?
3 Réponses :
Dans l'étape de post-construction, vous pouvez également utiliser l'action de script à l'intérieur et utiliser if. Et à l'intérieur de cette étape, vous pouvez ajouter le plugin emailext.
post {
failure {
script {
if (isTagBuild) {
send_slack_message("Error building tag")
}
}
}
}
where isTagBuild is whatever way you have to differentiate between a tag or no tag build.You could also apply the same logic, and move send_slack_message("Built tag") down to a success post stage.
Eh bien, pour ceux qui veulent juste du code copiable, voici ce que j'ai fini avec la réponse de @ eez0.
pipeline {
agent any
environment {
BUILDING_TAG = 'no'
}
stages {
stage('Setup') {
when {
buildingTag()
}
steps {
script {
BUILDING_TAG = 'yes'
}
}
}
stage('Test') {
steps {
sh ...
}
}
stage('Build') {
steps {
sh ...
}
}
stage('Publish') {
when {
buildingTag()
}
steps {
sh ...
}
}
}
post {
failure {
script {
if (BUILDING_TAG == 'yes') {
slackSend(color: '#dc3545', message: "Error publishing")
}
}
}
success {
script {
if (BUILDING_TAG == 'yes') {
slackSend(color: '#28a745', message: "Published")
}
}
}
}
}
Comme vous pouvez le voir, je compte vraiment sur la fonction buidingTag () intégrée de Jenkins pour m'aider à trier les choses, en utilisant un env-var comme "pont". Je ne suis vraiment pas doué pour le pipeline Jenkins, alors laissez des commentaires si vous avez des suggestions.