2

Jenkinsで次のワークフローを実装してみてください。トリガーが並列ジョブA、B、C、Dを開始します。A、B、Cが終了するとすぐに、ジョブXが開始され、ジョブYでも同じように、CとDの後に開始されます。 。

ワークフロースケッチ:

          -> A -> 
 Trigger  -> B -> X -> Result 1
          -> C =>
          -> D -> Y -> Result 2

ビルドフロープラグインから始めましたが、Cを2回起動せずにワークフローを設計する方法がわかりません。

parallel (
  { 
     Xpre = parallel ([
        first:  { a = build("TGZ", subjob: "T1") },
        second: { b = build("TGZ", subjob: "T2") },
        third:  { c = build("TGZ", subjob: "T3") }
     ])

     build("TGZ", subjob: "X")
  },
  {
     Ypre = parallel ([
        third2:  { c2 = build("TGZ", subjob: "T3") },
        fourth:  { d = build("TGZ", subjob: "T4") }
     ])

     build("TGZ", subjob: "Y")
  }
)

Cを2回実行せずにこのワークフローを設計する方法についての手がかりはありますか?

4

2 に答える 2

1

C が完了するのを待っている 2 つのジョブ (X と Y) があるため、ビルド フローはここでは役に立ちません。したがって、「線形」(これが適切な用語であるかどうかはわかりません) 依存関係ツリーではなく、複雑なグラフです。build-flow によって (まだ) 実装されていない、より複雑な非同期モデルを探しています。後で導入できるかもしれませんが、開発のこの段階では優先度が低い:

   parallel( [
        a:  { build("TGZ", subjob: "T1") },
        b: { build("TGZ", subjob: "T2") },
        c:  { build("TGZ", subjob: "T3") }
     ])
   .on( jobs[a].completed && jobs[b].completed && jobs[c].completed ) { build(x) } 
   .on( jobs[c].completed && jobs[d].completed ) { build(y) }
于 2013-03-09T15:12:55.147 に答える
1

これは、新しいWorkflow プラグインでは可能ですが、まだ厄介です:

def aDone = false def bDone = false def cDone = false def dDone = false parallel a: { runA() aDone = true }, b: { runb() bDone = true }, c: { runC() cDone = true }, d: { runD() dDone = true }, x: { waitUntil {aDone && bDone && cDone} runX() }, y: { waitUntil {cDone && dDone} runY() }

JENKINS-27127では、可能な拡張について説明しています。

于 2015-04-02T12:40:52.430 に答える