Jesteśmy małą firmą z wieloma zespołami, które zarządzają własnymi repozytoriami git. Jest to platforma internetowa, a artefakty każdego zespołu są rozmieszczane pod koniec dnia do nocnych testów. Staramy się sformalizować proces wokół wersji i pakowania.
Każdy zespół ma główną gałąź, w której codziennie się rozwija. Członkowie zespołu ds. Zapewnienia jakości chcą, aby artefakty ze zmian w zespole zostały rozmieszczone na stanowisku testowym, gdzie szef kuchni łączy wszystkie elementy. Artefakty to tarballi, ale chciałbym je przekonwertować na RPM, abyśmy mogli poprawnie myśleć i uzasadniać wersje.
Proces wydania obejmuje odcięcie gałęzi wydania od gałęzi programistycznej (w większości przypadków wzorca) każdego repozytorium git. Jest to następnie przekazywane do kontroli jakości, która przeprowadza testy i podpisuje zestaw artefaktów.
Na przykład jest to typowe repozytorium git z powiązanymi gałęziami wydania:
0-0-0-0-0-0-0-0-0-0 (master)
| |
0 0
(rel-1) |
0
(rel-2)
Utknąłem próbując wymyślić schemat wykonywania wersji pakietów pochodzących z gałęzi programistycznych. Nie chcemy nadmiernie oznaczać gałęzi master każdego repozytorium i ograniczać tagów tylko do wydania gałęzi. Ale powinniśmy być w stanie zapytać o wdrożone pakiety na maszynach testowych przy użyciu standardowej semantyki yum / rpm. Jak wyglądałyby wersje programistyczne, gdy gałąź główna nie ma znaczników? Rozumiem, że git describe
może dostarczyć mi użytecznej reprezentacji wersji kompilacji, ale działa dobrze, gdy różne punkty wydania w gałęzi są oznaczone.
EDYCJA 1: W odpowiedzi na odpowiedź @ Urban48
Pomyślałem, że powinienem trochę wyjaśnić proces wydawania. Na potrzeby tej dyskusji załóżmy, że mamy oddział master
we wszystkich repozytoriach. master
Gałąź jest uważany za gałąź rozwoju i wdrożeniu do zautomatyzowanego CI-CD włączona środowiska QA. W tym miejscu uruchamiany jest podzbiór nocnych testów w celu zapewnienia stabilności urządzenia nadrzędnego. Patrzymy na ten ciąg zadań przed wycięciem gałęzi wydania. Nasze gałęzie dystrybucji są krótkotrwałe. Powiedzmy, że po wycięciu gałęzi wydania (ze stabilnego wzorca) uruchamiana jest pełna regresja, wprowadzane są poprawki i wdrażane do produkcji. Zajmuje to około tygodnia. Wydajemy prawie co dwa tygodnie do produkcji.
Nasze gałęzie funkcji są zawsze odcinane od głównego i poddawane są pewnym testom programistycznym przed połączeniem z głównym, na którym przechodzą testy stabilności CI-CD.
Poprawki są tworzone na gałęziach poprawek (wycięte z gałęzi wydania) i wdrażane przy minimalnym testowaniu wpływu na produkcję.
Nasza strategia kontroli wersji dla gałęzi wydania i poprawek jest zgodna z semver. Rozgałęzienia wydania podczas cyklu kontroli jakości przechodzą przez wersje podobne v2.0.0-rc1
, v2.0.0-rc2
a na końcu po podpisaniu kontroli jakości v2.0.0
.
Czasami robimy kropkowane wydania dla małych funkcji, które są łączone w celu wydania gałęzi (a następnie opanowania) tam, gdzie się znajdują v2.1.0
. Poprawki zakładają v2.1.1
wzorzec.
Pytanie nie dotyczy jednak wersji tych gałęzi. Wolałbym nie zmieniać całkowicie tego schematu wersjonowania. Jedyna zmiana dotyczy branży deweloperskiej, tj. mistrz. Jak mogę niezawodnie wskazać w środowisku CI-CD, która wersja istnieje w poprzedniej wersji do produkcji. Najlepiej byłoby to zrobić poprzez inteligentne tagowanie git, ale preferowane jest coś, co nie nadmiernie otacza gałąź master.
rc
przyrostek? To dyktuje major.minor
wersję rozwojową. rc
i numer kompilacji można uzyskać tylko na tej podstawie. Również rc
w przypadku master nie ma sensu, ponieważ nigdy nie uwalniamy go od master.
rc
przyrostek.