Es gibt einen Moment, in dem Sie zu verstehen beginnen, dass es in der Mikrodienstarchitektur beängstigender ist, eine Woche zu warten, um alle Mikrodienste gleichzeitig bereitzustellen, um sicherzustellen, dass alles zusammenarbeitet, als die API-Versionierung strikt durchzusetzen und viel Automatik zu schreiben Tests (jeweils ein bisschen: Einheit und Erkundung, Integration) und automatische Bereitstellung in der Produktion, sobald Ihr Commit als Test auf der Bühne bestanden wurde.
Nun, es sieht nach einer großartigen Idee aus, solange Sie daran denken, Tests zu schreiben, Änderungen vor dem Festschreiben zu testen, wissen, wie die API-Versionierung verwendet wird, und keine Datenbank in Ihrem inkrementellen Datenbank-Aktualisierungsskript löschen, das bei der Bereitstellung ausgeführt wird (welche) ist kein großes Problem, da es auf der Bühne scheitern sollte).
Aber ist es möglich, dies mit Junior-Programmierern zu tun? Vielleicht muss ich ein Pull-Request-Schema implementieren. Dies würde es weniger wie eine kontinuierliche Bereitstellung machen (das ist meine Vermutung)?
Ich hoffe, dass dies nicht meinungsbasiert ist und ich kann mich darauf verlassen, dass Sie Ihre Erfahrungen teilen, danke.
Bitte beachten Sie, dass ich weder nach CI noch nach kontinuierlicher Lieferung frage. Das haben wir schon. Was wir jetzt versuchen, ist eine kontinuierliche Bereitstellung, was bedeutet, dass alles direkt nach dem Einchecken des Codes in Produktion ist.
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.Antworten:
Warum nicht? Alles, was Sie beschreiben, ist ein Problem, unabhängig davon, ob Sie eine kontinuierliche Bereitstellung verwenden oder nicht. Das Problem scheint zu sein, dass Sie befürchten, dass die Junioren einen katastrophalen Fehler machen werden. Und dass dieser Fehler in die Produktion eilt, bevor irgendjemand ihn fangen kann.
Aus diesem Grund führen Sie Codeüberprüfungen und Tests durch. Bevor etwas in Ihrem Hauptzweig zusammengeführt und zur Veröffentlichung vorgesehen ist, muss der Code überprüft werden, sowohl von einigen anderen Junioren (damit sie Erfahrung sammeln) als auch von erfahrenen Entwicklern (um ihr Fachwissen zu nutzen, um den Code zu verbessern). Jeder sollte nach diesen katastrophalen Fehlern suchen. Und es sollte sie aufhalten. Wenn dies nicht der Fall ist, benötigen Sie wahrscheinlich eine bessere Qualitätssicherung / Tests in einer Staging-Umgebung (und möglicherweise einige bessere Entwickler, wenn Codeüberprüfungen diese Dinge übersehen).
quelle
Die kontinuierliche Bereitstellung funktioniert gut, wenn Sie über eine Reihe gut automatisierter Tests verfügen.
Junior-Entwickler können sich über ihre eigene Aufgabe freuen und sehen nicht, dass sie Dinge kaputt machen. Sie können dies mit etwas Automatisierung beheben. Richten Sie einen Build-Server ein, auf dem ständig Tests ausgeführt werden, und stellen Sie ihnen ein Tool wie den CatLight-Build-Notifier zur Verfügung . Es gibt ihnen ein schnelles und klares Feedback, wenn sie Dinge kaputt machen.
Sie werden kleine Probleme beheben und Ihre kontinuierliche Lieferung am Laufen halten.
quelle
Die einzige Möglichkeit, gute Gewohnheiten zu erlernen, besteht darin, sie zu üben. Ja, Junior-Entwickler können also auch die kontinuierliche Bereitstellung üben. Möglicherweise möchten Sie überlegen, ob Sie der Pipeline Schritte hinzufügen, um beispielsweise die Testabdeckung zu überprüfen und möglicherweise eine statische Code-Analyse durchzuführen, und den Build fehlschlagen, wenn die Testabdeckung nicht hoch genug ist. Dadurch wird sichergestellt, dass Junior-Entwickler die Erwartungen verstehen, bevor etwas als vollständig betrachtet wird.
quelle
Dies können Sie nicht nur mit Nachwuchsentwicklern tun, sondern es wird auch von Ihnen verlangt. Erstens reduzieren Sie ansonsten Ihre Softwarequalität, und zweitens hilft dies Nachwuchsentwicklern dabei, gute Fähigkeiten in der Softwareentwicklung zu erlernen.
Als Analogie: Möchten Sie, dass Ihr Arzt nicht nach bestem Wissen Medizin praktiziert, weil er Angst vor Fehlern in der jungen Lehre hat? Wie gehen Ärzte mit möglichen Schäden um?
quelle
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.
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:
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.
quelle
Ja, Sie können CI mit Junior-Entwicklern üben. Es wäre dumm, dies im aktuellen Entwicklungsklima nicht zu tun. Es ist wahnsinnig nützlich, in der Lage zu sein, auf Repo zu pushen und diesen dann automatisch in Staging-Code zusammenzuführen - und alles in Echtzeit in Travis (oder Bamboo, Pipelines usw.) zu sehen!
Nehmen Sie Ihren DevOps-Typen mit und lassen Sie ihn den Prozess mit ihnen durchlaufen, sowie einen erfahrenen Entwickler im Standby-Modus, um die Dinge zu überwachen und sie mit ihren Code-Überprüfungen zu verknüpfen (Sie tun dies, richtig?)
Wenn Sie befürchten, dass Shite-Code durchkommt, liegt das nicht am CI und nicht an den Junioren, sondern an Ihnen .
Helfen Sie ihnen also, besser zu werden und sich daran zu gewöhnen, Stage / Prod-Code schneller bereitzustellen. Sie werden sich langfristig bedanken.
quelle