Jenkins / Build工作流程:将一个并行执行的作业的结果提供给多个作业

时间:2013-03-06 09:40:25

标签: jenkins build continuous-integration hudson jenkins-workflow

尝试在Jenkins中实现以下工作流程:触发器启动并行作业A,B,C和D.一旦A,B和C完成作业X应该开始并且作业Y相同,它应该在之后开始C和D.

工作流草图:

          -> 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两次的情况下设计此工作流程的任何线索?

2 个答案:

答案 0 :(得分: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) }

答案 1 :(得分: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讨论了可能的增强功能。