Ich bin Teil einer Entwicklungsgruppe mit 5 Teams, insgesamt etwa 40 Entwicklern. Wir folgen der Scrum-Methode mit 3-wöchigen Sprints. Wir haben ein kontinuierliches Integrations-Setup (Jenkins), bei dem eine Build-Pipeline mehrere Stunden dauert (aufgrund umfangreicher automatisierter Tests). Grundsätzlich funktioniert der Entwicklungsprozess gut.
Wir stellen jedoch fest, dass unser Build nach einigen Tagen in einem neuen Sprint oft instabil wird und bis zum Ende des Sprint-Endes "Commit Stop" wackelig bleibt. Dies hat den nachteiligen Effekt, dass Build-Schritte weit unten in der Pipeline, insbesondere UI- / Webtests, mehrere Tage lang nicht ausgeführt werden (da sie nur bei einem "grünen" Build ausgelöst werden). Folglich werden neu eingeführte Fehler oft erst sehr spät im Sprint erkannt.
- Jedes Commit wird anhand einer Reihe grundlegender Tests überprüft. Nach der Überprüfung wird die Änderung nach einer Codeüberprüfung (Gerrit) an den Master weitergeleitet.
- Grundlegende Unit-Tests werden alle 30 Minuten mit einer Dauer von weniger als 10 Minuten ausgeführt
- Integrationstests werden alle 2 Stunden und eine Dauer von 1 Stunde ausgeführt
- UI- / Webtests werden bei erfolgreichen Integrationstests ausgeführt und dauern mehrere Stunden
Abhängig davon, wer während des Sprints für die Build-Stabilität verantwortlich ist (diese Verantwortung wird pro Sprint weitergegeben), kann es zu Zwischen-Ad-hoc-Commit-Stopps kommen, um den Build wieder stabil zu machen.
Also wollen wir:
- Unsere Entwicklerteams entwickeln und übernehmen Änderungen während eines Sprints ungehindert
- Unser Erstellungsprozess wird abgebrochen, wenn ein Erstellungsschritt fehlschlägt, da nachfolgende Erstellungsergebnisse wenig Bedeutung haben
- Unser Erstellungsprozess, um den Entwicklern rechtzeitig Qualitätsfeedback zu geben
Angesichts von (2) scheinen sich die Punkte (1) und (3) zu widersprechen. Hat jemand eine gute Praxis, um damit umzugehen?
( Wir lockern derzeit Punkt (2) und erlauben die Fortsetzung des Builds auch bei fehlgeschlagenen Build-Schritten. Ich habe noch kein Feedback, wie sich dies auf unsere Qualität auswirkt. )
Danke, Simon
several hours
, ist das das eigentliche Problem. Dies bedeutet, dass die kombinierte Lösung zu groß und zu breit ist. Sie sollten versuchen, die Lösung zu komponieren und dann kleine Codestücke als Pakete haben (auf die eine oder andere Weise in allen wichtigen Sprachen auf allen Plattformen verfügbar). Änderungen würden sich also nur auf die Komponenten auswirken und werden viel schneller erkannt. Der vollständige Build fügt im Wesentlichen bereits kombinierte Komponenten zusammen und ist auch schneller. Sie würden dann möglicherweise nur einige Tests ausführen, um sicherzustellen, dass die richtigen Komponenten aufgelöst wurden.