Jenkins Pipeline emailext:如何在预发送脚本中访问构建对象



我使用的是Jenkins版本2.150.1,有一些自由式作业和一些管道作业。在这两种工作类型中,我都使用emailext插件,带有模板和预发送脚本。

freestyle项目中可用的build变量在pipeline项目中似乎为null

预发脚本如下(只是一个例子,我的脚本更复杂):

msg.setSubject(msg.getSubject() + " [" + build.getUrl() + "]")

msg变量没有问题。在freestyle作业中,此脚本将构建url添加到邮件主题中。在管道作业中,作业控制台中提供以下内容:

java.lang.NullPointerException: Cannot invoke method getUrl() on null object

管道作业中对emailext的调用是:

emailext body: '${SCRIPT, template="groovy-html.custom.pipeline.sandbox.template"}', 
presendScript: '${SCRIPT, template="presend.sandbox.groovy"}', 
subject: '$DEFAULT_SUBJECT', 
to: 'user@domain.com'

我宁愿找到这个问题的通用解决方案(即访问管道预发脚本中的构建变量),但也希望能为我当前的需求找到任何解决方案:访问管道预发脚本中的作业名称任务编号工作区文件夹

我终于找到了答案-

显然,对于管道作业中存在的脚本,build对象不存在,而run对象存在。在我发布这个问题的时候,这个问题仍然没有记录!

在这个线程中找到了答案

这让作者更新了维基中的描述:

  • 运行-此消息所属的构建(可与FreeStyle或Pipeline作业一起使用)
  • build-此消息所属的内部版本(仅与FreeStyle作业一起使用)

您可以在以下脚本中访问build

// findUrl.groovy
def call(script) {
println script.currentBuild.rawBuild.url
// or if you just need the build url
println script.env.BUILD_URL
}

并且会从管道中调用这样的脚本:

stage('Get build URL') {
steps {
findUrl this
}
}

currentBuild为您提供了一个RunWrapper对象,rawBuild为您提供一个Run。希望这能有所帮助。

最新更新