【问题标题】:How to parallel job execution of different requests on different slaves under same label如何在相同标签下在不同从站上并行执行不同请求的作业
【发布时间】:2015-10-28 01:11:41
【问题描述】:

简而言之

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

详情

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

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

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

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

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

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

谢谢!

我选择了什么

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

【问题讨论】:

    标签: jenkins


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      另外还有一个build pipeline 作业,它允许您并行运行作业的各个阶段

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

      【讨论】:

      • 我想通过用户在不同机器上并行单击“构建作业”来运行不同的请求,即一台机器运行请求#1,而另一台运行请求#2。如何使用多配置作业来做到这一点?我添加了一个从轴,但新触发的作业分布在所有从轴上,而不仅仅是一个。
      • 我看到您希望在参数化节点上运行相同的作业,而不是针对所有标签的作业。这可能会有所帮助 - 我没有使用它,但它看起来是一个不错的候选人 wiki.jenkins-ci.org/display/JENKINS/NodeLabel+Parameter+Plugin。所以你会在开始工作时选择你的节点/标签
      • 感谢您的回复!我试过这个插件,它可以工作。现在我有了工作流程,但是添加了更多从属来执行任务,我需要一个入口作业来进行负载平衡。是否有任何插件或作业配置可以做到这一点?
      • 这可能值得一试。 wiki.jenkins-ci.org/display/JENKINS/Least+Load+Plugin。默认情况下,Jenkins 可能会尝试在运行它的最后一个上运行构建。您还可以减少从属服务器上的执行程序数量,以更好地分散负载。我想詹金斯假设盒子有能力,如果它有备用执行者这是一个合理的假设
      • 再次感谢,很抱歉没有让我的问题更清楚。我已经尝试过 NodeLabel,似乎 Jenkins 不允许一项作业同时在多个从属服务器上执行。所以我认为即使我有奴隶空闲,改变负载平衡算法仍然会阻止整个工作。
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-04-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多