0

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

似乎自由式项目中可用的构建变量在管道项目中为空。

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

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'

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

4

2 回答 2

1

我终于找到了答案——

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

在这个线程中找到了答案

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

  • run - 此消息所属的构建(可与 FreeStyle 或 Pipeline 作业一起使用)
  • build - 此消息所属的构建(仅用于 FreeStyle 作业)
于 2019-10-10T08:38:06.740 回答
0

您可以像这样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。希望这可以帮助。

于 2019-03-09T11:30:07.660 回答