Wie kann ich das Lastenausgleichsverhalten ändern, das Jenkins zur Steuerung von Slaves verwendet?

8

Wir verwenden Jenkins für unser CI-Build-System. Wir verwenden auch 'gleichzeitige Builds', so dass Jenkins jede Änderung unabhängig voneinander erstellt. Dies bedeutet, dass wir oft 5 oder 6 Builds desselben Jobs gleichzeitig ausführen. Um dies zu ermöglichen, haben wir 4 Slaves mit jeweils 12 Executoren.

Das Problem ist, dass Jenkins nicht wirklich das Gleichgewicht zwischen seinen Slaves ausgleicht. Es versucht, einen Job auf demselben Slave zu erstellen, auf dem er zuvor erstellt wurde (vermutlich um die Zeitsynchronisierung von der Quellcodeverwaltung zu reduzieren). Dies ist ein Problem, da Jenkins alle 6 Instanzen unseres Builds auf demselben Slave (oder wahrscheinlicher zwischen zwei Slaves) aufbauen wird. Eine Build-Maschine bleibt stecken und läuft sehr langsam, während der Rest stillsteht.

Gibt es ein Plugin oder etwas, das das Lastenausgleichsverhalten ändert, das Jenkins verwendet, um seine Slaves zu steuern?

    
Jay Spang 13.06.2012, 22:05
quelle

4 Antworten

1

Wenn Sie kein Plugin finden, das das automatisch macht, können Sie Folgendes tun:

  • Installieren Sie das Node-Label-Parameter-Plugin
  • Fügen Sie SLAVE Parameter zu Ihren Jobs hinzu
  • Jobs einschränken, die auf ${SLAVE} ausgeführt werden sollen
  • Fügen Sie einen Trigger-Job hinzu, der Folgendes ausführt:

    • Analysieren Sie die Lastverteilung über ein System-Groovy-Skript und entscheiden Sie, welcher Knoten beim nächsten Build gestartet werden soll.
    • Versenden Sie den Build auf diesem Knoten mit Parameterized Trigger Plugin indem Sie dem Parameter SLAVE den entsprechenden Wert zuweisen.

Um die Lastverteilung zu analysieren, müssen Sie Groovy-Plugin installieren und sich mit < a href="http://javadoc.jenkins-ci.org/"> Jenkins Hauptmodul API . Hier sind einige nützliche erste Hinweise .

    
malenkiy_scot 14.06.2012, 08:37
quelle
13

Wir standen vor einem ähnlichen Problem. Also habe ich ein Plugin zusammengestellt, das den Load Balancer in Jenkins so verändert, dass er einen Knoten auswählt, der momentan die geringste Last hat - Ссылка

Jede Rückmeldung ist willkommen.

    
bstick12 04.06.2013 19:35
quelle
3

Wenn Ihre Build-Maschinen nicht mehr als einen Build verarbeiten können, warum sollten Sie sie mit 12 Executoren konfigurieren? Wenn das tatsächlich der Fall ist, sollten Sie die Anzahl der Executoren auf 1 reduzieren. My Jenkins hat 30 Slaves mit jeweils einem Executor.

    
sti 18.06.2012 22:06
quelle
1

Sie können auch das Plugin "Throttle Concurrent Builds" verwenden, um die Anzahl einzuschränken Instanzen eines Jobs können parallel auf demselben Knoten ausgeführt werden

    
user1506978 16.11.2015 10:40
quelle