Wyjaśniłem proponowany system kompilacji (Gradle / Artifactory / Jenkins / Chef) jednemu z naszych starszych architektów, a on skomentował mnie, z czym się nie zgadzam, ale nie mam wystarczającego doświadczenia, aby naprawdę się zastanowić.
Ten projekt tworzy bibliotekę Java (JAR) jako artefakt do ponownego wykorzystania przez inne zespoły. W przypadku wersji chciałbym zastosować podejście semantyczne:
<major>.<minor>.<patch>
Gdzie patch
wskazuje na poprawki błędów / awaryjne, minor
wskazuje wersje kompatybilne wstecz i major
wskazuje na ogromne refaktoryzacje interfejsu API i / lub zmiany niezgodne wstecz.
Jeśli chodzi o dostawę, to jest to, czego chcę: programista popełnia kod; powoduje to kompilację środowiska QA / TEST. Niektóre testy są uruchamiane (niektóre zautomatyzowane, niektóre ręczne). Jeśli wszystkie testy zakończą się pomyślnie, kompilacja produkcyjna opublikuje plik JAR w naszym wewnętrznym repozytorium. W tym momencie plik JAR powinien być odpowiednio wersjonowany, a moim pomysłem było użycie tego, build.number
który jest automatycznie generowany i udostępniany przez nasze narzędzie CI, aby działał jako numer poprawki.
Tak więc wersjonowanie byłoby w rzeczywistości:
<major>.<minor>.<build.number>
Znów, gdzie build.number
zapewnia narzędzie CI.
Architekt odrzucił to, mówiąc, że użycie numeru kompilacji CI było „nadużyciem” wersjonowania semantycznego.
Moje pytanie brzmi: czy jest to poprawne, a jeśli tak, to dlaczego? A jeśli nie to dlaczego nie?
Jednym z powodów jest to, że łatka może wymagać kilku kompilacji, więc jeśli masz wersję 5.7 i chcesz ją załatać do 5.7.1, ale pierwsze 2 poprawki błędów nie kompilują się, gdy zostaną przesłane do systemu CI, to będziesz o 5.7.3 przed wydaniem pierwszej łatki!
Odpowiedzią jest po prostu użycie 4 cyfr (jak zwykle w systemach Microsoft). Czwarty jest numerem kompilacji i jest używany „wyłącznie w celach informacyjnych”. Zasadniczo ludzie umieszczają tam numer wersji repozytorium (jeśli używają SVN, TFS lub podobnego), co jest naprawdę miłe, ponieważ można sprawdzić, które dokładne zatwierdzenie zostało użyte do zbudowania plików binarnych. Jeśli nie masz czegoś takiego, numer kompilacji CI jest rozsądnym przybliżeniem (można mieć nadzieję, że twój system CI zapamięta numery kompilacji i powiąże go z historią repo, ale nie jesteś zależny od CI system zapamiętuje je - nigdy nie możesz usunąć starych kompilacji).
Należy zauważyć, że schemat Microsoft do wersjonowania używa trzeciej pozycji dla numerów kompilacji. Chrome używa tylko 1 cyfry. Ubuntu używa daty. Nie ma „standardu” do użycia , z tym wyjątkiem, że wszystkie liczby muszą się zwiększać.
źródło