尝试在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两次的情况下设计此工作流程的任何线索?
答案 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讨论了可能的增强功能。