Jenkins – Job erst starten wenn 4 Agenten frei sind
Vor kurzem gab es eine interessante Aufgabe: Die Aufgabe war, erst dann einen Job zu starten, wenn eine bestimmte Anzahl an Agenten mit einem bestimmten Label frei sind. Beispiel: Man möchte nur dann einen Job starten, wenn 4 Agenten mit dem Label generic frei sind.
Meine Lösung hierzu wäre diese gewesen: Man erstellt einen neuen Job, der ein Groovy Skript ausführt (Execute system Groovy script). Dieses Skript geht alle Agenten durch, prüft, ob die ein bestimmtes Label haben und wenn dieser Agent gerade frei ist, wird eine Variable (freeAgents) hochgezählt. Gibt es genug freie Agenten, wird der Job weiter fort geführt, ansonsten abgebrochen.
Nachdem das Skript ausgeführt wurde, wird der Job gestartet, der gestartet werden sollte, wenn es genug freie Agenten gibt.
Groovy Code
Hier mein Groovy Code dazu:
import hudson.model.*; int freeAgents = 0; for (aSlave in hudson.model.Hudson.instance.slaves) { println('===================='); println('Name: ' + aSlave.name); labels = aSlave.getLabelString().split(" "); for (l in labels) { println(l); // Check of slave has "generic" as a labelif (l == "generic" && aSlave.getComputer().countBusy() == 0) {
freeAgents = freeAgents + 1;
} } } println("Free agents found: " + freeAgents); // Check if at least 4 agents are free. if (freeAgents < 4) { def currentBuild = Thread.currentThread().executable; currentBuild.setResult(Result.ABORTED); currentBuild.getExecutor().interrupt(); }