首页 > 解决方案 > Jenkins - 如何处理使用有限资源池的并发作业?

问题描述

我正在努力改进一些工作中的测试程序,因为我不是 Jenkins 专家,所以希望你们能指出我正确的方向?我们现在的情况是这样的。我们有大量定期运行的 E2E 测试。这些测试依赖于有限资源池(用于运行每个测试的 AWS VM)。我们有 2 个测试套件。一个全面的回归,在其峰值时总共消耗了约 80% 的资源,而更轻量级的烟雾运行仅使用了 15% 左右。

现在我正在使用可锁定资源插件。当该Test Run步骤到来时,它会检查您是否正在运行回归,如果是,它将请求单个锁。如果它可用,那么一切都很好,如果没有,它将等到它可用后再继续。这使我可以确保在同一点上不会有超过 1 个回归运行,但它有很多差距。就像一个回归可能正在运行,并且可能会触发几个冒烟运行,这将耗尽资源池。

我想在最佳情况下完成的是某种条件规则,这些规则将根据以下内容决定测试执行步骤是否可以继续:

詹金斯管道会不会有类似的事情发生?在这种情况下,我将声明性管道与我随着时间的推移放在一起的一堆帮助 groovy 代码一起使用。我的第一个想法是看看是否有办法检查可锁定资源是否可用(但实际上还没有请求它),然后通过一堆 if/then/else 来设置逻辑。但是我再次不确定是否有办法检查可锁定的资源状态或已经请求了多少种。

老实说,这种复杂的事情可能超出了 Jenkins 应该处理的范围,但我不确定,并且认为在这里询问将是一个好的开始。

谢谢!。

标签: jenkins

解决方案


使用构建单个作业的步骤创建声明性管道。不要让人们临时运行作业,或者当更改被推送到存储库时,并强制构建计划。

这如何解决您的问题:

只能同时运行 1 个回归。

将所有这些作业按顺序放入声明性管道中。

如果正在运行回归,则只允许并行运行 1 个烟雾运行。

在回归构建之后按顺序放置与回归测试相关的冒烟测试,但在下一个回归构建之前并行运行冒烟测试。

如果没有运行回归,则最多允许 5 或 6 次冒烟测试。

见上

如果 2 个或更多冒烟测试正在运行,则不允许启动回归。

如果您按顺序运行,它将永远不会发生。

这是一张丑陋的图片,解释了我在说什么。 在此处输入图像描述

你可以手动创建管道,也可以用蓝海的酷炫给你一个图形界面,让步骤按顺序或并行排列: https ://jenkins.io/doc/tutorials/create-a-pipeline-in-蓝海/

不利的一面是,如果其中一个作业失败,它将停止构建,但如果作业高度相关,这不一定是坏事。


推荐阅读