我已经在整个互联网上搜索了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"
你可以在这里找到我们的Jenkinsfile的完整版本:https://github.com/willy-ahva/pim-community-dev/blob/086e4ed48ef1a3d880ca16b6f5572f350d26eb03/Jenkinsfile(它可能看起来很复杂,但基本上,真正的问题是“功能测试”阶段)
我的问题是:
>我使用并行的好方法吗?
>它只是一个Jenkins / BlueOcean问题,我应该为我所链接的问题做出贡献吗? (如果是的话,怎么样?我根本不是Java开发者)
>我应该尝试使用MultiJob并并行化作业而不是步骤吗?
>我可以使用除平行以外的其他工具吗? (某种叉子或其他什么)?
非常感谢你的帮助.我喜欢Jenkins在Pipeline和BlueOcean UI中的成就,我真的想让它在我们的团队中发挥作用.
最佳答案 >这可能是执行并行任务的一种糟糕方式.我会将每个并行映射条目视为工作者,并将您的测试放入队列/堆栈/数据结构中.每个工作线程都可以根据需要弹出队列,然后你就不会坐在那里排队一百万个任务.您必须对日志记录更加小心,以便明显哪个测试失败,但这不应该太难.
>它可能不容易修复,因为它与其他任何东西一样都是UI设计问题.我建议你给它戳一下!谁知道,也许一个解决方案会为你点击?
>可能不是.在我看来,这使得这更加混乱
>平行是分叉的选择.
如果你真的想继续这样做,但不希望UI如此奇怪,你可以停止将每个测试定义为一个阶段.当一个失败时会失败,但是UI应该更快乐.