Jenkins – Job erst starten wenn 4 Agenten frei sind

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 label
        if (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();
}

Quellen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.