Wersja produktu, na przykład v1.0.0.100
, reprezentuje nie tylko unikalną wersję produkcyjną oprogramowania, ale pomaga zidentyfikować zestawy funkcji i etapy poprawek dla tego produktu. Obecnie widzę dwa sposoby utrzymania ostatecznej wersji pakietu / kompilacji / binarnej produktu:
Kontrola wersji. Plik gdzieś przechowuje numer wersji. Serwer kompilacji Continuous Integration (CI) będzie miał skrypt do zbudowania oprogramowania, które korzysta z tego sprawdzonego numeru wersji w celu zastosowania go do wszystkich potrzebnych obszarów oprogramowania (pliki binarne, pakiety instalatora, strony pomocy, dokumentacja itp.).
Parametry środowiska i / lub kompilacji. Są one utrzymywane poza kontrolą wersji (tzn. Nie są powiązane z migawką / znacznikiem / gałęzią). Skrypty kompilacji dystrybuują i używają liczby w ten sam sposób, jednak po prostu uzyskują wartość w inny sposób (jest ona dostarczana do skryptu kompilacji, zamiast skryptu wiedzieć, skąd wziąć go względem drzewa źródłowego).
Problem z pierwszym podejściem polega na tym, że może to komplikować połączenia między głównymi gałęziami. Jeśli nadal utrzymujesz 2 równoległe wydania tego samego oprogramowania, rozwiążesz konflikty podczas łączenia dwóch głównych linii, jeśli wersja uległa zmianie na obu od ostatniego scalenia.
Problem z drugim podejściem polega na pojednaniu. Kiedy wrócisz do wydania 1 rok temu, będziesz polegać wyłącznie na informacjach na tagu, aby zidentyfikować numer wydania.
W obu przypadkach mogą istnieć pewne aspekty numeru wersji, które nie są znane przed kompilacją CI. Na przykład kompilacja CI może programowo wstawić czwarty komponent, który tak naprawdę jest numerem kompilacji automatycznej (np. 140 kompilacja w gałęzi). Może to być także numer wersji w VCS.
Jak najlepiej nadążyć za numerem wersji oprogramowania? Czy „znane” części powinny być zawsze utrzymywane w VCS? A jeśli tak, to czy konflikty w głównych oddziałach są problemem?
Obecnie utrzymujemy nasz numer wersji za pomocą parametrów określonych i utrzymywanych w planie kompilacji CI (Atlassian Bamboo). Przed połączeniem z naszym master
oddziałem musimy zachować ostrożność, aby numery wersji były odpowiednio ustawione przed rozpoczęciem kompilacji CI . Jeśli chodzi o przepływ pracy Gitflow, uważam, że jeśli numer wersji byłby śledzony w kontroli źródła, moglibyśmy zagwarantować, że jest on poprawnie skonfigurowany, gdy tworzymy release
oddział w przygotowaniu wydania. W tym oddziale QA przeprowadziłoby końcowe testy integracji / dymu / regresji, a po podpisaniu master
nastąpi połączenie, które sygnalizuje zobowiązanie do wydania.
version.txt
którym jedna wersja zawiera jedną linię,1.0.7
a drugą1.2.0
jest tak trudny do rozwiązania? Jeśli jest to jedyny konflikt polegający na połączeniu dwóch rozdzielonych gałęzi, uważam się za bardzo szczęśliwy. Jak często to występuje? Jeśli tak się stanie, czy nie jest dobrze, że musisz zastanowić się, jaki numer wersji powinna mieć scalona wersja? (Przepraszamy za niejednoznaczne użycie słowa „wersja”.)