2

简而言之

如何使一个作业请求只分发给一个slave并执行;而如果有其他从属空闲,则后续作业请求将不会排队。

细节

有一个使用 Jenkins 作业作为入口的服务,用户可以点击 提交请求Build Job。一次只能在一个从站上执行一项作业。

为了提高吞吐量,我添加了更多的 slave 来执行这个作业。但是,我发现了以下问题:

  1. 使用多配置作业,在所有从属服务器上产生相同的作业,但我只希望一个从属执行作业(一个请求),因此其他从属可以执行其他作业(请求)。

  2. 使用NodeLable 插件,但是当一个作业正在执行时,即使有其他从属空闲,后续作业也会排队。

因为入口作业会触发下游作业,所以服务请求的slave不会改变,在之前的所有下游作业完成之前,可以在同一个slave上触发另一个入口作业。

有什么办法让入口作业选择一个随机从属来执行作业,满足一个用户的请求;然后选择另一个从属设备(如果有空闲)来执行另一个作业,以满足另一个用户的请求。如果所有从站都忙,则即将到来的请求将排队等待,直到从站再次空闲。

谢谢!

我选择了什么

当不同的作业相互依赖并具有共享状态时,就会出现问题。因此,为了避免未来的挫败感,我将所有相关的工作合并为一个。所以没有更多的共享状态,问题就消失了。

4

3 回答 3

1

@Xin Huang - 在“限制此项目可以运行的位置”部分添加一个条目“slave1 || slave2”。这将确保您的工作在提到的任何从属设备上运行。

于 2015-03-10T03:00:20.153 回答
0

Multi 配置是 Jenkins 的标准配置,允许您使用不同的配置(例如不同的标签)运行相同的作业。您可以通过创建新作业并选择“构建多配置项目”选项来实现此目的

或者,有一个构建管道 作业允许您并行运行作业阶段

这两种解决方案都受可用执行器数量的限制

于 2013-09-16T03:45:46.673 回答
0

Parameterized Trigger Plugin允许一个作业触发另一个作业并强制它在与自己的运行相同的从属设备上执行。

于 2015-10-27T17:11:41.310 回答