我目前正在研究如何最好地使用Jenkins工作流脚本中的并行步骤,我只是想澄清我对这是如何工作的理解。
parallel(firstTask: {
node {
// Do some stuff
}
}, secondTask: {
node {
// Do some other stuff
}
})
在这种情况下,每个任务(因为它包含在一个节点中)是否都使用一个执行器?如果我没有节点块,任务还会并发运行吗?
假设最高效的解决方案是在一个单独的从属节点上运行每个节点?我目前正在使用具有两个执行器的单个主箱的设置(尽管因为它是一个四核机器,我认为我可以增加这个),我只是试图判断利用并行步骤的最佳方法,或者确实在这个设置中它是否值得担心。
如果我没有节点块,任务还会并发运行吗?
是的,这:
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")
如果你有两个执行器,那么你可以并行运行两个作业。当您希望并行运行更多作业时,您需要增加执行器数量(通过节点配置)。对于少数作业,这可能是可行的,但您可以很快引入一堆链接的作业定义。
这就是为什么你也可以看看Multijob插件。
它允许定义"阶段"。阶段按顺序执行。但是每个"阶段"可以并行执行许多作业。这允许以下工作流程:"处理阶段1的并行作业(直到全部完成),然后继续进行阶段2"。
- 问题https://issues.jenkins - ci.org/browse/jenkins - 12480
- 插件https://wiki.jenkins-ci.org/display/JENKINS/Multijob +插件
- Github https://github.com/jenkinsci/tikal-multijob-plugin
假设最高效的解决方案是在一个单独的从属节点上运行每个节点?
这个问题不容易回答。这取决于项目。
当开发人员想要快速获得构建工件时,通常使用面向性能的Jenkins设置。
当达到定义的最大工作负载以减少总构建时间时,我会尝试使用一个机器并引入下一个从属机器。换句话说:你可以密切关注CPU利用率并测量/比较构建时间,同时尝试不同的Jenkins设置,这可能是A/B测试。
试试这个,链接
还可以通过传递参数来运行并行作业。
的例子:
parallel
(
{build("job 1", param1:"value1",param2:"value2")}
{build("job 2",param1:"value1")}
)