28 Stimmen

Jenkins - Gibt es eine Möglichkeit, alle offline-Knoten (Slaves) zu entfernen / alle Knoten im Batch zu entfernen / alle Knoten zu löschen?

Beim Verwenden des Jenkins Docker-Plugins können eventuell aufgrund eines Fehlers keine Schwärme gestartet werden. Ich habe nicht darauf geachtet und im Moment habe ich Tausende offline Nodes, die nicht gestartet werden konnten.

FAZIT - Gibt es eine Möglichkeit, Nodes (Slaves) in Jenkins stapelweise zu entfernen, alle offline Nodes zu löschen oder sogar alle Nodes zu löschen? Das Neustarten des Jenkins-Servers hat nicht geholfen, und ich konnte keinen Weg in der Jenkins-API finden.

Ich würde mich über jede Idee freuen, bevor ich anfange, ein Selenium-Skript oder ähnliches zu schreiben...

Vielen Dank!

42voto

Nayana Adassuriya Punkte 21724

Dies ist die Copy>Paste>Run Version der Antwort auf KeepCalmAndCarryOn. Gehen Sie zu Jenkins verwalten > Script-Konsole > kopieren Sie diesen Code > Ausführen

für (aSlave in hudson.model.Hudson.instance.slaves) {
    if (aSlave.getComputer().isOffline()) {
        aSlave.getComputer().setTemporarilyOffline(true,null);
        aSlave.getComputer().doDoDelete();
    }
}

Bildbeschreibung hier eingeben

30voto

KeepCalmAndCarryOn Punkte 8817

Es gibt dieses Skript mit einem auskommentierten Abschnitt zum Löschen von Knoten.

Es läuft in der Jenkins-Skriptkonsole

for (aSlave in hudson.model.Hudson.instance.slaves) {
  println('====================');
  println('Name: ' + aSlave.name);
  println('getLabelString: ' + aSlave.getLabelString());
  println('getNumExectutors: ' + aSlave.getNumExecutors());
  println('getRemoteFS: ' + aSlave.getRemoteFS());
  println('getMode: ' + aSlave.getMode());
  println('getRootPath: ' + aSlave.getRootPath());
  println('getDescriptor: ' + aSlave.getDescriptor());
  println('getComputer: ' + aSlave.getComputer());
  println('\tcomputer.isAcceptingTasks: ' + aSlave.getComputer().isAcceptingTasks());
  println('\tcomputer.isLaunchSupported: ' + aSlave.getComputer().isLaunchSupported());
  println('\tcomputer.getConnectTime: ' + aSlave.getComputer().getConnectTime());
  println('\tcomputer.getDemandStartMilliseconds: ' + aSlave.getComputer().getDemandStartMilliseconds());
  println('\tcomputer.isOffline: ' + aSlave.getComputer().isOffline());
  println('\tcomputer.countBusy: ' + aSlave.getComputer().countBusy());
  //if (aSlave.name == 'NAME OF NODE TO DELETE') {
  //  println('Knoten herunterfahren!!!!');
  //  aSlave.getComputer().setTemporarilyOffline(true,null);
  //  aSlave.getComputer().doDoDelete();
  //}
  println('\tcomputer.getLog: ' + aSlave.getComputer().getLog());
  println('\tcomputer.getBuilds: ' + aSlave.getComputer().getBuilds());
}

0voto

AlonL Punkte 5672

Danke für die großartige Antwort.

Eine andere Möglichkeit besteht darin, die Datei '${JENKINS_HOME}/config.xml' manuell zu bearbeiten (und beispielsweise mit regulärem Ausdruck zu suchen/ersetzen).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X