7

当构建变得不稳定/失败或再次成功时,我想模仿最初的 Jenkins 做事(比如发送通知)的行为。

为此,我需要查询之前的构建状态,可以这样完成:

currentBuild.rawBuild.getPreviousBuild()?.getResult().toString()

但是,rawBuild它应该是一个“危险”对象,因此被列入黑名单,不能在 Groovy 沙箱中执行

现在,由于我正在从 SCM 加载我的 Jenkins 脚本,因此我无法在每个项目级别停用 Groovy 沙箱,而只能针对整个 Jenkins 实例(即通过 this),这当然不是什么我想。

是否有任何其他方法可以确定我错过的符合沙盒原则的作业的最后构建状态(并且不包括通过 Jenkins 的 REST API 查询状态等黑客行为)?

4

2 回答 2

6

无需访问rawBuild,您可以在没有任何特殊权限的情况下执行以下操作:

currentBuild.getPreviousBuild().result

这将允许您查看先前构建的结果,而无需 Jenkins 管理员设置任何特殊权限。它应该可以在任何地方运行。

全局变量参考:https ://www.jenkins.io/doc/book/pipeline/getting-started/#global-variable-reference

更具体地说,在您自己的 Jenkins 中: $ {YOUR_JENKINS_URL}/pipeline-syntax/globals#currentBuild

更多信息: https: //support.cloudbees.com/hc/en-us/articles/217591038-How-to-Iterate-Through-the-Last-Successful-Builds-in-Pipeline-Job

于 2018-01-12T14:16:18.897 回答
4

如果您在构建后getRawBuild通过Manage Jenkins > In-process Script ApprovalRejectedAccessException批准该方法,您甚至可以在 groovy 沙箱中使用下一个构建中的方法。

此外getRawBuild,您需要在获得脚本的每个方法的异常getPreviousBuildgetResult一一批准。

于 2016-11-04T15:06:25.983 回答