我目前正在研究如何在Jenkins Workflow脚本中最好地使用并行步骤,并且只是想澄清我对其工作原理的理解。
parallel(firstTask: {
node {
// Do some stuff
}
}, secondTask: {
node {
// Do some other stuff
}
})
在这种情况下会是每个任务,因为它包含在一个节点中每个都使用一个执行器?如果我没有节点块,那么任务仍会同时运行吗?
大概最有效的解决方案是在一个单独的奴隶上运行每个节点吗?
我目前正在使用带有两个执行器的单个主盒的设置(虽然因为它是一个四核机器,我想我可以增加它)而我只是想判断最好的利用方式平行的步骤,或者确实在这个设置中是否值得担心。
答案 0 :(得分:4)
如果我没有节点块,那么任务仍会同时运行吗?
是的,这个:
parallel(firstTask: {
// Do some stuff
}, secondTask: {
// Do some other stuff
})
将运行非顺序。
例如使用 Build Flow 插件:
build("job 1")
parallel
(
{build("job 2")}
{build("job 3")}
)
build("job 4")
如果您有2个执行程序,则可以并行运行2个作业。 如果要并行运行更多作业,则需要增加执行程序编号(通过节点配置)。 对于少数工作,这可能会有用,但您可以快速引入一堆链式工作定义。
这就是为什么你还可以查看 Multijob 插件。
它允许定义“阶段”。阶段按顺序执行。 但是每个“阶段”可以并行执行许多工作。 这允许以下工作流程:“处理阶段1的并行作业(直到全部完成),然后进入阶段2”。
大概最有效的解决方案是在一个单独的奴隶上运行每个节点吗?
这不容易回答。这取决于项目。
当开发人员希望快速获得构建工件时,通常会使用面向性能的Jenkins设置。
我会尝试使用一个框并引入下一个slave,当达到定义的最大工作负载时,目标是减少总构建时间。换句话说:您可以关注CPU利用率并测量/比较构建时间,同时尝试不同的Jenkins设置,可能是A / B测试。
答案 1 :(得分:0)
试试这个, link
您还可以使用传递参数来运行并行作业。
示例:
parallel
(
{build("job 1", param1:"value1",param2:"value2")}
{build("job 2",param1:"value1")}
)