4

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

我有一个 Jenkins 脚本管道,它生成数百个并行分支,这些分支必须在数百个从节点上同时运行。目前看来 Jenkins BlueOcean 用户界面不适合这种情况。我们达到了一个点,所有步骤都无法显示。

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

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

我们的管道现在看起来像这样:

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"

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

我的问题是:

  1. 我使用并行的好方法吗?
  2. 这只是一个 Jenkins/BlueOcean 问题,我应该为我链接的问题做出贡献吗?(如果是,如何?我根本不是 Java 开发人员)
  3. 我应该尝试使用 MultiJob 并并行化作业而不是步骤吗?
  4. 除了并行之外,还有其他工具可以使用吗?(某种叉子或其他什么)?

非常感谢你的帮助。我喜欢 Jenkins 在 Pipeline 和 BlueOcean UI 中的表现,我真的很想让它在我们的团队中发挥作用。

4

1 回答 1

1
  1. 这可能是执行并行任务的糟糕方法。相反,我会将每个并行映射条目视为工作人员,并将您的测试放入队列/堆栈/数据结构中。每个工作线程都可以根据需要从队列中弹出,然后您就不会坐在那里排队等待一百万个任务。您必须更加小心您的日志记录,以便清楚哪个测试失败,但这不应该太难。
  2. 这可能不是一件容易解决的事情,因为它与其他任何事情一样都是 UI 设计问题。我建议你给它一个戳!谁知道,也许一个解决方案会为您点击?
  3. 可能不是。在我看来,这使这更加混乱
  4. 并行是您分叉的选择。

如果你真的想继续这样做,但又不想 UI 太奇怪,你可以停止将每个测试定义为一个阶段。当一个失败时,它会不太清楚是什么失败了,但用户界面应该更快乐。

于 2017-05-15T14:23:23.840 回答