2011-10-25 43 views
9

我有一个任务在基于标签的n机器上执行。如果出于某种原因,其中一些机器处于脱机状态,我不希望Jenkins将它们放入队列中,并等待它们在线。我想让詹金斯在剩下的机器上执行这项工作并完成工作。有什么建议么?Jenkins:如果节点处于脱机状态,则跳过

编辑1: 我意识到,这份工作被绑定到所有的机器: Screenshot

我不得不这样做,因为我需要这个工作在所有计算机上同时运行。所以,我的问题依然如此。如果其中一些机器处于脱机状态,我想跳过这些工作,而不是等待/排队。

编辑2: 詹金斯CLI有一个清除队列命令。这段时间看起来很有希望。

+0

我在Jenkins上打开了一个功能请求,允许Matrix Project跳过脱机节点:[https://issues.jenkins-ci.org/browse/JENKINS-29380](https://issues.jenkins-ci.org/浏览/ JENKINS-29380)。如果这就是你需要的,请注意它。 –

回答

0

如果任务的连接方式只能在特定节点上运行,它将无法在其他机器上运行。

如果不是这种情况,那么任务将在任何可用的执行程序上运行,这是默认行为。

因此,为了检查任务是否可以在其他节点上运行,请转到作业>配置并检查以下设置。

enter image description here

如果被禁用的任务,那么你将需要检查他们接受这可以在节点的设置中找到任何作业的节点。它应该如下所示。

enter image description here

古德勒克。

+0

对不起,在阅读你的答案后,我仔细检查了配置。我实际上将所有机器都绑定到这个工作上,强制它在所有机器上同时运行。 – publicRavi

+0

@publicRavi如果这有助于将其标记为正确答案,以便其他人知道。 – myusuf3

+0

我不明白这是如何解决在离线节点的Axis上卡住的Matrix项目的问题(在节点重新联机之前一直在队列中等待)? –

7

的罚款解决方案可以使用GroovyAxis Plugin实现和下面的脚本,将返回的在线奴隶只有轴列表:

def axis = [] 
for (slave in hudson.model.Hudson.instance.slaves) { 
if (slave.getComputer().isOnline().toString() == "true") { 
    axis += slave.name 
} 
} 
return axis 

UPDATE: 由于詹金斯2.0节点API有被改变了,所以用Node.toComputer()代替: http://javadoc.jenkins-ci.org/hudson/model/Node.html#toComputer%28%29

def axis = [] 
for (slave in jenkins.model.Jenkins.instance.getNodes()) { 
if (slave.toComputer().isOnline()) { 
    axis += slave.getDisplayName() 
} 
} 
return axis 
+0

请注意,此列表将不包含主人。如果您想要添加它,例如用'def axis = ['master']'替换'def axis = []''。 –

+0

因为这是在Groovy中运行的,所以你也可以说'jenkins.model.Jenkins.instance.nodes' – jpyams

相关问题