git, maven and jenkins - tworzenie wersji, tworzenie i tworzenie przepływów pracy

12

Jaki jest preferowany sposób wykonywania następujących czynności za pomocą git, maven i jenkins:

Tworzę aplikację, w której chciałbym utrzymywać gałęzie „dev” i „release”. Chciałbym, żeby Jenkins zbudował oba. Może się tak zdarzyć, że artefakty wydania będą miały wersje takie jak 1.5.2, a kompilacje deweloperów będą tylko 0.0.1-SNAPSHOT. Chciałbym nie mieć dwóch różnych plików pom.xml.

Zajrzałem do profili, ale wydaje się, że nie są w stanie zmienić wersji artefaktów. Jednym ze sposobów, na które spojrzałem, może być dodanie „kwalifikatora” do kompilacji testowych. Oczywiście mogę po prostu zmienić nazwę pliku, ponieważ prawdziwe informacje o artefaktach na ten temat nie są ważne, ponieważ aplikacja jest samodzielna.

Jaki byłby preferowany sposób na zrobienie tego? A jak byś to zrobił?

Varesa
źródło

Odpowiedzi:

3

Wyobrażam sobie, że powinna istnieć nieodłączna relacja między tymi gałęziami, która powinna rozwiązać problem numerów wersji.

Zwalnianie

Wyobrażam sobie, że możesz zrobić coś takiego jak scalenie gotowego do produkcji kodu z gałęzi deweloperskiej do gałęzi wydania, a następnie wykonać wydanie Maven (przez Jenkins lub ręcznie). To automatycznie rzutuje numery wersji do następnej kompilacji. Więc scalasz kod 1.4.7-SNAPSHOT z tą gałęzią, wykonujesz wydanie i wycinamy wersję 1.4.7, a Maven automatycznie zwinie kopię roboczą do 1.4.8-SNAPSHOT.

Aktualizacja linii bazowej (opcjonalnie)

Jeśli nie używasz już swojego pnia (lub gałęzi linii bazowej itp.) Jako miejsca dla swoich wydań, powinieneś aktualizować pień zaraz po zakończeniu wydania. Oznacza to, że numery wersji również się aktualizują. Ten krok może być dyskusyjny, jeśli weźmiesz pod uwagę gałąź wydania jako linię bazową.

Łączenie z linii bazowej do gałęzi deweloperów

Ważne jest, aby Twoja gałąź programistyczna była na bieżąco z aktualnym kodem produkcyjnym. Musisz scalić kod od linii podstawowej (lub gałęzi wydania, w zależności od implementacji) do gałęzi programistycznej. Jest to ważne w twoim przypadku, ponieważ oznacza to, że zmiany pom, które wystąpiły podczas procesu wydania, które zmieniły wersję na 1.4.8-SNAPSHOT, są wprowadzane do tej gałęzi.


Na podstawie przeczytanych przeze mnie (a także procesów w mojej organizacji), wydaje się, że jest to dość standardowe i skuteczne wykorzystanie wydań i migawek Maven, a zamiast utrzymywania całkowicie odłączonych numerów wersji w różnych gałęziach, łatwo jest powiedzieć że jakakolwiek kompilacja 1.4.7-SNAPSHOT była w rzeczywistości bezpośrednim poprzednikiem wersji 1.4.7. Są spokrewnieni. Chciałbym powiedzieć, że jeśli nie łączysz się tam i z powrotem między tymi gałęziami, źle robisz zarówno wersje SCM, jak i Maven, i narażasz się na tworzenie kodu niezgodnego z produkcją , ponownie wprowadza błędy w produkcji itp.

RonU
źródło
Czy przez „maven release” rozumiesz wtyczkę maven-release-plugin?
varesa
Tak. Możesz także skonfigurować niektóre kompilacje w Jenkins jako kompilacje Maven Release, które wywołują wtyczkę maven-release-plugin.
RonU
To tak, jakby szukali „klucza”. Dzięki!
varesa
1

Przemyśl swoje podejście.

Bardzo często używa się np. 1.4.2 dla wersji wydania, a następnie 1.4.3-SNAPSHOT do rozwoju do następnej.

Kiedy potrzebujesz zachować wydanie 1.4.2, TO gałąź z zatwierdzenia, które zapoczątkowało twój artefakt 1.4.2.

Następnie podajesz Jenkinsowi lokalizację swojego repozytorium i nazwę oddziału, co powoduje wyewidencjonowanie zestawu plików, a następnie mówisz Jenkinsowi, aby użył maven w projekcie do jego zbudowania.

Uwaga: Odkryłem, że bardzo korzystne jest użycie pojedynczego pliku pom.xml do zbudowania rzeczywistego artefaktu i innego pliku pom.xml do utworzenia rzeczywistych bitów, które zostaną przesłane do klienta.


źródło