假设我有两个类似的简单管道脚本,每个脚本基本上都是这样的:
stage('only stage') {
node {
// first step
}
node {
// second step
}
}
让我们调用我的第一个脚本A和B中的步骤,以及我类似的第二个脚本C和D中的步骤。
我从测试中理解它的方式,当我为这些脚本启动构建时,Jenkins似乎只从每个脚本排队第一步,然后仅在第一步完成时排队下一步。因此,它似乎有利于管道中的早期运行步骤。考虑这个映射我已经采取的行动的例子=>生成的Jenkins队列步骤:
启动脚本1 => [A]
启动脚本2 => [A,C]
A starts => [C]
A完成=> [C,B]
C starts => [B]
...等
我的问题是:在最后一步我已经描述了C开始的地方,是否有一种方法可以优先考虑B开始,因为它是构建中的后续步骤(对比C是一个第一步)?我的动机是,我宁愿让一个构建完全完成,而不是几个构建同时进行/部分完成。
通过参数化触发器插件(this question中的详细信息),自由式项目似乎可以实现这一点,但我还没有弄清楚是否有类似的方法来实现这一点使用管道脚本。我已经看过优先排序器插件,它显然最近增加了管道兼容性,但我不明白管道兼容性如何实际工作,因为我无法找到任何关于其使用的示例或文档,我&#39 ;我不确定在我的步骤中硬编码优先级数字是一个理想的解决方案(实际上,脚本比我提供的示例复杂得多,所以我可以看到优先级数字很快变得笨拙和混乱)。还有一些其他优先事项"我找到了基于插件的插件,特别是Accelerated Build Now插件,但它已经多年没有更新,所以它没有管道支持。
到目前为止,我所看到的态度是,在队列形成和需要确定任务优先级的情况下,"just add more slaves"。这在设计决策中是有意义的,但遗憾的是我使用有限的资源并且确实需要一些队列管理,因为我无法添加更多的从站来缓解队列。还有其他人解决了这个问题吗?