2016-07-13 60 views
0

也许有人可以帮助我。 我想在Jenkins中为某些项目一次运行一个构建,即使队列中有更多构建。我知道我可以限制执行程序的数量,但它会影响所有项目,并且此解决方案不适合我。我尝试使用Throttle Concurrent Builds插件,因为它是在这种情况下推荐的,但它不起作用,我不知道为什么。在Jenkins连续运行作业

在我安装这个插件之前,所有版本都能正常运行。当我安装了它(刚刚安装,我没有对配置进行任何修改)的版本进入队列并且永远不会启动(我使用2个executors,两者都处于空闲状态)。我验证了我的节点一切正常,在线,执行者数量等于2,并且尽可能地利用它。免费空间没有问题。越来越多的执行者也无济于事。

然后我试着配置油门并发构建(就像一个实验)。我进入了'配置系统',并添加了'最大总并发版本'和'最大并发版本每个节点'设置为1的'多项目调节器类别'。我去了我的一个项目并选择'节流并发版本'选项。接下来,我选择“将此项目作为一个或多个类别的一部分进行调整”,并选中刚刚创建的“多项目调速分类”复选框。因此,当我点击“立即生成”为我的项目没有发生任何事情。它甚至没有去建立队列。

禁用油门并发构建插件使我的项目再次构建。

我有2个问题:

  1. 为什么当我有节流并行构建启用插件(建立去排队,并且永远不会启动或不会出现在所有)我不能建任何项目?

  2. 是否有任何其他方式来强制某些作业按顺序运行(除了更改执行数量以外)?我有一些执行Windows批处理命令的项目。无论我计划建造多少个项目(项目数量及其组合是可变的),它们都必须始终单独运行。

谢谢你在前进, 安娜

PS。我刚刚开始与詹金斯的冒险,所以请理解:)

+0

这里有一些很好的讨论:http://stackoverflow.com/questions/11158382/jenkins-to-not-allow-the-same-job-to-run-concurrently-on-the-same-node – Amit

+0

你是否只需要在任何时候对每个工作进行一次实例?或者你的意思是你有一份你想要“顺序”运行的工作清单 - JobA,JobB,JobC等等? – BitwiseMan

+0

我只记得一个插件构建流程允许您定义的工作序列,工作流程顺序或并行:https://wiki.jenkins-ci.org/display/JENKINS/Build+Flow+Plugin –

回答

2

如果你只想让詹金斯运行任何工作的一个实例,你不需要任何特殊的插件。只需确保该作业的“执行并发构建如果需要”复选框未选中。

作为帮助该选项的状态:

当这个选项被选中,多建立此项目可以并行执行的。

默认情况下,一次只执行一个项目的单个构建 - 任何其他开始构建该项目的请求都将保留在构建队列中,直到第一个构建完成。 这是一个安全的默认设置,因为项目通常需要对某些资源(如数据库或硬件)的独占访问。

但是启用此选项后,如果有足够的可用的构建执行程序可以处理此项目,那么此项目的多个构建将并行进行。如果在任何时候没有足够的可用执行程序,则任何进一步的构建请求都将像平常一样保持在构建队列中。

这个简单的“一个或多个”并发模型足以满足广泛的用途,包括您所描述的一个。

如果您需要更详细的控制时,才应切换到Throttle Concurrent Builds Plugin。例如,“每个代理最多允许2个实例允许7个并发实例(无论可用执行程序的数量是多少)”。

+0

首先,谢谢你的回答:)可能我的描述不准确。对于我的所有项目,都会取消选中'如果需要执行并发构建'复选框。 我有一些执行windows批处理命令的自由式项目(让我们将它们命名为projectA和projectB),并且我想按顺序构建它们。正当我安排例如首先10个项目在同一时间开始执行(执行人数设置为2)。对于其他项目可以,但是当没有其他项目构建时,应该分别构建projectA或projectB。 – Anna

0

我找到了原因节流并行构建插件没有工作。我的詹金斯版本真的很老。当我升级到2.13项目开始以预期的方式建立,这个插件正是我所需要的。谢谢你的帮助!

1

以下插件詹金斯,并会做你要找的内容:

https://wiki.jenkins-ci.org/display/JENKINS/Multijob+Plugin

创建“多椎”项目,该项目允许您定义“阶段”为其打造。

许多“相”可以设置为多椎项目和各阶段的一部分“包含”一个或多个“其他”詹金斯的工作。 MultiJob项目运行时,阶段将按顺序运行。

因此,为了按顺序运行n个工件,添加N步到你的多椎项目,然后一个作业添加到每个阶段。

注:对于每一个指示“并行运行”或“连续运行”阶段,这是我走上意味着它会运行包含在相位顺序或并行作业的设置。但是,当我设置“顺序运行”时,这些作业似乎仍然平行运行。 (我需要进一步调查这个设置)。

+0

请不要只是发布一些工具或库作为答案。至少在答案中演示[它如何解决问题](http://meta.stackoverflow.com/a/251605)。 –

+0

@BaummitAugen - 我已经采纳了你的意见,并提供了关于插件如何工作的更多信息。 我在工作时内部使用了插件,并且可以证明它提供了OP所需的内容。 –

0

我使用MultiJob插件通过添加构建步骤来完成此操作。

我以前触发/呼叫建立在其他项目,进入了项目的名称先做,然后选择阻塞,直到触发项目完成他们建立。我为每个想要按顺序执行的项目添加了构建步骤。

相关问题