How to use post-steps with the 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 noneat 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: "test@test.com", sendToIndividuals: true])
    }
  }
}

But at the same time, an error message appears Required context class hudson.FilePath is missingwhen the email message should exit:

[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 noneto agent any, it works great.

How can I make a step postwork without use agent any?

+6
source share
1 answer

wrap stepthat performs the feed in step node:

post {
  always {
    node('awesome_node_label') {
      step([$class: 'Mailer', notifyEveryUnstableBuild: true, recipients: "test@test.com", sendToIndividuals: true])
    }
  }
}
+8
source

All Articles