Starten Sie alle Jenkins-Knoten neu

Starten Sie alle Jenkins-Knoten neu

Ich verwalte einen Jenkins-Server (mit 2.89.4) mit ungefähr 40 angeschlossenen Knoten, die alle entweder Centos7, OSX oder Windows (7, 8, 10) ausführen. Vor kurzem hatten wir einige Stromausfälle und viele Slaves verloren ihre Verbindung zum Master. Dies erforderte viel manuelles Remoting und SSH, um sie alle wiederherzustellen. Seitdem habe ich sichergestellt, dass jeder Slave-Prozess einen Server ausführt, hätte jedoch gerne ein zusätzliches Sicherheitsnetz, um jede VM und/oder Box, auf der diese Slaves ausgeführt werden, automatisch neu starten zu können. Das Problem ist, dass es, da es mehrere verschiedene Arten von Betriebssystemen gibt, keine einfache Möglichkeit gibt, dies zu tun (die ich noch nicht kenne).

Ich habe versucht, ein Groovy-Skript zu verwenden, aber das kann hauptsächlich nur zum Neustarten des Slave-Dienstes verwendet werden, nicht zum Neustart der Maschine selbst. Dies war meine Referenz: https://wiki.jenkins.io/display/JENKINS/Monitor+and+Restart+Offline+Slaves

Ich habe mir auch einen Ansible-Ansatz angesehen, aber viele Maschinen sind nicht erreichbar und Ansible erfordert für Windows andere Skripttypen als für Unix.

Der beste Ansatz, den ich bisher gesehen habe, ist dieser: https://stackoverflow.com/questions/29165080/restart-jenkins-slave-from-master

Es wird jedoch nicht erklärt, wie dies auf jedem einzelnen Slave ausgeführt wird. Es sieht nur so aus, als würde es auf einem Slave ausgeführt. Hat jemand schon einmal so etwas gemacht? Ich würde gerne einen einzelnen Job oder ein einzelnes Skript erstellen, das ausgeführt werden kann und jeden einzelnen Knoten (mit einem Befehl wie shutdown -r -f) neu startet, der mit Jenkins verbunden ist, unabhängig von der Plattform.

Antwort1

Ich habe dies gelöst, indem ich einen Multi-Configuration-Job erstellt und alle Slaves nach Namen ausgewählt habe. Dann habe ich zwei bedingte Schritte basierend auf „Ausführungsknoten“ hinzugefügt. Ich habe für den ersten nur die Windows-Slaves und für den zweiten nur die Mac/Centos-Slaves ausgewählt. Für jeden bedingten Schritt habe ich einen einzelnen Schritt hinzugefügt: „Windows-Batch-Befehl ausführen“ für die Windows-Bedingung und „Shell ausführen“ für den Unix-Abschnitt. Hier sind die Inhalte meiner Batch- und Shell-Boxen:

Charge:

echo "Restarting Windows Machine...."
hostname
shutdown -r -f

Hülse:

echo "Restarting Unix Machine...."
hostname
sudo shutdown -r now

Ich habe die Schritte zum Herunterfahren in meinem Job vorerst auskommentiert, damit ich nicht versehentlich alles vor dem Test neu starte. Achten Sie darauf, diese Schritte auszukommentieren, bevor Sie versuchen, dies auszuführen.

Unix_Conditional_Step Windows_Conditional_Step

verwandte Informationen