少なくとも1つの方法は、QueueTaskDispatcherを拡張することです。それを使用すると、ジョブとノードが取得され、その時点でそのノード上に構築されないようにブロックできます。もちろん、ノードは気にせず、常にジョブをブロックするだけです。このメソッドは、Jenkinsがノードを作成しようとしているスケジューリングされたジョブに対して定期的に呼び出されます。
import hudson.Extension;
import hudson.model.AbstractProject;
import hudson.model.Node;
import hudson.model.Queue.BuildableItem;
import hudson.model.queue.CauseOfBlockage;
import hudson.model.queue.QueueTaskDispatcher;
@Extension
public class MyTaskDispatcher extends QueueTaskDispatcher {
@Override
public CauseOfBlockage canTake(Node node, BuildableItem item) {
// only care about AbstractProject tasks
if (!(item.task instanceof AbstractProject<?, ?>)) return null;
AbstractProject<?, ?> proj = (AbstractProject<?, ?>) item.task;
if(!proj.getName().contains(node.getNodeName()) {
return new CauseOfBlockage.BecauseNodeIsBusy("Job name does not contain node name");
}
return null;
}
}
ありがとうございます!私たちはしばらく前にそれを取り組んだが、これで別の亀裂を取ります。 – sybkar