Jenkins:如果节点离线,则跳过

时间:2011-10-25 15:29:01

标签: jenkins

我有一个基于标签在n台机器上执行的任务。如果出于某种原因,其中一些机器处于脱机状态,我不希望Jenkins将它们放入队列中,并等到它们在线。我希望Jenkins能够在其余的机器上执行这项工作并完成工作。有什么建议吗?

编辑1: 我意识到这项工作与所有机器相关: Screenshot

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

编辑2: Jenkins CLI具有清除队列命令。这在当时似乎很有希望。

2 个答案:

答案 0 :(得分:8)

使用 GroovyAxis Plugin 和以下脚本可以实现一个很好的解决方案,它将返回仅限在线奴隶的轴列表

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

<强>更新 由于Jenkins 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 

答案 1 :(得分:0)

如果任务以仅在特定节点上运行的方式附加,则它将无法在其他计算机上运行它。

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

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

enter image description here

如果在该任务上禁用,则需要检查他们接受在节点设置下可以找到的任何作业的节点。它应该如下所示。

enter image description here

古德勒克。