Wie skaliere ich Jenkins richtig?

27

In meinem Projekt haben wir einen AWS-Server, auf dem Jenkins Master + 1 Jenkins Slave (2 Executoren) ausgeführt wird ... und wir brauchen mehr.
Um unsere Build-Leistung zu erhöhen, haben wir drei Optionen:

  1. Skalieren : Vergrößern Sie die AWS-Instanz und fügen Sie weitere Executor hinzu.
  2. Skalieren : Vergrößern Sie die AWS-Instanz und fügen Sie einen weiteren Jenkins-Slave-Prozess hinzu.
  3. Skalieren : Erstellen Sie eine weitere AWS-Instanz mit einem Jenkins-Slave und verbinden Sie ihn mit dem Master

Wir möchten 2. tun, da wir in einer großen Organisation sind und unser aktueller Jenkins-Meister bereits Zugang zu jedem Ort hat, den er benötigt. Option 3. "Neuer Server" ist kompliziert, da mehr bürokratische Genehmigungen erforderlich sind, die Wochen dauern werden.

Meine Fragen sind also:

  • Gibt es technische Probleme in Option 2? . Vielleicht sind sich die Testamentsvollstrecker der einzelnen Jenkins-Sklaven der anderen Testamentsvollstrecker nicht bewusst?
  • Was ist im Allgemeinen der beste Ansatz, um Jenkins zu skalieren? Vergrößern oder verkleinern?
Oscar Foley
quelle
Sie haben ein Problem, das Ändern eines Instanztyps kann problematisch sein, wenn Sie zu einem anderen Hardwaretyp wechseln, da Ihr Volume in der neuen Instanz gesichert und wiederhergestellt werden muss.
Tensibai
2
Warum nicht Nummer 3? Die übliche Art, Jobs an Jenkins zu senden, ist das Mastering. Und basierend auf bestimmten Kriterien sendet der Meister es nahtlos an den entsprechenden Sklaven
Romeo Ninov
FWIW, Sie müssen auch Ihre Build-Struktur analysieren, um zu sehen, wie sie die Ressourcen des Build-Computers nutzt. Eine Vergrößerung hilft möglicherweise nicht. In einigen Fällen war die Build-Zeit für zwei parallele Builds auf demselben Computer länger als die kombinierten Build-Zeiten von Die gleichen 2 Builds werden nacheinander ausgeführt, nicht überlappend. In einem solchen Fall wäre Nr. 3 die einzig praktikable Option.
Dan Cornilescu
Ich stimme zu, dass # 3 besser ist, aber ich habe keine Argumente dafür oder Argumente gegen # 1 und # 2 ...
Oscar Foley
Wenn Sie die Möglichkeit innerhalb Ihrer Umgebung haben, würde ich nach einer kurzlebigen Lösung suchen. Wenn Sie feststellen, dass Sie bereits in AWS arbeiten, können Sie die Maschinen bei Bedarf problemlos hoch- und runterfahren, während Sie die Arbeitslast bewältigen. wiki.jenkins.io/display/JENKINS/Amazon+EC2+Plugin
casey vega

Antworten:

11

Es gibt keine grundlegenden technischen Probleme, wenn mehrere Jenkins-Slaves auf demselben Computer ausgeführt werden. Tatsächlich werden beim Ausführen mehrerer Slaves auf demselben Computer mehrere gute Gründe aufgeführt:

Während die korrekte Verwendung von Executoren die Notwendigkeit mehrerer Slave-Instanzen auf demselben Computer weitgehend überflüssig macht, sind einige einzigartige Anwendungsfälle zu berücksichtigen:

  • Sie möchten mehr Konfigurierbarkeit zwischen den konfigurierten Knoten. Angenommen, Sie haben einen Knotensatz, der so oft wie möglich verwendet werden soll, und den anderen Knoten, der nur bei Bedarf verwendet werden soll.
  • Möglicherweise haben Sie mehrere Jenkins-Master-Installationen, die unterschiedliche Dinge erstellen. Diese Konfiguration ermöglicht es Ihnen, Slaves für mehr als einen Master auf derselben Box zu haben. Mit Jenkins können Sie wirklich zwei Herren dienen.
  • Möglicherweise möchten Sie die Einfachheit des Startens / Stoppens / Ersetzens virtueller Maschinen nutzen, möglicherweise in Verbindung mit Jenkins-Plugins wie dem Libvirt Slaves-Plugin .
  • Sie möchten Ihre Hardware-Investition und -Nutzung maximieren und gleichzeitig die Betriebskosten minimieren (z. B. Nebenkosten für den Betrieb von im Leerlauf befindlichen Slaves).

Im Allgemeinen wird das Skalieren bevorzugt, vor allem, weil die Skalierbarkeit in der Regel durch die Arten / Größen der verfügbaren physischen Ressourcen begrenzt ist.

Insbesondere zur Steigerung der Build-Leistung würde ich eine Analyse Ihres tatsächlichen Builds empfehlen, um zu bestimmen, wie die Maschinenressourcen verwendet werden, welche / wo sich die Engpässe befinden und welche Skalierbarkeitsbeschränkungen auftreten, um festzustellen, ob das Skalieren überhaupt hilft.

Zum Beispiel stieß ich auf Fälle, in denen die Erstellungszeit für 2 parallele Builds auf demselben Computer länger war als die kombinierten Erstellungszeiten für dieselben 2 Builds, die nacheinander (nicht überlappend) auf demselben Computer ausgeführt wurden. In einem solchen Fall würde ich nicht einmal eine Vergrößerung in Betracht ziehen, da dies die gesamte Gebäudekapazität verringern würde .

Dan Cornilescu
quelle
3

Ich denke du solltest beides nicht;)

Na irgendwie. Ich denke, Sie brauchen mehr Executoren, vielleicht sind Ihre Builds wirklich ressourcenintensiv? Ich würde mindestens 4 laufen, aber wir laufen 6 bis 8 abhängig von Jobs. Ich mag es, die Anzahl der Kerne den Exektoren zuzuordnen. Vielleicht möchten Sie also Ihre Knoten vergrößern. Ich denke, wir lassen einen M4 für unsere 4-8 Executoren laufen.

Ich denke auch, dass Sie skalieren sollten, aber Sie sollten dies klug tun. Jenkins verfügt über ein Plugin , mit dem AWS automatisch skaliert werden kann, je nachdem, was sich in der Erstellungswarteschlange befindet. Grundsätzlich sagen Sie ihm, wie viele Jobs und wie lange das Warten dauert, bis ein Slave aufsteht und die Jobs an den neuen Slave sendet. Sie können auch die maximale Anzahl der Slaves, die minimale Anzahl usw. einstellen.

Levi
quelle
2

Ich würde skalieren, anstatt zu skalieren, und Option 3 wählen. Wir haben ein Setup vorgenommen, bei dem alle Jenkins-Agenten auf einem ECS (Custom Docker Based Jenkins) mit einer automatisch skalierenden Gruppe ausgeführt werden. Wir haben alle unsere Jenkins-Master, die mit dem ECS kommunizieren, wodurch die Arbeitslast auf das ECS aufgeteilt wird, und keine Notwendigkeit, den Jenkins-Master in einer Scale-up-Übung neu zu erstellen.

Jon Brohauge
quelle