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.