Maven + SVN Branch + Bugfixy rubrika: Návrh

8 tdvorak
položil/-a 1.8.2014

Ahoj,
rád bych se zeptal, jak řešíte workflow při práci na projektu, který má následující parametry:

  • Jednou za delší dobu (ročně) nová hlavní verze.
  • Během roku občas bugfixy k aktuální deploynuté verzi.
  • SVN pro verzování, Maven pro build.

Ve vhodný okamžik vytvořím release 8.0.5 pomocí maven:prepare a maven:release založený na Trunku. Tím se vytvoří v SVN tag + uploadne release do Nexusu + posune verze na 8.0.6-SNAPSHOT. Dál jdou všechny nové commity do trunku. Po měsíci se najde v releasu chyba, pro kterou je třeba bugfix, aniž bych do fixu přidal i všechny nové commity z trunku.

Jak na to? Moje představa (zřejmě zkreslená GITem) by byla vytvořit branch z onoho release tagu (8.0.5). V ní opravit chybu a na té samé větvi vydat nový release. Bugfix pak prošířit zpět do Trunku a větev zahodit.

Teď dotazy. V SVN zřejmě není problém udělat branch založenou na tagu. V ní provedu opravu. Jde z takové větve pak udělat normálně release - aniž by rozbil trunk nebo z něj použil commity? A pokud ano, jakou verzi mu dát (vzhledem ke kolizi verzí oproti trunku)? Jak pak nejsnadněji dostanu opravu do trunku (jen jako patch, nebo existuje něco obdobného cherry-picku)?

Aby celá věc nebyla moc snadná, používám git-svn interface pro komunikaci s SVN repozitářem, ale to si můžu pro bugfix klidně odpustit. Asi by to proces jen zkomplikovalo, kdybych musel řešit ještě větve GITu+větve SVN a do toho maven release plugin. Přechod kompletně na GIT by se mi líbil, ale takovou pozici abych to prosadil ve firmě nemám. Musím se tedy poprat s tím, co je k dispozici.

Máte někdo zkušenosti s podobným workflow? Je možné takhle fungovat, nebo je třeba upravit proces nástrojům?

Mockát díky.

odkaz Vyřešeno
8 tdvorak
odpověděl/-a 5.8.2014

S problémem už jsem se popral a otestoval, že funguje vše jak má, pokud by to někoho zajímalo, popíšu nutné kroky:

Maven release plugin vytváří pro každý release nový tag. Tenhle tag(8.0.5) využijeme k vytvoření nové maintenance / bugfix branche(pro verzi 8.0):

svn copy {project_svn_url}/tags/8.0.5 {project_svn_url}/branches/8.0

Větev checkoutneme na náš stroj:

svn checkout {project_svn_url}/branches/8.0

Nyní je nutné upravit SCM konfiguraci v pom.xml tak, aby mířila na onu nově vytvořenou větev. Změněnou konfiguraci commitneme.

Teď už je větev připravená na bugfixy nebo jakoukoliv údržbu pro verzi 8.0, můžeme commitovat a releasovat dle libosti, stejně tak jako bychom to prováděli na trunku (mvn release:prepare, mvn release:perform). Kód bude použit z větve a maven bude dál vytvářet nové releasy a tagy založené na tomto kódu.

Zbývá vyřešit, co s číslováním verzí na trunku, protože tam teď vzniká konflikt. Čísla, která by přiřazoval maven v trunku přiřazuje i ve větvi. Další normální release z trunku by tak měl poskočit s minor nebo major verzí o jedničku, aby se řady nekryly (formát uvažuji MAJOR.MINOR.PATCH).

Pokud je fix relevantní i pro trunk kód, vytvoříme na větvi patch který následně aplikujeme i v trunku. Mergování větví jsem nezkoušel.

Pro zobrazení všech 2 odpovědí se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.