【发布时间】:2018-02-12 06:53:02
【问题描述】:
在 Jenkins 中使用基于 Groovy 的管道时,您可以使用 build stage 触发子作业。
上面的文档仍然没有说明您将获得什么样的返回对象以及它具有什么属性。
目前我唯一发现的是可以使用build.getResult() 来获取触发作业的结果。
不过,我确实想获得这份工作的 URL。
【问题讨论】:
在 Jenkins 中使用基于 Groovy 的管道时,您可以使用 build stage 触发子作业。
上面的文档仍然没有说明您将获得什么样的返回对象以及它具有什么属性。
目前我唯一发现的是可以使用build.getResult() 来获取触发作业的结果。
不过,我确实想获得这份工作的 URL。
【问题讨论】:
来自/pipeline-syntax 中build 步骤的文档(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(未经测试),但通常不安全且不鼓励离开沙盒。
【讨论】:
上一个答案仅适用于通过的作业。失败的从构建步骤返回 null。有一个相应的错误https://issues.jenkins-ci.org/browse/JENKINS-48475。将其设置为 RESOLVED 是因为这种行为是意料之中的,但 IMO 不正确,因为没有其他方法可以从失败的作业中获取信息
【讨论】:
将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')
【讨论】: