如何在Jenkins的构建步骤中获取构建的url?

时间:2017-09-17 10:07:52

标签: groovy jenkins-pipeline

在Jenkins中使用基于Groovy的管道时,您可以使用build stage触发子作业。

上面的文档仍未说明您将获得什么样的返回对象以及它具有哪些属性。

到目前为止我唯一发现的是我可以使用build.getResult()来获取触发作业的结果。

不过,我确实想获得这份工作的网址。

3 个答案:

答案 0 :(得分:5)

build/pipeline-syntax参数中waitFormCompletion步骤的文档中,原始格式更好:

  

您可能会要求此Pipeline构建等待下游构建的完成。在这种情况下,步骤的返回值是一个对象,您可以在该对象上获取以下只读属性:因此您可以检查其.result等。

     
      

  •   内部编号(整数)
  •   
  • 结果
      通常为SUCCESS,UNSTABLE或FAILURE(对于正在进行的构建可能为null)
  •   
  • currentResult
      通常是成功,不稳定或失败。永远不会为空。
  •   
  • resultIsBetterOrEqualTo(字符串)
      将当前构建结果与提供的结果字符串(SUCCESS,UNSTABLE或FAILURE)进行比较,如果当前构建结果优于或等于提供的结果,则返回true。
  •   
  • resultIsWorseOrEqualTo(字符串)
      将当前构建结果与提供的结果字符串(SUCCESS,UNSTABLE或FAILURE)进行比较,如果当前构建结果低于或等于提供的结果,则返回true。
  •   
  • 的displayName
      通常为#123但有时设置为例如SCM提交标识符
  •   
  • 描述
      有关构建的其他信息
  •   
  • ID
      通常编号为字符串
  •   
  • timeInMillis
      时间安排以来的时间
  •   
  • startTimeInMillis
      自构建开始运行的时代以来的时间
  •   
  • 持续时间
      构建的持续时间(以毫秒为单位)
  •   
  • durationString
      人类可读的构建持续时间表示
  •   
  • previousBuild
      另一个类似的对象,或null
  •   
  • nextBuild
      类似
  •   
  • absoluteUrl
      构建索引页面的URL
  •   
  • buildVariables
      对于非管道下游构建,提供对已定义构建变量的映射的访问;对于管道下游构建,任何变量在env
  • 上全局设置   
  • 变更
      来自不同SCM签出的变更集列表;每个都有一种,是一个提交列表;每个提交都有一个commitId,timestamp,msg,author和affectedFiles,每个提交都有一个editType和path;该值通常不是Serializable,因此您只能在标记为@NonCPS
  • 的方法中访问它   
  • rawBuild
      带有更多API的hudson.model.Run,​​仅适用于沙箱之外的受信任库或管理员批准的脚本;该值不是Serializable,因此您只能在标记为@NonCPS
  • 的方法中访问它   
     

如果您不等待,只要下游构建可以添加到队列(甚至不会启动),此步骤就会成功。在这种情况下,目前没有返回值。

作业网址不存在(毕竟它是一个版本),但absoluteUrl会为您提供构建网址。

rawBuild应该允许您访问,例如rawbuild.parent.url(未经测试),但它通常不安全,不鼓励离开沙箱。

答案 1 :(得分:1)

之前的答案仅适用于传递的作业。失败的那些从构建步骤返回null。有一个相应的Bug https://issues.jenkins-ci.org/browse/JENKINS-48475。它被设置为已解决,因为这种行为是预期的,但IMO不正确,因为没有替代方法从失败的作业中获取信息

答案 2 :(得分:0)

propagate设置为false - 构建步骤将通过,它将返回带有结果字段的输出

以下是代码:

def success = "SUCCESS"
def build_run
build_run = build job: 'pass', propagate: false
println build_run.result
if (build_run.result == success)
    println('job1 passed')
else
    println('job1 failed')
build_run = build job: 'fail', propagate: false
println build_run.result
if (build_run.result == success)
    println('job2 passed')
else
    println('job2 failed')