Aus früheren Erfahrungen mit einer Big Ball Of Mud- Codebasis, die sich über viele Jahre auf natürliche Weise durch viele unbeaufsichtigte Nachwuchsentwickler entwickelt hat, möchte ich darauf hinweisen, was passiert, wenn Sie mit diesen Entwicklern kein CI üben.
Bearbeiten / Aktualisieren : Gemäß RubberDucks Kommentar; Bei dieser Antwort wird davon ausgegangen, dass Ihr Zusammenführungsziel für die Integration eher ein Entwicklungszweig als ein Evaluierungs- oder Release-Zweig ist.
- Offensichtlich muss der Code für die Veröffentlichung und Live-Bereitstellung wesentlich besser kontrolliert werden. Wenn es keinen separaten Produktionszweig gibt, lohnt es sich, eine Änderung Ihrer Verzweigungs- / Zusammenführungsstrategie in Betracht zu ziehen, um einen Master-Entwicklungszweig (der für Integrationstests und niemals für die Freigabe verwendet wird) neben dem Hauptversionszweig auszuführen. Dadurch bleiben alle Vorteile von CI und häufigen Zusammenführungen erhalten, ohne dass das Risiko besteht, dass der Produktionscode beschädigt wird.
1. Nachwuchsentwickler kommunizieren seltener mit ihren Mitarbeitern oder Vorgesetzten
Kontinuierliche Integration ist nicht nur eine Frage des Zusammenführens von Code, sondern ein Zeitpunkt, an dem ein Entwickler gezwungen ist, mit anderen Stakeholdern zu interagieren.
Kommunikation ist wichtig, und ohne übermäßig verallgemeinern zu wollen, handelt es sich in der Regel um eine erlernte Fähigkeit, die für unerfahrene Entwickler weniger selbstverständlich ist als für diejenigen, die es gewohnt sind, in einer Teamumgebung zu arbeiten.
Wenn Sie Nachwuchsentwicklern erlauben, wochenlang in ihrer Kabine zu sitzen und Code zu verprügeln, ohne nach häufigen Berichten / Überprüfungen gefragt zu werden, vermeiden sie mit größerer Wahrscheinlichkeit die Kommunikation insgesamt.
2. Der Code, den sie produzieren, muss wahrscheinlich strenger überprüft werden
Haben Sie jemals etwas überprüft, das so schlecht war, dass Sie sich wünschten, Sie hätten es früher aufgegriffen und verhindert, dass es jemals geschrieben wurde? Das passiert sehr oft.
Sie können nicht verhindern, dass fehlerhafter Code geschrieben wird, aber Sie können die verschwendete Zeit begrenzen. Wenn Sie sich zu häufigen Überprüfungen und Zusammenführungen verpflichten, minimieren Sie den Spielraum für Zeitverschwendung.
Das schlimmste Szenario ist, dass Sie einen Nachwuchsentwickler möglicherweise mehrere Wochen lang in seinem eigenen Miniaturprojekt alleine lassen. Wenn er endlich für die Codeüberprüfung bereit ist, bleibt ihm einfach nicht genug Zeit, um das ganze Chaos zu beseitigen weg und von vorne anfangen.
Viele Projekte werden zu einem großen Schlammball, einfach weil eine ganze Menge schlechten Codes geschrieben wurde, als niemand aufpasste, bis es zu spät war.
3. Sie sollten weniger sicher sein, dass ein Junior-Entwickler oder ein anderes neues Teammitglied die Anforderungen verstanden hat
Manchmal kann ein Entwickler die perfekte Lösung für das falsche Problem finden. Dieser ist traurig, weil es normalerweise auf einfache Missverständnisse zurückzuführen ist, die so leicht zu vermeiden wären, wenn nur jemand zuvor die richtigen Fragen gestellt hätte.
Auch dies ist ein Problem, das eher unerfahrene Entwickler betrifft, die eher "schlechte" Anforderungen zum Nennwert akzeptieren, anstatt die Weisheit der Anforderung zurückzudrängen und in Frage zu stellen.
4. Sie sind wahrscheinlich weniger vertraut mit gängigen Mustern, mit der Architektur des vorhandenen Codes und mit bekannten Tools und Lösungen
Manchmal verbringt ein Entwickler eine ganze Menge Zeit damit, das Rad unnötig neu zu erfinden, nur weil er nicht wusste, dass es überhaupt eine bessere Lösung gibt. Oder sie verbringen Tage damit, einen quadratischen Stift in ein rundes Loch zu hämmern, ohne zu merken, was sie falsch machen.
Wiederum ist es wahrscheinlicher, dass solche Dinge unerfahrenen Entwicklern passieren, und der beste Weg, um das Problem zu beheben, besteht darin, regelmäßige Überprüfungen sicherzustellen.
5. Lange Zeiträume zwischen Code-Commits / Merges erschweren die Identifizierung und Behebung von Fehlern
Wenn ein Fehler unmittelbar nach dem Zusammenführen von Codeänderungen im Wert von vielen Wochen in den Hauptzweig auftritt, wird die Herausforderung, festzustellen, welche Änderung den Fehler verursacht haben könnte, schwieriger.
Natürlich kommt auch hier Ihre allgemeine Verzweigungsstrategie ins Spiel. Im Idealfall arbeiten alle Ihre Entwickler entweder in ihren eigenen Zweigen oder in Feature-Zweigen (oder in beiden) und arbeiten niemals direkt vom Master / Trunk aus.
Ich habe Situationen gesehen, in denen ganze Teams gleichzeitig direkt in den Master / Trunk arbeiten, und dies ist eine schreckliche Umgebung für CI, aber zum Glück bietet die Lösung, alle vom Master / Trunk wegzuziehen, im Allgemeinen genügend Stabilität für die individuelle Arbeit Artikel / Tickets / etc.
Es sollte für jeden Entwickler immer "OK" sein , den Master / Trunk-Zweig zu unterbrechen, mit dem Verständnis, dass das Zusammenführen so regelmäßig erfolgen sollte, dass das Aufbrechen von Änderungen und Fehlern schneller erkannt und daher auch schneller behoben werden sollte. Die schlimmsten Mängel sind typischerweise solche, die monatelang oder sogar jahrelang unentdeckt bleiben.
In Summe; Die Hauptvorteile der kontinuierlichen Integration / Bereitstellung sind:
- Die Kommunikation zwischen Ihrem Team verbessert sich
- Die Codequalität wird im Allgemeinen auf einem höheren Standard gehalten
- Es ist weniger wahrscheinlich, dass Anforderungen übersehen oder falsch interpretiert werden
- Architektur- und Designprobleme sollten schneller erkannt werden.
- Es ist wahrscheinlicher, dass Fehler früher erkannt und behoben werden
Wenn Sie also nicht mit Ihren Nachwuchsentwicklern CI üben, gehen Sie ein erhebliches unnötiges Risiko ein, da dies die Mitglieder Ihres Teams sind, die es mehr als die anderen benötigen.
it is more scary to wait a week to deploy all micro services at once to make sure that everything works together, than to strictly enforce api versioning, write lots of automatic tests (...), and auto deploy to production as soon as your commit passes as tests on stage
- das ist meinungsbasiert;) IMHO ist es viel schwieriger, den Erfolg mit einer unabhängigen Servicebereitstellung sicherzustellen als mit einem monolithischen Ansatz: softwareengineering.stackexchange.com/a/342346/187812 . Und mit echtem CI (keine Feature- / Integrationszweige) sollten Sie nicht eine Woche warten müssen.