Insbesondere arbeite ich an einem Tool, das ein DVCS- und Build-System integriert, aber ich stelle mir die Herausforderung vor, die sich für jeden ergeben würde, der ein "Meta" -Tool (Compiler, VCS, Build-System, Test Runner usw.) entwickelt möchten sich durch "Hundefutter" entwickeln .
Meine Frage lautet: Ab wann verwende ich in einem Release-Prozess im Scrum-Stil, der den Verzweigungsworkflow verwendet, eine neuere Version des Tools im Entwicklungszyklus des Tools?
Ich suche nach einem Prozess, um ein Gleichgewicht zwischen:
Verwenden Sie ständig die
develop
Version des Tools: Ich stelle fest, dass ich meine eigene Entwicklung unterbreche, wenn Änderungen vorgenommen werden.Verwenden Sie ständig die
master
Version des Tools: Alle Probleme, die ich durch Hundefutter entdecke, sind Probleme, die bereits veröffentlicht wurden.
Antworten:
Das erste, was zu tun ist, sind sehr gründliche automatisierte Offline-Regressionstests. Machen Sie das Bestehen dieser Tests zu einer Mindestanforderung für das, was Sie offiziell verwenden.
Zweitens benötigen Sie eine absolut einfache Möglichkeit, auf die vorherige Arbeitsversion zurückzugreifen, wenn Probleme auftreten, die Ihre automatisierten Tests nicht erkennen.
Zum Beispiel wurde mein Linux-Kernel für eine Weile benutzerdefiniert gepatcht. Ich würde meinen Kernel auf demselben Computer patchen und kompilieren, auf dem ich ihn verwenden wollte, was bedeutete, dass ich meine Entwicklungsumgebung verlieren könnte, wenn ich einen fehlerhaften Kernel erstellen würde. Deshalb habe ich darauf geachtet, immer einen bekannten guten Kernel in meinem GRUB-Menü zu behalten. Wenn ich also einen Fehler gemacht habe, war ich mit einem einfachen Neustart wieder in einer guten Entwicklungsumgebung.
Das mit einem Team zu koordinieren ist schwierig, aber ich nehme an, es geht hauptsächlich darum, jedem zu erlauben, einen Fallback einzuleiten und die Gründe mitzuteilen. In der Versionskontrolle besteht eine Möglichkeit, dies zu bestimmen, in einer Art
last_known_good
Zweig, irgendwo zwischendevelop
undmaster
in Ihrem Workflow. Dort wird nichts verschoben, bis Sie einen Build erfolgreich mit Hundefutter gefüttert haben.quelle
dogfood
), der "irgendwo zwischendevelop
undmaster
" liegt. Vielleichtrelease
müssen Zweige vomdogfood
Zweig kommen.Wenn dieses Tool zur Erstellung von Software in Produktionsqualität verwendet wird (insbesondere wenn es rekursiv verwendet wird, dh um sich selbst zu entwickeln), würde ich Ihre Vorab-Testbemühungen verstärken und auf das Füttern von Hunden warten, bis die Veröffentlichung stabil genug ist, dass Sie es sind ziemlich sicher, dass Sie den Produktionscode nicht durch die Verwendung brechen werden.
Wenn Sie warten müssen, bis die Master-Version dieses Maß an Vertrauen hat, dann sei es so.
quelle
Git ist auch ein solches Werkzeug und macht offensichtlich auch Hundefutter. Aber es tut es in unterschiedlichem Ausmaß in verschiedenen Umgebungen. Auf den öffentlichen Servern wird nur Release ausgeführt, während Entwickler normalerweise entweder mit
next
(das ist der Name des Git-Projekts für "Entwickeln") oderpu
(noch mehr Entwickeln als Entwickeln) arbeiten. Jeder Entwickler, der durch ein Problem blockiert ist, kann zurnext
oder zurmaster
letzten Version zurückkehren, wenn er durch etwas blockiert wird und das Haupt-Repository nicht betroffen ist. Daher können Probleme durch Verweisen darauf behoben werden.Das Verzweigungsmodell ähnelt dem obigen mit leicht unterschiedlichen Namen.
master
Das ist, woraus große Releases gemacht werden,maint
ist der Release-Zweig für das nächste Point-Release,next
ähnelt dem Entwickeln mit einem kleinen Unterschied, dass Features zusammengeführt werden können, um separat zu beherrschen, nachdem sie bereits im nächsten sind, anstatt dass das gesamte nächste zusammengeführt wird.Es gibt einen zusätzlichen Zweig
pu
. Dies wird durch Zusammenführen aller Feature-Zweige erstellt, die für die Integration in Betracht gezogen werdennext
(der Zweig wird jedes Mal verworfen und neu erstellt). IIRC wird nur veröffentlicht, wenn es die Testsuite besteht. Zuletzt habe ich mir angesehen, dass Junio, der Betreuer, die Skripte ausgeführt hat, um sie regelmäßig von Hand zu erstellen, aber solche Skripte könnten jede Nacht durch kontinuierliche Integration ausgeführt werden, und ich glaube, Gerrit erstellt sie sogar automatisch.Das ist also die Antwort. Sie füttern die meisten Entwicklungsversionen, die Sie in Entwicklungsumgebungen haben, verwenden jedoch die vorherige Version zum Erstellen von Versionen.
quelle
pu
für etwas?Basierend auf der akzeptierten Antwort werde ich den Verzweigungsworkflow erweitern , um Verzweigungen ähnlich den folgenden zu verwalten:
master
: verschmilzt mitrelease-*
bei Schließungdogfood
: Zweige vonmaster
; enthält Korrekturen, die beim Füttern von Hunden festgestellt wurden; verschmilzt ab demdevelop
Zeitpunkt, an dem die Software für den internen Gebrauch als "stabil" eingestuft wird; Der Kopf dieses Zweigs kann bei Bedarf in der Zeit zurückversetzt werdendevelop
: Zweige vonmaster
; Enthält laufende Änderungen, Bugfixes sowie Zusammenführungen vondogfood
undfeature-*
Zweigenfeature-*
: Zweige vondevelop
; enthält Änderungen für eine bestimmte neue Funktionrelease-*
: verzweigt ab demdogfood
Zeitpunkt, an dem die Software für den externen Gebrauch als "stabil" eingestuft wird; Enthält Dokumentationsaktualisierungen und kleinere Bugfixes vor dem Zusammenführen mitmaster
quelle