【问题标题】:How to I get the url of build triggered with build step on Jenkins?如何在 Jenkins 上获取构建步骤触发的构建 URL?
【发布时间】:2018-02-12 06:53:02
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: groovy jenkins-pipeline


    【解决方案1】:

    来自/pipeline-syntaxbuild 步骤的文档(waitFormCompletion 参数,原始格式更好):

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

    • 号码
      内部版本号(整数)
    • 结果
      通常为 SUCCESS、UNSTABLE 或 FAILURE(对于正在进行的构建可能为 null)
    • 当前结果
      通常是成功、不稳定或失败。永远不会为空。
    • resultIsBetterOrEqualTo(String)
      将当前构建结果与提供的结果字符串(SUCCESS、UNSTABLE 或 FAILURE)进行比较,如果当前构建结果优于或等于提供的结果,则返回 true。
    • resultIsWorseOrEqualTo(String)
      将当前构建结果与提供的结果字符串(SUCCESS、UNSTABLE 或 FAILURE)进行比较,如果当前构建结果差于或等于提供的结果,则返回 true。
    • 显示名称
      通常为 #123,但有时设置为例如 SCM 提交标识符
    • 说明
      有关构建的其他信息
    • 身份证
      通常以字符串形式编号
    • timeInMillis
      自计划构建的纪元以来的时间
    • startTimeInMillis
      自构建开始运行的纪元以来的时间
    • 持续时间
      构建持续时间(以毫秒为单位)
    • 持续时间字符串
      构建持续时间的人类可读表示
    • 上一个版本
      另一个类似的对象,或 null
    • 下一个构建
      类似
    • absoluteUrl
      构建索引页面的 URL
    • 构建变量
      对于非管道下游构建,提供对已定义构建变量映射的访问;对于管道下游构建,在 env 上全局设置的任何变量
    • 更改集
      来自不同 SCM 检出的变更集列表;每个都有一个种类并且是一个提交列表;每个提交都有一个commitId、timestamp、msg、author和affectedFiles,每个都有一个editType和路径;该值通常不是可序列化的,因此您只能在标记为 @NonCPS 的方法中访问它
    • 原始构建
      使用更多 API 的 hudson.model.Run,​​仅适用于沙盒外的受信任库或管理员批准的脚本;该值将不可序列化,因此您只能在标记为 @NonCPS 的方法中访问它

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

    作业 URL 不存在(毕竟这是一个构建),但 absoluteUrl 为您提供构建 URL。

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

    【讨论】:

    • 谢谢!现在测试一下,其实我发现自己返回的对象好像是一个 WorkflowRun 实例。来自jenkins.io/doc/pipeline/steps/pipeline-build-step 的官方文档仍然无法提供有关返回对象的信息,更糟糕的是几乎不可能读取参数。您可以找到列出 8 次的“描述”参数,但您不知道它适用于什么。文档的 HTML 格式很糟糕,BIG TIME。
    • @sorin 不,只是假装是。您将获得一个 RunWrapper:github.com/jenkinsci/workflow-support-plugin/blob/…
    • @sorin 补丁欢迎:github.com/jenkins-infra/pipeline-steps-doc-generator——虽然它不是很好,但也不是主要参考。毕竟,它永远无法准确显示您的实例上可用的内容。
    • @DanielBeck 没有这样的属性:absoluteUrl 类:groovy.lang.Binding 运行管道作业时出错。请让我知道是否有任何其他方式可用于获取管道内触发的作业的 BUILD_URL。
    【解决方案2】:

    上一个答案仅适用于通过的作业。失败的从构建步骤返回 null。有一个相应的错误https://issues.jenkins-ci.org/browse/JENKINS-48475。将其设置为 RESOLVED 是因为这种行为是意料之中的,但 IMO 不正确,因为没有其他方法可以从失败的作业中获取信息

    【讨论】:

      【解决方案3】:

      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')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-07-15
        • 1970-01-01
        • 1970-01-01
        • 2012-08-27
        • 1970-01-01
        • 1970-01-01
        • 2012-07-18
        • 1970-01-01
        相关资源
        最近更新 更多