的确,您当前不能when在全局post块中使用。When必须在stage指令内使用。
使用是一种合理的选择if else,但是您需要在声明性管道中使用脚本编写的块来完成此工作:
pipeline { agent any parameters {string(defaultValue: 'master', description: ’Which branch?’, name: ’BRANCH_NAME’) } stages {stage(’test’){ steps {echo 'my branch is ' + params.BRANCH_NAME }} } post {success{ script {if( params.BRANCH_NAME == ’master’ ){ echo 'mail list master'}else { echo 'mail list others'} }} }}
参数为master时输出:
[Pipeline] {[Pipeline] stage[Pipeline] { (test)[Pipeline] echomy branch is master[Pipeline] }[Pipeline] // stage[Pipeline] stage[Pipeline] { (Declarative: Post Actions)[Pipeline] script[Pipeline] {[Pipeline] echomail list master[Pipeline] }[Pipeline] // script[Pipeline] }[Pipeline] // stage[Pipeline] }[Pipeline] // node[Pipeline] End of PipelineFinished: SUCCESS
参数为“ test”时输出:
[Pipeline] {[Pipeline] stage[Pipeline] { (test)[Pipeline] echomy branch is test[Pipeline] }[Pipeline] // stage[Pipeline] stage[Pipeline] { (Declarative: Post Actions)[Pipeline] script[Pipeline] {[Pipeline] echomail list others[Pipeline] }[Pipeline] // script[Pipeline] }[Pipeline] // stage[Pipeline] }[Pipeline] // node[Pipeline] End of PipelineFinished: SUCCESS
为了使它更加简洁,您可以将脚本作为函数调用:
pipeline { agent any parameters {string(defaultValue: 'master', description: ’Which branch?’, name: ’BRANCH_NAME’) } stages {stage(’test’){ steps {echo 'my branch is ' + params.BRANCH_NAME }} } post {success{ getMailList(params.BRANCH_NAME)} }}def getMailList(String branch){ if( branch == ’master’ ){echo 'mail list master' } else {echo 'mail list others' }}解决方法
有一个詹金斯管道。构建成功时需要/想要发送电子邮件。通过电子邮件将所有分支的电子邮件发送到 maillist-1, 并将master分支的构建过滤到maillist-master 。我尝试使用if和when语句步骤,但它们均在后期阻止中失败。
pipeline { agent ... stages {...} post{ success{ archiveArtifacts: ... if( env.BRANCH_NAME == ’master’ ){emailext( to: ’maillist-master@domain.com’,replyTo: ’maillist-master@domain.com’,subject: ’Jenkins. Build succeeded :^)