Jenkins 我如何发现詹金斯身材的其他原因?

Jenkins 我如何发现詹金斯身材的其他原因?,jenkins,groovy,build-pipeline-plugin,Jenkins,Groovy,Build Pipeline Plugin,当尝试使用groovy查询构建时,我调用 myBuild.getCauses() 我可以在Jenkins的界面(构建屏幕)中看到,这个构建有两个原因,一个是UserIdCause,另一个是UpstreamCause。然而,当我用上面的groovy查询同一个构建时,我只得到一个原因,那就是UserIdCause。必须有某种方法从构建中获取上游使用,否则它不会出现在用户界面中 我正在使用Build Pipeline插件手动触发构建。下面是groovy代码(我在jenkins脚本控制台中尝试过)使用

当尝试使用groovy查询构建时,我调用

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屏幕中