Currying groovy CPS封闭以并行执行

我们在某些工作中动态创建并行步骤。感谢这个线程,我找到了如何动态创建带有并行步骤中使用的参数的地图。

但是,现在我想重用用于创建这些并行步骤的部分代码。为此,我觉得我需要关闭这些内容。

但是,currying似乎无法正常工作。引用闭包内部的循环变量(valueCopy)做正确的事,但是currying并没有达到我的期望。

我做错什么了吗?是否还不支持?有没有解决方法?这可能是詹金斯管道中的错误吗?

希望任何人都有线索,为什么这不起作用和/或如何使其起作用。

Jenkins:截至2017/01/19的LTS(2.32.1)和最新的插件更新。

回答:

执行管道脚本:

def echoSome(val) {

echo val

}

def buildClosures() {

def someList = ["1", "2", "3"]

def closures = [:]

for (value in someList) {

final valueCopy = value

closures[value] = {val ->

echo valueCopy.toString()

echo val.toString()

}.curry(value)

}

closures

}

parallel buildClosures()

输出:

[Pipeline] parallel

[Pipeline] [1] { (Branch: 1)

[Pipeline] [2] { (Branch: 2)

[Pipeline] [3] { (Branch: 3)

[Pipeline] [1] echo

[1] 1

[Pipeline] [1] echo

[1] 3

[Pipeline] [1] }

[Pipeline] [2] echo

[2] 2

[Pipeline] [2] echo

[2] 3

[Pipeline] [2] }

[Pipeline] [3] echo

[3] 3

[Pipeline] [3] echo

[3] 3

[Pipeline] [3] }

[Pipeline] // parallel

[Pipeline] End of Pipeline

Finished: SUCCESS

预期产量:

[Pipeline] parallel

[Pipeline] [1] { (Branch: 1)

[Pipeline] [2] { (Branch: 2)

[Pipeline] [3] { (Branch: 3)

[Pipeline] [1] echo

[1] 1

[Pipeline] [1] echo

[1] 1

[Pipeline] [1] }

[Pipeline] [2] echo

[2] 2

[Pipeline] [2] echo

[2] 2

[Pipeline] [2] }

[Pipeline] [3] echo

[3] 3

[Pipeline] [3] echo

[3] 3

[Pipeline] [3] }

[Pipeline] // parallel

[Pipeline] End of Pipeline

Finished: SUCCESS

回答:

发现使用最新的Pipeline:Groovy插件(2.40)至少与Jenkins版本2.60.3结合使用(尽管插件主页指出您至少需要Jenkins 2.73.3才有效),所有功能均按预期工作。

以上是 Currying groovy CPS封闭以并行执行 的全部内容, 来源链接: utcz.com/qa/398718.html

回到顶部