我使用的是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。希望这能有所帮助。