Jenkins Pipeline和大量并行步骤

时间:2017-05-15 09:36:03

标签: jenkins jenkins-pipeline jenkins-blueocean

我已经在整个互联网上搜索了2个星期,在freenode IRC和Jenkins用户组邮件列表中询问了但是没有回答所以我在这里,你是我最后的希望(没有压力)

我有一个Jenkins脚本管道,它生成数百个并行分支,必须在数百个从属节点上同时运行。目前,Jenkins BlueOcean用户界面看起来并不适合。如果无法显示所有步骤,我们就会达到一个目的。

我需要提供某种背景来让您了解我们的需求:我们公司有一个庞大的项目,拥有数千个Behat / Selenium,如果顺序完成,现在需要30多小时才能运行。我们之前实现了一个基本的解决方案,我们使用排队系统(RabbitMq)来存储运行测试的所有测试和消费者,方法是从Jenkins下载源代码并将工件上传回Jenkins,但这不是可扩展的Jenkins本地奴隶并且它不够可维护(例如,我们不能从实时输出日志和使用统计中受益)。

我知道有一个未解决的问题在这里描述问题:https://issues.jenkins-ci.org/browse/JENKINS-41205但是,基本上,我需要在下周工作的解决方法(我们的发展团队正在等待这个新管道很长一段时间)

我们的pippeline目前看起来像这样:

Build --- Unit Tests --- Integration Tests --- Functional Tests ---
                |                |                    |
              tool A            suite A        matrix-A-A-batch 0
              tool B            suite B        matrix-A-A-batch 1
              tool C                           matrix-A-A-batch 2
                                               matrix-A-A-batch 3
                                                     ....
                                              "Unable to display more"

你可以在这里找到我们的Jenkins文件的完整版本:https://github.com/willy-ahva/pim-community-dev/blob/086e4ed48ef1a3d880ca16b6f5572f350d26eb03/Jenkinsfile(它可能看起来很复杂,但基本上,真正的问题是"功能测试"阶段)

我的问题是:

  1. 我使用并行好方法吗?
  2. 它只是一个Jenkins / BlueOcean问题,我应该为我链接的问题做出贡献吗? (如果是,怎么样?我根本不是Java开发者)
  3. 我应该尝试使用MultiJob并并行化作业而不是步骤吗?
  4. 我可以使用除平行以外的其他工具吗? (某种叉子或其他什么)?
  5. 非常感谢你的帮助。我喜欢Jenkins在Pipeline和BlueOcean UI中的成就,我真的想让它在我们的团队中发挥作用。

1 个答案:

答案 0 :(得分:1)

  1. 这可能是执行并行任务的一种糟糕方式。我会将每个并行映射条目视为工作者,并将您的测试放入队列/堆栈/数据结构中。每个工作线程都可以根据需要弹出队列,然后你不会坐在那里排队一百万个任务。您必须对日志记录更加小心,以便明显哪个测试失败,但这不应该太难。
  2. 它可能不容易修复,因为它与其他任何东西一样都是UI设计问题。我建议你给它戳一下!谁知道,也许解决方案会为你点击?
  3. 可能不是。在我看来,这使得这个更加混乱
  4. 并行是分叉的选择。
  5. 如果您真的想继续这样做,但又不希望用户界面如此奇怪,您可以停止将每个测试定义为一个阶段。当一个人失败时会失败,但是UI会更快乐。