2

嘗試在Jenkins中實現以下工作流程:觸發器啓動並行作業A,B,C和D.只要A,B和C完成作業X應該開始和工作的Y一樣,它應該經過C和D.Jenkins /構建工作流程:將一個並行執行的作業的結果提供給多個作業

工作流程草圖開始:

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

我開始與Build Flow Plugin,但我不知道如何設計工作流程,而無需啓動C兩次:

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兩次的任何線索?

回答

1

這是可能的,但仍然尷尬,在新Workflow plugin

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討論可能的改進。

1

構建流程在這裏沒有幫助,因爲您有兩個等待C完成的作業(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) } 
+0

非常感謝尼古拉斯!我應該在JIRA中爲改進打開一張新票嗎? – 2013-03-18 10:03:50

相關問題