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

时间:2019-01-07 09:24:20

标签: jenkins-pipeline jenkins-groovy jenkins-email-ext

我正在使用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 变量),但也希望我能采取任何解决方法当前需求: 在管道预发送脚本中访问职位名称职位编号工作区文件夹

2 个答案:

答案 0 :(得分:0)

您可以像这样在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对象,而rawBuild给您一个Run。希望这会有所帮助。

答案 1 :(得分:0)

我终于找到了答案-

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

在此thread

中找到了答案

由哪个作者来更新wiki中的描述:

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