Wir beginnen mit zunehmender Größe auf ein Problem zu stoßen, bei dem Features zum Testen bereitgestellt werden, aber bis alles getestet ist und genehmigte neue Features zum Testen bereitgestellt werden.
Dies schafft eine Umgebung, in der wir fast nie auf die Produktion drängen können, da wir eine Kombination aus getesteten und nicht getesteten Funktionen haben. Ich bin mir sicher, dass dies ein häufiges Problem ist, aber ich habe noch keine guten Ressourcen für uns gefunden.
Einige Besonderheiten:
- GIT auf BitBucket
- Jenkins für die Skriptbereitstellung in Azure
Was ich mir erhoffe, ist eine Möglichkeit, Features zu isolieren, während sie sich durch Umgebungen bewegen, und nur das zu pushen, was bereit ist, zu produzieren.
Antworten:
Es hört sich so an, als hätten Sie hier ein paar Probleme:
1. Identifizieren von Funktionen für eine bestimmte Version
Dies ist ein Projektmanagement- und ein Koordinationsproblem. Wird diese Funktion vor, zur gleichen Zeit oder nach dieser anderen Funktion veröffentlicht? Wenn Releases jeweils für ein Feature durchgeführt werden sollen, geben Sie dies an. Wenn Features in Releases gruppiert werden sollen, ermitteln Sie die Gruppierungen und erzwingen Sie sie mit den Entwicklern und Entscheidungsträgern durch. Verwenden Sie Ihr Issue-Tracking- oder Ticketing-System, um Releases zu kennzeichnen. Stellen Sie klar, dass alle von ihnen ein No-Go-Feature einer bestimmten Version sind.
2. Verzweigungsstrategien
Git-Flow ist die einfache Antwort auf solche Probleme. Oft wird eine Variante von Git-Flow verwendet, auch wenn man nicht weiß, was es ist. Ich werde nicht sagen, dass es ein Allheilmittel für alle Probleme ist, aber es hilft sehr.
Es hört sich so an, als stoßen Sie auf ein Problem mit nicht-deterministischen Release-Strategien, bei denen Features als Scattershot eingestuft werden und etwas, das vor langer Zeit mit der Entwicklung begonnen hat, möglicherweise nach etwas veröffentlicht wird, das in jüngerer Zeit begonnen hat - leap-frog-Features.
Langlebige Feature-Zweige oder Zweige mit gleichzeitiger Veröffentlichung sind wahrscheinlich die beste Antwort auf diese Art von Problemen. Führen Sie das Neueste von Master in Ihren langjährigen Filialen zusammen (oder bündeln Sie es, wenn Sie damit vertraut sind) . Achten Sie darauf, nur Features zusammenzuführen, die bereits aktiv sind, da Sie sonst auf die Probleme stoßen, die Sie jetzt haben (zu viele vermischte Features in einem Zweig).
"Hotfix" - oder "Bugfix" -Zweige sind ein wesentlicher Bestandteil dieses Prozesses. Verwenden Sie sie für kleine, einmalige Korrekturen mit einem kurzen QS-Zyklus.
Ihrer Beschreibung nach ist es möglicherweise sogar besser, keinen offiziellen Entwicklungszweig zu unterhalten. Verzweigen Sie stattdessen alle Features vom Master und erstellen Sie zusammengeführte Release-Zweige, sobald ein Release identifiziert wurde.
3. Umgebungen
Ordnen Sie Git-Zweige nicht Ihren Umgebungen zu, mit Ausnahme von Production == Master. Der Zweig "Entwicklung" sollte als gebrochen angenommen werden. Release-Zweige werden an Testumgebungen weitergeleitet, unabhängig davon, ob es sich um eine QS-Umgebung oder eine Staging-Umgebung handelt. Wenn nötig, verschieben Sie einen bestimmten Feature-Zweig in eine Umgebung.
Wenn Sie mehr als einen Feature-Zweig haben, der separat freigegeben werden muss, aber gleichzeitig getestet wird ..... ¯ \ _ (ツ) _ / ¯ .... einen anderen Server hochfahren? Führen Sie sie möglicherweise zu einem Wegwerfzweig zusammen. Übernehmen Sie Korrekturen / Änderungen an den ursprünglichen Zweigen und führen Sie sie erneut zum Wegwerfzweig zusammen. Führen Sie die endgültige Genehmigung und UAT für einzelne Release-Zweige durch.
4. Entfernen von nicht genehmigten Features aus einer Zweigstelle
Dies ist, was die obigen Gedanken zu vermeiden versuchen, denn dies ist zweifellos die schmerzhafteste Sache, die zu versuchen und zu tun ist. Wenn Sie Glück haben, wurden Features mithilfe von Merge-Commits atomar in Ihre Entwicklungs- oder Testzweige integriert. Wenn Sie Pech haben, haben sich Entwickler direkt an die Entwicklungs- / Testbranche gewandt.
Wenn Sie sich auf ein Release vorbereiten und nicht genehmigte Änderungen haben, müssen Sie Git verwenden, um diese nicht genehmigten Commits aus dem Release-Zweig zu entfernen. Die beste Idee ist, dies vor dem Testen der Version zu tun .
Viel Glück.
quelle
Hier ist eine Idee: Verwenden Sie keine Release-Zweige mehr. Beginnen Sie stattdessen mit dem Einrichten von Funktionsumschaltungen und verwalten Sie diese über die Konfiguration. Auf diese Weise werden Feature-Zweige immer in Master zusammengeführt, und es sollte nie eine Frage darüber bestehen, welche Version sich in Test oder Produkt befindet. Wenn Sie eine Frage dazu haben, welche Funktionen / Implementierungen in einer Umgebung aktiv sind, überprüfen Sie einfach die Konfigurationsdatei.
quelle
Dies sollte eine einfache Sache der Koordination zwischen Test und Produktion sein. Wenn Sie in Git Feature-Zweige verwenden, beenden Sie einfach das Pushen abgeschlossener Feature-Zweige zu Test während eines Testzyklus und setzen Sie den Test fort, wenn der Test abgeschlossen ist.
Wenn Sie eine bessere Kontrolle benötigen, trennen Sie Test in einen Entwicklungsserver und einen Abnahmetestserver und koordinieren Sie die Zweige, die auf den Abnahmetestserver übertragen werden, mit dem Testteam. Jemand kann dann für den Start der endgültigen Bereitstellung vom Abnahmetest zur Produktion verantwortlich sein.
quelle
Arbeit stapelt sich
Dies ist nach meiner Erfahrung ein universelles Problem. Ich adressiere es mit:
quelle
Geäst
Sie benötigen einige Zweige, um diesen Prozess zu steuern:
1234-user-crud
,1235-bug-delete-catalog
etc. mit der Task - Nummer Identifizieren Sie Ihre Commits Auch dies wird Ihnen helfen , eine Menge , wenn Sie Probleme beim Zusammenführen haben (Sie werden).release
Filiale.Siehe den Git Flow:
Umgebungen
Sehr einfach:
Die Entwickler arbeiten in seiner Maschine, wobei jeder seine eigene Datenbank verwendet. Wenn es nicht möglich ist, dass jeder Entwickler eine eigene Datenbank hat (aufgrund von Lizenzen, Größe der Datenbank usw.), werden Sie viele Probleme haben, eine Datenbank zwischen den Entwicklern zu teilen: Wenn jemand eine Spalte oder eine Tabelle in seiner Filiale löscht, die anderen Zweige zählen immer noch mit dieser Spalte / Tabelle in der Datenbank.
Probleme
Das größte Problem in diesem Prozess ist die Zusammenführung.
Sie müssen die gleichen Zusammenführungen in
test
und neu erstellenrelease
. Dies ist schmerzhaft, wenn im Code einige gute Änderungen vorgenommen werden, z. B. Löschen einer Klasse, Verschieben / Umbenennen von Methoden usw. Da Sie keinen Code aus einemtest
(oderrelease
) Zweig in einen Feature-Zweig abrufen können, können die Zusammenführungszusagen nur in aufgelöst werden dastest
(oderrelease
). Sie lösen also dieselben Konflikte in zwei verschiedenen Zweigen und produzieren wahrscheinlich bei jeder Zusammenführung unterschiedlichen Code. In Zukunft werden Sie feststellen, dass das Testteam die Funktionen zweimal testen muss: in den Zweigentest
undrelease
, weil bei jeder Zusammenführung kann zu verschiedenen Fehlern führen.Ein weiteres Problem ist der
test
Zweig. Sie müssen diesen Zweigmaster
von Zeit zu Zeit "recyceln" (löschen und einen neuen von erstellen ), da einige alte Zweige (oder alte Zusammenführungen, zusammengeführte Zweige, die gelöscht wurden) dem neuen Code eine Menge Probleme bereiten können. viel von dem abweichen, was drin istmaster
. In diesem Moment müssen Sie die Kontrolle darüber haben, welche Zweige Sie erneut in der zusammenführen möchtentest
.Die wirklich beste Lösung ist, dass das Business-Team weiß, was in der nächsten Version geliefert werden muss, und jeder in einer einzigartigen Niederlassung arbeitet (Niederlassung entwickeln). Es ist gut für sie, die Möglichkeit zu wählen, welche "Fertig" -Funktion sie in der nächsten Version haben möchten, wann immer sie wollen (ich denke, dies ist Ihr Szenario), aber dies ist ein Albtraum für die Entwickler und (ich glaube) für die Testteam.
quelle
Klingt wie Sie verschmelzen Änderungen aus der Integration Niederlassung in Ihre Produktionszweig, der meiner Meinung nach keine gute Praxis ist, genau aus den Gründen , die Sie erwähnen. Sobald ein Produktionszweig für ein bestimmtes Release aus dem Hauptintegrationszweig gezogen wird, kann der Integrationszweig jederzeit divergieren (schließlich soll er in das nächste Release übergehen). Das Zusammenführen des Integrationszweigs mit dem aktuellen Release-Zweig kann zu Änderungen führen, die mit diesem Release nicht kompatibel sind.
IMHO wäre ein richtiger Prozess:
quelle
Persönlich klingt dies so, als ob es sich eher um ein Prozessproblem als um ein Werkzeugproblem handeln könnte. Ein paar Dinge, die ich hier vorschlagen würde:
Ehrlich gesagt denke ich, das Wichtigste wird die Disziplin darüber sein, wann Sie liefern und wie viele Aufgaben Sie tatsächlich in einem bestimmten Zeitraum vollständig erledigen können.
Zusammenfassend: Liefern Sie nur an die Qualitätssicherung, wenn Sie mit dem Testen und Bereitstellen der alten Funktionen fertig sind.
quelle
Wenn "alles getestet und genehmigt" ist, implementieren Sie das, was getestet und für die Produktion genehmigt wurde. Dies könnte ein bestimmtes Commit oder ein von Jenkins erzeugtes Build-Artefakt sein.
Es sollte keine Rolle spielen, dass spätere Festschreibungen für denselben Zweig noch nicht getestet wurden.
quelle