Jenkins 工作流并行步骤和 Jenkins 配置
Jenkins Workflow Parallel Step and Jenkins Configuration
我目前正在研究如何最好地使用 Jenkins Workflow 脚本中的并行步骤,并且只是想澄清我对它的工作原理的理解。
parallel(firstTask: {
node {
// Do some stuff
}
}, secondTask: {
node {
// Do some other stuff
}
})
在这种情况下,每个任务都会因为它包含在一个节点中而分别使用一个执行器吗?如果我没有节点块,任务还会 运行 并发吗?
大概最高效的解决方案是 运行 每个节点在一个单独的从站上?
我目前正在使用一个带有两个执行器的主控盒的设置(尽管因为它是一个四核机器,我认为我可以增加它)我只是想判断最好的方法使用并行步骤或者实际上是否在此设置中不值得担心。
If I didn't have the node blocks would the task still run concurrently?
是的,这个:
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 插件的原因。
它允许定义"Phases"。阶段按顺序执行。
但是每个 "Phase" 可以并行执行许多作业。
这允许以下工作流程:"process parallel jobs of Phase 1 (until all finished), then proceed to Phase 2".
- 问题https://issues.jenkins-ci.org/browse/JENKINS-12480
- 插件https://wiki.jenkins-ci.org/display/JENKINS/Multijob+Plugin
- Github https://github.com/jenkinsci/tikal-multijob-plugin
Presumably the most performant solution is to run each node on a separate slave?
这不容易回答。这取决于项目。
当开发人员想要快速获得构建工件时,通常会使用以性能为导向的 Jenkins 设置。
我会尝试使用一个盒子并引入下一个从机,当达到定义的最大工作负载时,目标是减少总构建时间。换句话说:您可以关注 CPU 利用率和 measure/compare 构建时间,同时尝试不同的 Jenkins 设置,它可能是 A/B 测试。
试试这个,
link
您还可以 运行 使用传递参数并行作业。
示例:
parallel
(
{build("job 1", param1:"value1",param2:"value2")}
{build("job 2",param1:"value1")}
)
我目前正在研究如何最好地使用 Jenkins Workflow 脚本中的并行步骤,并且只是想澄清我对它的工作原理的理解。
parallel(firstTask: {
node {
// Do some stuff
}
}, secondTask: {
node {
// Do some other stuff
}
})
在这种情况下,每个任务都会因为它包含在一个节点中而分别使用一个执行器吗?如果我没有节点块,任务还会 运行 并发吗?
大概最高效的解决方案是 运行 每个节点在一个单独的从站上?
我目前正在使用一个带有两个执行器的主控盒的设置(尽管因为它是一个四核机器,我认为我可以增加它)我只是想判断最好的方法使用并行步骤或者实际上是否在此设置中不值得担心。
If I didn't have the node blocks would the task still run concurrently?
是的,这个:
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 插件的原因。
它允许定义"Phases"。阶段按顺序执行。 但是每个 "Phase" 可以并行执行许多作业。 这允许以下工作流程:"process parallel jobs of Phase 1 (until all finished), then proceed to Phase 2".
- 问题https://issues.jenkins-ci.org/browse/JENKINS-12480
- 插件https://wiki.jenkins-ci.org/display/JENKINS/Multijob+Plugin
- Github https://github.com/jenkinsci/tikal-multijob-plugin
Presumably the most performant solution is to run each node on a separate slave?
这不容易回答。这取决于项目。
当开发人员想要快速获得构建工件时,通常会使用以性能为导向的 Jenkins 设置。
我会尝试使用一个盒子并引入下一个从机,当达到定义的最大工作负载时,目标是减少总构建时间。换句话说:您可以关注 CPU 利用率和 measure/compare 构建时间,同时尝试不同的 Jenkins 设置,它可能是 A/B 测试。
试试这个, link
您还可以 运行 使用传递参数并行作业。
示例:
parallel
(
{build("job 1", param1:"value1",param2:"value2")}
{build("job 2",param1:"value1")}
)