我有一个基于标签在n
台机器上执行的任务。如果出于某种原因,其中一些机器处于脱机状态,我不希望Jenkins将它们放入队列中,并等到它们在线。我希望Jenkins能够在其余的机器上执行这项工作并完成工作。有什么建议吗?
编辑1: 我意识到这项工作与所有机器相关:
我被迫这样做是因为我需要这份工作在所有机器上同时运行。所以,我的问题仍然是一样的。如果其中一些机器处于脱机状态,我想跳过它们的工作,而不是等待/排队。
编辑2: Jenkins CLI具有清除队列命令。这在当时似乎很有希望。
答案 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;配置并检查以下设置。
如果在该任务上禁用,则需要检查他们接受在节点设置下可以找到的任何作业的节点。它应该如下所示。
古德勒克。