Ich habe mich in meinem Unternehmen mit dem Problem der Skalierung von CI befasst und gleichzeitig versucht, herauszufinden, welchen Ansatz ich bei CI und mehreren Niederlassungen wählen soll. Es gibt eine ähnliche Frage bei Stackoverflow, Zweigen mehrerer Features und kontinuierlicher Integration . Ich habe eine neue gestartet, weil ich mehr Diskussion und Analyse in der Frage haben möchte.
Bisher habe ich festgestellt, dass es zwei Hauptansätze gibt, die ich verfolgen kann (oder vielleicht einige andere ???).
- Mehrere Jobs (hier geht es um Jenkins / Hudson) pro Zweigstelle
- Schreiben Sie Werkzeuge, um die zusätzlichen Jobs zu verwalten
- Erstellen / Ändern / Löschen von Jobs in großen Mengen
- Benutzerdefinierte Einstellungen für jeden Job pro Zweig (SCM-URL, Dep-Management-Repos-Duplikate)
- Einige Beispiele für Personen, die dieses Problem mit Shell-Tools, Ant-Skripten und Jenkins CLI angehen. Sehen:
- http://jenkins.361315.n4.nabble.com/Multiple-branches-best-practice-td2306578.html
- http://jenkins.361315.n4.nabble.com/Is-it-possible-to-handle-multiple-branches-where-some-jobs-should-run-on-each-one-without-duplicatin-td954729. html
- http://jenkins.361315.n4.nabble.com/Parallel-development-with-branches-td1013013.html
- Hudson-Job automatisch konfigurieren oder erstellen
- Verursacht eine höhere Belastung Ihres CI-Clusters
- Der Feedback-Zyklus für Entwickler verlangsamt sich (wenn die Infrastruktur die neue Last nicht bewältigen kann).
- Schreiben Sie Werkzeuge, um die zusätzlichen Jobs zu verwalten
- Mehrere Jobs pro 2 Filialen (Entwickler & Stall)
- Verwalten Sie die beiden Sätze manuell (wenn Sie die Konf. Eines Jobs ändern, müssen Sie sie in der anderen Verzweigung ändern.)
- PITA aber zumindest so wenige zu verwalten
- Andere zusätzliche Zweige erhalten keine vollständige Testsuite, bevor sie an dev weitergeleitet werden
- Unzufriedene Entwickler. Warum sollte sich ein Entwickler um CI-Skalierungsprobleme kümmern? Er hat eine einfache Anfrage, wenn ich verzweige, möchte ich meinen Code testen. Einfach.
- Verwalten Sie die beiden Sätze manuell (wenn Sie die Konf. Eines Jobs ändern, müssen Sie sie in der anderen Verzweigung ändern.)
Wenn ich Entwicklern CI für ihre eigenen benutzerdefinierten Zweige zur Verfügung stellen möchte, benötige ich anscheinend spezielle Tools für Jenkins (API oder Shellscripts oder so?) Und die Skalierung. Oder ich kann ihnen sagen, dass sie häufiger mit DEV fusionieren und ohne CI in benutzerdefinierten Zweigen leben sollen. Welches würdest du nehmen oder gibt es andere Möglichkeiten?
quelle
Ich würde für jede Niederlassung separate Jobs einrichten. Ich habe das schon einmal gemacht und es ist nicht schwer zu verwalten und einzurichten, wenn Sie Hudson / Jenkins richtig eingerichtet haben. Eine schnelle Möglichkeit, mehrere Jobs zu erstellen, besteht darin, von einem vorhandenen Job mit ähnlichen Anforderungen zu kopieren und diese nach Bedarf zu ändern. Ich bin mir nicht sicher, ob Sie jedem Entwickler erlauben möchten, seine eigenen Jobs für seine eigenen Niederlassungen einzurichten, aber es ist nicht viel Arbeit für eine Person (dh einen Build-Manager), diese zu verwalten. Sobald die benutzerdefinierten Zweige zu stabilen Zweigen zusammengeführt wurden, können entsprechende Jobs entfernt werden, wenn sie nicht mehr benötigt werden.
Wenn Sie sich Sorgen über die Auslastung des CI-Servers machen, können Sie separate Instanzen des CI oder sogar separate Slaves einrichten, um die Auslastung auf mehrere Server zu verteilen. Stellen Sie sicher, dass der Server, auf dem Sie Hudson / Jenkins ausführen, ausreichend ist. Ich habe Apache Tomcat verwendet und musste nur sicherstellen, dass es über genügend Speicher und Rechenleistung verfügt, um die Build-Warteschlange zu verarbeiten.
Es ist wichtig, klar zu machen, was Sie mit CI erreichen möchten, und dann einen Weg zu finden, um es ohne großen manuellen Aufwand oder Doppelarbeit zu implementieren. Es ist nichts Falsches daran, andere externe Tools oder Skripte zu verwenden, die von Ihrem CI-Server ausgeführt werden, um Ihren gesamten Build-Management-Prozess zu vereinfachen.
quelle
Ich würde dev + stabile Zweige wählen. Und wenn Sie immer noch benutzerdefinierte Zweige möchten und Angst vor der Last haben, verschieben Sie diese benutzerdefinierten in die Cloud und lassen Sie sie von Entwicklern selbst verwalten, z. B. http://cloudbees.com/dev.cb Dies ist das Unternehmen, in dem Kohsuke jetzt tätig ist . Es gibt auch ein Eclipse-Tool. Wenn Sie also Eclipse verwenden, wird es direkt in dev env integriert.
quelle
Was wirklich problematisch ist, ist die Build-Isolation mit Feature-Zweigen. In unserem Unternehmen haben wir eine Reihe von separaten Maven-Projekten, die alle Teil einer größeren Distribution sind. Diese Projekte werden von verschiedenen Teams verwaltet, aber für jede Distribution müssen alle Projekte freigegeben werden. Eine Feature-Branche kann sich jetzt von einem Projekt zum anderen überschneiden, und das ist der Fall, wenn die Build-Isolation schmerzhaft wird. Wir haben verschiedene Lösungen ausprobiert:
Tatsächlich ist die letzte Lösung die vielversprechendste. Alle anderen Lösungen fehlen auf die eine oder andere Weise. Zusammen mit dem job-dsl-Plugin ist es einfach, einen neuen Feature-Zweig einzurichten. Kopieren Sie einfach das groovige Skript und fügen Sie es ein, passen Sie Zweige an und lassen Sie den Seed-Job die neuen Jobs erstellen. Stellen Sie sicher, dass der Seed-Job nicht verwaltete Jobs entfernt. Dann können Sie problemlos mit Feature-Zweigen über verschiedene Maven-Projekte skalieren.
Aber wie Tom oben bereits sagte, wäre es besser, die Notwendigkeit von Feature-Zweigen zu überwinden und Entwicklern die saubere Integration beizubringen. Dies ist jedoch ein längerer Prozess, und das Ergebnis ist bei vielen älteren Systemteilen, die Sie nicht mehr berühren, nicht klar.
meine 2 Cent
quelle