Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use post steps with Jenkins pipeline on multiple agents?

When using the Jenkins pipeline where each stage runs on a different agent, it is good practice to use agent none at the beginning:

pipeline {   agent none   stages {     stage('Checkout') {       agent { label 'master' }       steps { script { currentBuild.result = 'SUCCESS' } }     }     stage('Build') {       agent { label 'someagent' }       steps { bat "exit 1" }     }   }   post {     always {       step([$class: 'Mailer', notifyEveryUnstableBuild: true, recipients: "[email protected]", sendToIndividuals: true])     }   } } 

But doing this leads to Required context class hudson.FilePath is missing error message when the email should go out:

[Pipeline] { (Declarative: Post Actions) [Pipeline] step Required context class hudson.FilePath is missing Perhaps you forgot to surround the code with a step that provides this, such as: node [Pipeline] error [Pipeline] } 

When I change from agent none to agent any, it works fine.

How can I get the post step to work without using agent any?

like image 588
Daniel Steinmann Avatar asked Jun 13 '17 20:06

Daniel Steinmann


1 Answers

wrap the step that does the mailing in a node step:

post {   always {     node('awesome_node_label') {       step([$class: 'Mailer', notifyEveryUnstableBuild: true, recipients: "[email protected]", sendToIndividuals: true])     }   } } 
like image 127
burnettk Avatar answered Nov 09 '22 13:11

burnettk