Jenkins-如何处理使用有限资源池的并发作业?

时间:2019-02-28 17:18:36

标签: jenkins

我正在尝试改进一些工作中的测试程序,由于我不是詹金斯专家,所以希望你们能为我指明正确的方向吗? 我们目前的情况就是这样。我们有大量定期运行的E2E测试套件。这些测试依赖于有限的资源池(用于运行每个测试的AWS VM)。我们有2个测试套件。全面的回归分析在峰值时消耗了约80%的资源,而运行更轻量的烟雾仅使用了15%左右。

现在我正在使用lockable resources plugin。当Test Run步骤到来时,它将检查您是否正在运行回归,如果正在运行,则它将请求单次锁定。如果可用,则一切正常,否则,它将一直等到可用之前再继续。这使我可以确保在同一点上运行的回归不会超过1个,但是有很多差距。像可能正在运行回归,并可能触发多次冒烟,这将耗尽资源池。

在最理想的情况下,我想完成的就是一些条件规则,这些条件规则将基于以下类似情况来决定测试执行步骤是否可以继续进行:

  • 一次只能运行1个回归。
  • 如果正在运行回归,则仅允许运行1次烟雾运行 平行。
  • 如果没有运行回归,则最多允许进行5或6次烟雾测试。
  • 如果正在运行2个或更多烟雾测试,则不允许回归 发射。

Jenkins管道有可能提供类似的服务吗?在这种情况下,我将使用声明性管道以及一段时间以来放在一起的一堆帮助程序代码。我的第一个想法是查看是否有一种方法可以检查可锁定资源是否可用(但尚未实际请求),然后通过一堆if / then / else设置逻辑。但是同样,我不确定是否有办法检查可锁定资源状态或已经请求了多少种资源。

老实说,这种复杂的事情可能不在詹金斯应该处理的范围之内,但我不确定并想知道这里是否是一个好的开始。

谢谢!。

2 个答案:

答案 0 :(得分:0)

使用建立单个作业的步骤创建声明性管道。不允许人们临时运行作业,或在将更改推送到存储库时强制执行构建计划。

这如何解决您的问题:

一次只能运行1个回归。

将所有这些作业依次放在声明性管道中。

如果正在运行回归,则只能并行运行1次烟雾运行。

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

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

查看上一个

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

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

这是一张丑陋的照片,解释了我在说什么。 enter image description here

您可以手动创建管道,也可以使用凉爽的蓝色海洋为您提供图形界面,以按顺序或并行进行操作: https://jenkins.io/doc/tutorials/create-a-pipeline-in-blue-ocean/

不利之处在于,如果其中一项工作失败,它将停止构建,但是如果这些工作高度相关,那不一定是一件坏事。

答案 1 :(得分:0)

完全忘记更新此内容,但是在阅读并使用lockable resources插件进行了更多尝试之后,我发现您可以在同一标签下拥有多个资源,并且每当特定作业开始时就请求设定数量。

我定义了5个资源,并设置Jenkinsfile来检查是否正在使用参数regression运行测试套件。如果您运行的是完全回归,它将尝试请求4个锁,而烟雾测试仅尝试请求1。这样,当没有足够的锁可用时,作业将等待,直到有足够的锁可用或超时到期为止。

这是我的Jenkinsfile中的摘录:

        stage('Test') {
            steps {
                lock(resource: null, label: 'server-farm-tokens', quantity: getQuantityBySuiteType()) {
                  <<whatever I do to run my tests here>>
                }
            }

resource必须为空,因为詹金的声明性管道中存在错误。如果您使用脚本化脚本,则可以忽略该参数。