Jenkins-使用并行阶段运行并行构建,每个节点/代理一个

时间:2019-02-17 10:51:38

标签: concurrency parallel-processing jenkins-pipeline

我有并行步骤的工作,该步骤会在进行合并投票之前检查请求请求。可以这样说:

  1. GIT步骤(拉特定的提交)
  2. (在主目录中) 2a。 'npm install'步骤 2b。 “ npm运行前端测试”
  3. (在/ simulator目录中) 3a。 'pip install -r要求' 3b。 '运行python测试。
  4. 进行投票,并以宽松的状态进行通知

2和3正在并行运行。

我的节点分别标记为brix2和brix3,它们的共同标记为brix。每个都有4个执行者。

我想要那个

  1. 第一个作业运行时,它完全在brix2上运行-两个并行步骤都应使用2个brix2执行程序。
  2. 当第二项作业正在运行且brix2忙时,需要使用brix3-与上述相同,对2个执行器进行并行处理
  3. 当3个作业正在运行并且brix2和brix3忙时,它将进入队列

我尝试过的事情:

  • 当我使用通用标签时,第一个作业同时运行 brix2和brix3。
  • 如果我启用“不允许运行并发构建”,则它一次只运行一个构建,即使其余1个节点是空闲的,也将其余构建添加到队列中。
  • 如果我使用节流并发构建插件(在2个节点上设置),它将我的并行步骤传播到两个节点,因此pt2在brix2上运行,而pt3在brix3上运行。我想在一台机器,相同的工作空间但不同的文件夹上运行它们。

我还尝试通过检查代理执行器是否闲置来手动在上游作业中分发任务。而且我可以将前两个构建工作分配给brix2和brix3,但是第三个及以后的请求(当b2和b3忙时)应该排入队列,而我不知道该怎么做

我还阅读了关于lock()可以锁定资源的步骤。我很想锁定整个管道上正在运行的节点im上的所有4个执行程序。但这是应该完成的方式吗?

我的意思是,在我看来,我的管道似乎是一种非常普遍的构建内容的方式,而不是需要一些复杂技巧的异国情调。对于这些事情,詹金斯应该有现成的解决方案,所以我感觉自己做的事情不应该做。

1 个答案:

答案 0 :(得分:0)

我认为您的问题是每个节点仅应具有一个执行程序。您可以在一个节点上并行执行步骤-只需对步骤2和3进行操作。作业1将在brix2上启动并并行运行它想要的任何步骤,作业2在brix3上,作业3将需要等待其中之一。节点要在开始之前完成。