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

Jenkins Pipeline emailext: How to access build object in pre-send script

我正在使用 Jenkins 版本。 2.150.1 并有一些自由式工作和一些流水线工作。 在这两种工作类型中,我都使用 emailext 插件,带有模板和预发送脚本。

似乎在自由式项目中可用的 build 变量在管道项目中是 null

发送前的脚本如下(只是举个例子,我的脚本比较复杂):

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

msg变量没有问题。 在自由式作业中,此脚本将构建 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变量),但也很感激我当前需要的任何解决方法: 访问工作名称工作编号工作区文件夹发送脚本。

您可以像这样在 script 中访问 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 object and the rawBuild a Run。希望这会有所帮助。

终于找到答案了-

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

在这个thread

中找到了答案

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

  • run - the build this message belongs to (may be used with FreeStyle or Pipeline jobs)
  • build - the build this message belongs to (only use with FreeStyle jobs)