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:
- Skalieren : Vergrößern Sie die AWS-Instanz und fügen Sie weitere Executor hinzu.
- Skalieren : Vergrößern Sie die AWS-Instanz und fügen Sie einen weiteren Jenkins-Slave-Prozess hinzu.
- 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?
jenkins
continuous-integration
capacity-planning
Oscar Foley
quelle
quelle
Antworten:
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:
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 .
quelle
Verwende Kubernetes und Helm.
Ich würde die Verwendung der Jenkins Helm-Tabelle empfehlen. Es wird mit installiert
helm install stable/jenkins
und skaliert automatisch.https://github.com/kubernetes/charts/tree/master/stable/jenkins
quelle
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.
quelle
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.
quelle