【问题标题】:How to trigger multiple jobs at once in Jenkins pipeline?如何在 Jenkins 管道中一次触发多个作业?
【发布时间】:2017-10-18 18:08:29
【问题描述】:

我的 Jenkins 工作层次结构看起来像这样:

Collection/
    ParentJob
    Children/
        Foo
        Bar
        Baz

ParentJob 有一些不同的配置,并且需要为每个配置构建 Children/ 中的作业。这些配置基本上只是检查不同的分支并构建这些分支。此外,ParentJob 的每个配置的一部分必须在子作业运行之前完成。

每个 ParentJob 配置的必要部分完成后,如何触发 Children 中的所有作业?

我的第一个想法是在 ParentJob 的管道中添加一个 build 'Children/*' 步骤,但似乎 Jenkins 在这种情况下不支持通配符。

我可以明确列出所有作业,但这会很乏味(有几十个子作业)并且容易损坏,因为可能会添加或删除子作业。

理想的解决方案是让我只需设置一个新的子作业而不触及其他任何内容,并在下次 ParentJob 运行时自动触发它。

【问题讨论】:

标签: jenkins jenkins-pipeline


【解决方案1】:

您可以获得子作业的列表并使用for 循环来构建它们。我没有对此进行测试,但我看不出它为什么不起作用。

我以类似的方式构建我的工作文件夹,以利用命名约定和基于角色的安全性。

import jenkins.model.*

def childJobNames = Jenkins.instance.getJobNames().findAll { it.contains("Collection/Children") }

for (def childJobName : childJobsNames)
{
    build job: childJobName, parameters: [
        string(name: 'Computer', value: manager.ComputerName)
    ],
    wait: false
}

http://javadoc.jenkins.io/index.html?hudson/model/Hudson.html

【讨论】:

  • 这似乎可以解决问题。我暂时不会接受它,以防出现其他可能不需要那么多权限的选项,但现在,谢谢你并 +1!
【解决方案2】:

您需要使用 Jenkins 工作流或流水线,然后您可以运行一个阶段,然后并行运行一些阶段,然后是一组顺序阶段,等等。This StackOverflow Question and Answer 似乎是一个很好的参考。

【讨论】:

  • 我不确定。似乎这需要我明确列出 ParentJob 中的所有子作业。
  • 是的,我猜@8bittree 已经使用了 Jenkins Pipelines.. 所以这个答案对我来说毫无意义。
  • 管道会强制您列出脚本中的所有内容,但如果您需要,它会在不同阶段为您提供堆叠控制(并行、顺序)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多