Jenkins 我如何发现詹金斯身材的其他原因?
当尝试使用groovy查询构建时,我调用Jenkins 我如何发现詹金斯身材的其他原因?,jenkins,groovy,build-pipeline-plugin,Jenkins,Groovy,Build Pipeline Plugin,当尝试使用groovy查询构建时,我调用 myBuild.getCauses() 我可以在Jenkins的界面(构建屏幕)中看到,这个构建有两个原因,一个是UserIdCause,另一个是UpstreamCause。然而,当我用上面的groovy查询同一个构建时,我只得到一个原因,那就是UserIdCause。必须有某种方法从构建中获取上游使用,否则它不会出现在用户界面中 我正在使用Build Pipeline插件手动触发构建。下面是groovy代码(我在jenkins脚本控制台中尝试过)使用
myBuild.getCauses()
我可以在Jenkins的界面(构建屏幕)中看到,这个构建有两个原因,一个是UserIdCause,另一个是UpstreamCause。然而,当我用上面的groovy查询同一个构建时,我只得到一个原因,那就是UserIdCause。必须有某种方法从构建中获取上游使用,否则它不会出现在用户界面中
我正在使用Build Pipeline插件手动触发构建。下面是groovy代码(我在jenkins脚本控制台中尝试过)使用
Build.getAction
job = hudson.model.Hudson.instance.getItem("demo-job")
build = job.getLastBuild()
// get action first
def action = build.getAction(hudson.model.CauseAction.class)
// get the list of causes
for (cause in action.getCauses()) {
println cause.getShortDescription()
}
// another way to find specific UpsteamCause directly
cause = action.findCause(hudson.model.Cause.UpstreamCause.class)
println cause.getUpstreamRun()
参见参考文献
似乎
build.getCauses()
并没有得到所有的原因,只有build.getAction(hudson.model.causeAction.class)
的第一个causeAction的原因(hudson.model.causeAction.class)
,可能是通过调用build.getAction(hudson.model.causeAction.class)
可通过以下方式找到有其自身原因的其他措施:
def actions = build.getActions(hudson.model.CauseAction.class)
因此,我们需要检查每一个操作的原因,因此我们没有使用def causs=build.causs()
def causes = build.getActions(hudson.model.CauseAction.class)
.collect{ it.getCauses() }.flatten()
在我的例子中,它将返回一个类似以下内容的列表:
[ 05b8ef62-d071-11e8-b9db-9fd4e0aedf12/job/MyView/1238[11ef1ed2-d071-11e8-8c81-b71616102fe9/job/MyJob/4250[hudson.model.Cause$UserIdCause@2ddf7e3e]],
hudson.model.Cause$UserIdCause@3337c79c ]
其中第一个成员表示生成管道插件上游使用
,第二个成员表示手动触发此生成的用户
当然,我希望使用最浅的hudson.model.Cause$UserIdCause,而不是任何上游原因
同样,简单地遍历因果链是没有意义的。上游使用,因为每个上游可能有多个因果
不要沿着原因递归。上游使用,而是使用以下方法访问上游运行的原因操作:
cause.upstreamRun.getActions(hudson.model.CauseAction.class).collect{ it.getCauses() }.flatten()
注:
build.getCause(hudson.model.Cause$UserIdCause)
可能返回NULL
其中build.getCause(hudson.model.Cause$UpstreamCause)
将成功,即使getActions()
中存在原因为Cause$UserIdCause
的操作,所以想必getCause
也会调用getAction()
而不是getActions()
我已经了解到,运行中的getActions()方法为您提供了另一个角度来分析原因。当我的时间限制到期时,我将发布一个更完整的问题答案。最好在JSON/XMLI中发布示例原因。我有一个相反的问题:thr=Thread.currentThread();build=thr?.可执行文件
;然后build.getCauses()
只返回一个上游原因。我正在使用Build Pipeline插件手动启动,我想知道哪个用户单击了Build/rebuild图标,但我无法获取用户ID,因为正如您所说,它显示在Jenkins Build屏幕中