如何获得Jenkins代理上所有执行程序的独占访问权限?

时间:2018-05-11 16:49:30

标签: jenkins

我想最大化我的代理商使用率,并且我有各种类型的代理商和各种工作需求。

我们有两种代理商:

  • 虚拟机,只有一个执行程序
  • 物理机器,有五个执行器

我们有三种一般类型的工作:

  • 与桌面交互的自动用户界面测试
  • 产品性能(时间)测试
  • 功能回归测试

以下是标准:

  • 性能测试必须具有对物理代理的独占访问权
  • UI测试具有时间敏感性,因此他们也应该对其上运行的任何代理进行独占访问
  • 功能回归测试可以在任意数量的执行者身上的任何地方运行

我可以利用"工作重量"插件,它使特定的作业构建占用特定数量的节点。我也可以使用" Throttle Concurrent Builds"插件,可以限制每个节点并发运行的构建数。但是,我无法找到有效的组合。

示例1:

  • 每个代理程序限制为一个构建的UI测试
  • 工作重量为5的性能测试

问题1:

  • 功能测试可以在与UI测试相同的代理上运行。

示例2:

  • UI测试和功能测试限制为每个代理一个构建(共享一个限制类别)
  • 性能测试,重量为5

问题2:

  • 功能测试现在仅限于每个代理程序一个执行程序,因此不能最大化物理代理程序

示例3:

  • 将性能和UI测试设置为工作重量为五

问题3:

  • UI测试将不再使用虚拟机代理。

如果"工作重量"插件有一个" Max"设置(只使用代理上的所有执行程序),这将使这个问题消失。然后,我可以将UI和性能测试设置为具有" Max"并完成它。

有关如何使这些标准与Jenkins及其插件的当前限制相结合的任何建议?

1 个答案:

答案 0 :(得分:0)

最后,这就是我们所做的。所有代理人各获得五名执行人。

作业权重稍有改变:

  • 功能测试给出一个重量
  • 性能测试,重量为5
  • 给予权重为五的UI测试

然后,我们使用了油门插件并创建了两个根据标签进行节流的类别:

  • 1_per_any_agent限制与该类别关联的所有作业,以便一次只在代理上运行一个作业。
  • 1_per_vm_agent限制与该类别关联的所有作业,一次只能在VM代理上运行一个作业,但对于物理代理不受限制。

我们将1_per_any_agent限制类别应用于性能和UI测试,并将1_per_vm_agent限制类别应用于功能测试。

现在,功能测试可以在物理代理上同时运行五个构建,但仅限于虚拟代理上的一个构建。当性能或UI测试运行时,它们不会运行,因为这些作业需要5的权重。