W szczególności pracuję nad narzędziem, które integruje DVCS i system kompilacji, ale wydaje mi się, że wyzwanie, przed którym stoję, pojawi się dla każdego, kto opracuje narzędzie „meta” (kompilator, VCS, system kompilacji, tester itp.), chcą rozwijać się poprzez „karmę dla psów” .
Moje pytanie brzmi: w procesie wydania w stylu Scrum z wykorzystaniem rozgałęzionego przepływu pracy , w którym momencie zacznę używać nowszej wersji narzędzia w cyklu rozwoju narzędzia?
Szukam procesu, aby stworzyć równowagę między:
stale używam
develop
wersji tego narzędzia: odkrywam, że wprowadzam zmiany w swoim rozwoju.stale korzystaj z
master
wersji narzędzia: wszelkie problemy, które odkryłem podczas karmienia psów, są już rozwiązane.
Odpowiedzi:
Pierwszą rzeczą do zrobienia są bardzo dokładne automatyczne testy regresji offline. Spraw, aby zaliczenie tych testów było minimalnym wymogiem dla tego, czego oficjalnie używasz.
Po drugie, potrzebujesz śmiertelnie prostego sposobu na powrót do poprzedniej działającej wersji, w przypadku problemów, których nie wykryły twoje automatyczne testy.
Na przykład moje jądro Linuksa było przez jakiś czas łatane. Łatałem i kompilowałem jądro na tym samym komputerze, na którym zamierzałem go używać, co oznaczało, że mogłem stracić środowisko programistyczne, jeśli utworzyłem wadliwe jądro. Dlatego zawsze starałem się zachować znane dobre jądro w moim menu GRUB, więc jeśli popełniłem błąd, wróciłem do dobrego środowiska programistycznego z prostym restartem.
Koordynacja tego z zespołem jest trudna, ale przypuszczam, że w większości chodzi o to, by pozwolić komukolwiek zainicjować awarię i podać przyczyny. W kontroli wersji jednym ze sposobów na oznaczenie tego byłoby coś w rodzaju
last_known_good
gałęzi, gdzieś pomiędzydevelop
imaster
w twoim przepływie pracy. Nic nie zostanie tam popchnięte, dopóki nie uda ci się nakarmić kompilacji.źródło
dogfood
), która jest „gdzieś pomiędzydevelop
imaster
”. Być możerelease
gałęzie muszą pochodzić zdogfood
gałęzi.Jeśli to narzędzie jest używane do tworzenia oprogramowania o jakości produkcyjnej (szczególnie jeśli jest używane rekurencyjnie, tj. Do samodzielnego rozwijania się), zwiększyłbym twoje wstępne wysiłki testowe i czekałem na dogfooding, aż wydanie będzie wystarczająco stabilne, abyś był całkiem pewny, że nie złamiesz kodu produkcyjnego, używając go.
Jeśli musisz poczekać, aż wersja główna uzyska ten poziom pewności, niech tak będzie.
źródło
Git jest również takim narzędziem i oczywiście również karmi dla psów. Ale robi to w różnym stopniu w różnych środowiskach. Publiczne serwery działają tylko w wersji, podczas gdy programiści zwykle pracują albo z
next
(to nazwa projektu git dla „rozwijania”) albopu
(jeszcze bardziej rozwijają niż rozwijają). Każdy programista, który jest zablokowany przez jakiś problem może wrócić donext
lubmaster
lub ostatniej wersji, gdy są one blokowane przez coś, a głównym repozytorium nie jest naruszona, więc problemy mogą być czyszczone, odwołując się do niego.Model rozgałęziający jest podobny do powyższego z nieco innymi nazwami.
master
jest to, z czego wykonywane są duże wydania,maint
jest gałąź wydania dla następnego wydania punktowego,next
jest podobny do rozwijania z niewielką różnicą, że funkcje mogą być scalone w celu opanowania osobno po przejściu do następnego, zamiast całego następnego.Jest dodatkowy oddział,
pu
. Jest to tworzone przez połączenie wszystkich gałęzi funkcji, które są rozważane do integracjinext
(gałąź jest odrzucana i odtwarzana za każdym razem). IIRC jest publikowany tylko wtedy, gdy przejdzie pakiet testowy. Ostatnio patrzyłem, że Junio, opiekun, uruchamiał skrypty, aby regularnie budować je ręcznie, ale takie skrypty można uruchamiać przez ciągłą integrację co noc i uważam, że Gerrit nawet tworzy je automatycznie.Tak więc jest to odpowiedź. Dogfoodujesz największą wersję programistyczną, którą masz w środowiskach programistycznych, ale korzystasz z poprzedniej wersji do tworzenia wersji.
źródło
pu
coś oznacza?W oparciu o zaakceptowaną odpowiedź zamierzam rozwinąć przepływ pracy rozgałęziania, aby zachować gałęzie podobne do następujących:
master
: łączy się zrelease-*
chwilą zamknięciadogfood
: oddziały zmaster
; zawiera poprawki zidentyfikowane podczas karmienia psów; łączy się z momentem,develop
gdy oprogramowanie zostanie uznane za „stabilne” do użytku wewnętrznego; w razie potrzeby głowa tego oddziału może zostać cofnięta w czasiedevelop
: oddziały zmaster
; obejmuje bieżące zmiany, poprawki błędów oraz połączeniadogfood
ifeature-*
gałęziefeature-*
: oddziały zdevelop
; zawiera zmiany dla konkretnej nowej funkcjirelease-*
: rozgałęzienia oddogfood
momentu, gdy oprogramowanie zostanie uznane za „stabilne” do użytku zewnętrznego; zawiera aktualizacje dokumentacji i drobne poprawki błędów przed połączeniemmaster
źródło