2015-11-20 10 views
14

Mam kilka konkretnych pytań na temat wersjonowania w ciągłej dostawie. Myślę, że rozumiem globalny przepływ pracy, który jest mniej więcej taki:Tworzenie wersji w ciągłej dostawie

1) Code 
2) Push to version Control 
3) Continuous Integration (unit, integration and end-to-end auto testing) 
4) Artifacts deployment 

Co z wersjonowaniem? Jak zarządzać wersjami kompilacji?

Załóżmy, że pracujemy nad projektem opartym na Maven z wersją semantyczną: major.minor.build.

Kiedy deweloper zatwierdza zmiany na serwerze VCS i CI, wykonaj kompilację, czy serwer CI powinien zwiększyć wersję kompilacji i utworzyć znacznik w VCS?

Czy ta wersja kompilacji jest obecna w kodzie źródłowym? Jeśli tak, po każdym naciśnięciu przycisku VCS programista powinien zaktualizować projekt, ponieważ serwer CI przydzielił zmiany w projekcie (przyrost wersji).

Jestem trochę zdezorientowany i chciałbym zrozumieć przebieg pracy płyty CD w praktyczny sposób.

+1

Istnieje wiele sposobów podejścia do tego, w zależności od okoliczności i celów, które mogą być lepsze od innych. Istnieje wiele "standardowych" książek, które obejmują te podejścia ("Release It" jest jednym z nich). Rozpocznij od odpowiedzi na pytanie: Czy chcesz, aby każda kompilacja skutkowała wyjątkowym wersjonowanym artefaktem. Czemu? Dlaczego nie? A może "ręcznie" (np. Po sprintu) zdecydujesz, że nadszedł czas na nową wersję? – reto

+1

Pytanie prawdopodobnie lepiej pasuje do http://programmers.stackexchange.com/ – reto

Odpowiedz

16

W ogóle nie powinno być:

  1. numeru wersji ręcznie zarządzać.
  2. Dowolna liczba numerów "referencyjnych".

Pierwsza kwestia ma kluczowe znaczenie, jeśli zależy Ci na tym, abyś miał do czynienia z semver lub na wypadek, gdybyś musiał podać informacje o kompatybilności innych narzędzi/bibliotek. Tylko ty możesz stwierdzić, czy nowe "wydanie" zepsuje cokolwiek - najbardziej popularny system wskazań jest zgodny z regułami seminarza.

Drugi punkt ("numer referencyjny") może, ale nie musi być dla ciebie ważny. Zwykle nie potrzebujesz więcej niż jednego, numeru wersji kompilatora CI/CD (każda popularna usługa CI/CD ma identyfikator numeru wersji budowania, który odnosi się do tej konkretnej "kompilacji"). Chodzi o to, że możesz szybko sprawdzić powiązaną kompilację/logi CI/CD artefaktu, jeśli tego potrzebujesz.

Jak połączyć dwie (lub więcej) części?

Często zdarza się, że mają oddzielne numery "wersja" i "kompilacja". W rzeczywistości każdy projekt iOS ma to domyślnie. W takim przypadku numer "wersja" jest zarządzany ręcznie, a osobny numer "kompilacji" jest zarządzany automatycznie. Numer kompilacji może być w nazwie artefaktu, lub mogą być drukowane, gdy ktoś pobiera informacje --version w przypadku binarnym (ex: $ brew info ->0.9.5 (git revision 18c48; last commit 2015-11-02)

Ewentualnie można dodać nowe elementy do semver (x.x.x.BUILDNUM), użyj ostatni składnik semver (x.x.BUILDNUM - Nie polecam tego, jeśli masz bezwzględnie inkrementalny BUILDNUM) lub po prostu dodaj numer "kompilacji" w nazwie artefaktu:

To są wszystkie możliwości, będziesz mieć aby wybrać najlepszy dla twojej sprawy Musisz zdefiniować znaczenie tych liczb i zdecydować, gdzie należy je przedstawić (np. czy powinno być częścią --version lub czy powinno być po prostu częścią nazwy pliku).

edycja: aby zastanowić się nad swoim pytaniem dotyczącym "czy serwer CI powinien zwiększać wersję kompilacji i tworzyć znaczniki w VCS?" - Nigdy bym tego nie polecił. Serwer CI może również powodować problemy, nigdy nie należy modyfikować kodu z procesu CI. Przypadkowe nadpisanie (np.życie pchające) coś może być naprawdę niebezpieczne. Dlatego lepiej po prostu użyć numeru kompilacji udostępnionego przez usługę CI/CD.

+0

Dzięki! Bardzo mi pomogłeś. Jeszcze jedno pytanie: Jeśli zdecyduję się umieścić numer kompilacji w artefakcie i ręcznie zarządzam numerem wersji, przypuszczam, że powinienem oznaczyć tag w VCS, gdy inkrementuję ręcznie wersję, a nie w każdej kompilacji. Czy mam rację? –

+0

Tak, zazwyczaj mamy skrypt, który to robi, oparty na prostym pliku tekstowym. Uruchomimy go ręcznie, gdy chcemy zwiększyć numer wersji, zwiększy go w pliku wersji, a następnie utworzy commit i tag. Oczywiście możesz to zrobić ręcznie, ale jest to bardziej podatne na błędy. –

+0

Dla odmiany, jest to oczyszczona wersja naszego skryptu, która podbija numer wersji jednego z naszych projektów: https://gist.github.com/viktorbenei/d341e74c8321473c8a67 - najpierw sprawdza, czy jest coś, co jeszcze nie zostało zatwierdzone, następnie przechodzi do wybicia numeru wersji, zatwierdzenia zmiany i utworzenia powiązanego tagu git. –

Powiązane problemy