Jenkins工作流并行步骤和Jenkins配置



我目前正在研究如何最好地使用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")}
   )

最新更新