10

groovy を使用してビルドをクエリしようとすると、次のように呼び出します

myBuild.getCauses()

Jenkins のインターフェース (ビルド画面) を見ると、このビルドには UserIdCause と UpstreamCause という 2 つの原因があることがわかります。ただし、上記の groovy を使用して同じビルドを調べると、UserIdCause という 1 つの原因しか返されません。ビルドから UpstreamCause を取得する方法が必要です。そうしないと、ユーザー インターフェイスに表示されません。

Build Pipeline プラグインを使用してビルドを手動でトリガーしています。

4

2 に答える 2

6

これは、使用する実用的なグルーヴィーコードです(ジェンキンススクリプトコンソールで試しました)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() 

リファレンスを参照

  1. build-pipeline-plugin を参照して、コードに原因を追加する方法BuildPipelineView.java
  2. hudson.model.Cause APIを参照してください
于 2015-06-27T14:34:04.243 に答える
5

はすべての原因を取得するbuild.getCauses()わけではなく、最初causeActionのの原因のみを取得build.getActions(hudson.model.CauseAction.class)するようです。build.getAction(hudson.model.CauseAction.class)

独自の原因を持つ追加のアクションは、次の方法で見つけることができます。

def actions = build.getActions(hudson.model.CauseAction.class)

そのため、これらの各アクションの原因を確認する必要があるため、代わりdef causes = build.causes()

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 ]

最初のメンバーはビルド パイプライン プラグインupstreamCauseを表し、2 番目のメンバーはこのビルドを手動でトリガーしたユーザーを表します。

確かに、Build User Vars プラグインhudson.model.Cause$UserIdCauseが上流の原因ではなく、最も浅い を使用すること を望みます!

同様に、cause.upstreamCauses各上流には複数の原因がある可能性があるため、チェーンを単純にたどっても意味がありません。

に沿って再帰する代わりに、次を使用して の原因アクションcause.upstreamCausesにアクセスします。upstreamRun

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$UserIdCausegetCausegetAction()getActions()

于 2018-10-15T12:14:57.030 に答える