2

我目前正在研究如何最好地在 Jenkins 工作流脚本中使用并行步骤,并且只是想澄清我对它是如何工作的理解。

parallel(firstTask: {
    node {
       // Do some stuff
    }
}, secondTask: {
    node {
        // Do some other stuff
    }
})

在这种情况下,每个任务是否会因为它包含在一个节点中而每个都使用一个执行器?如果我没有节点块,任务是否仍会同时运行?

大概最高效的解决方案是在单独的从属设备上运行每个节点?

我目前正在使用带有两个执行器的单个主盒的设置(尽管由于它是四核机器,我想我可以增加它),我只是想判断利用并行步骤的最佳方法或者实际上是否在这种设置中不值得担心。

4

2 回答 2

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 设置。

当达到定义的最大工作负载以减少总构建时间时,我会尝试使用一个盒子并引入下一个从属。换句话说:您可以关注 CPU 利用率并测量/比较构建时间,同时尝试不同的 Jenkins 设置,这可能是 A/B 测试。

于 2015-10-22T12:54:08.183 回答
0

试试这个, 链接

您还可以使用传递参数运行并行作业。

例子:

   parallel
   (
    {build("job 1", param1:"value1",param2:"value2")}
    {build("job 2",param1:"value1")}
   )
于 2015-10-23T11:24:35.277 回答