Git, Maven und Jenkins - Versionsverwaltung, Entwicklung und Release bilden den Workflow

12

Was ist die bevorzugte Methode, um mit Git, Maven und Jenkins Folgendes zu tun:

Ich entwickle eine Anwendung, die ich "dev" - und "release" -Zweige pflegen möchte. Ich möchte, dass Jenkins beides baut. Es könnte sein, dass die Release-Artefakte Versionen wie 1.5.2 haben und die Dev-Builds nur 0.0.1-SNAPSHOTs sind. Ich möchte nicht 2 verschiedene pom.xml-Dateien haben müssen.

Ich habe mir Profile angesehen, aber sie scheinen nicht in der Lage zu sein, Artefaktversionen zu ändern. Eine Möglichkeit, die ich mir angesehen habe, könnte darin bestehen, den Test-Builds ein Qualifikationsmerkmal hinzuzufügen. Natürlich könnte ich die Datei einfach umbenennen, da die eigentlichen Artefaktinformationen hier nicht wichtig sind, da es sich bei der App um eine eigenständige handelt.

Was wäre der bevorzugte Weg, um dies zu tun? Oder wie würdest du das machen?

varesa
quelle

Antworten:

3

Ich würde mir vorstellen, dass es eine inhärente Beziehung zwischen diesen Zweigen geben sollte, die das Problem der Versionsnummern angehen sollte.

Loslassen

Ich stelle mir vor, Sie könnten so etwas wie produktionsfertigen Code aus dem Entwicklungszweig in den Veröffentlichungszweig zusammenführen und dann eine Maven-Veröffentlichung durchführen (über Jenkins oder manuell). Dadurch werden die Versionsnummern automatisch zum nächsten Build übertragen. Sie fügen also den Code 1.4.7-SNAPSHOT in diesen Zweig ein, führen die Veröffentlichung durch und schneiden die Version 1.4.7 aus, und Maven setzt Ihre Arbeitskopie automatisch auf 1.4.8-SNAPSHOT um.

Aktualisieren der Baseline (optional)

Wenn Sie Ihren Trunk (oder Basiszweig usw.) noch nicht als Speicherort für Ihre Releases verwenden, sollten Sie den Trunk aktualisieren, sobald Sie eine Release abgeschlossen haben. Dies bedeutet, dass auch Ihre Versionsnummern aktualisiert werden. Dieser Schritt ist möglicherweise umstritten, wenn Sie nur den Release-Zweig als Basis betrachten.

Up-Merge von Baseline zu Dev Branch

Es ist wichtig, dass Ihre Entwicklungsabteilung mit dem tatsächlichen Produktionscode auf dem neuesten Stand ist . Sie müssen den Code von der Baseline (oder dem Release-Zweig, je nach Implementierung) bis zu Ihrem Entwicklungszweig zusammenführen. Dies ist in Ihrem Fall wichtig, da die POM-Änderungen, die während des Veröffentlichungsprozesses aufgetreten sind und die Version auf 1.4.8-SNAPSHOT geändert haben, in diesen Zweig übernommen werden.


Aufgrund meiner Lektüre (und der Prozesse in meiner Organisation) scheint dies ein ziemlich standardmäßiger und effektiver Einsatz von Maven-Releases und -Snapshots zu sein. Anstatt vollständig getrennte Versionsnummern in verschiedenen Zweigen beizubehalten, ist dies leicht zu erkennen dass jeder 1.4.7-SNAPSHOT-Build tatsächlich ein unmittelbarer Vorgänger des 1.4.7-Releases war. Sie sind verwandt. Ich würde sogar sagen, wenn Sie nicht zwischen diesen Zweigen hin- und herschmelzen, dass Sie sowohl SCM- als auch Maven-Versionierung falsch machen und sich dem Risiko aussetzen, gegen Code zu entwickeln, der nicht zur Produktion passt , führt Fehler wieder in die Produktion ein usw.

RonU
quelle
Mit "Maven Release" meinen Sie das Maven-Release-Plugin?
Varesa
Ja. Sie können auch bestimmte Builds in Jenkins als Maven Release-Builds einrichten, wodurch das Maven Release-Plugin aufgerufen wird.
RonU
Das ist wie der "Schlüssel" gesucht haben. Vielen Dank!
Varesa
1

Überdenken Sie Ihren Ansatz.

Es ist sehr üblich, zB 1.4.2 für eine Release-Version und dann 1.4.3-SNAPSHOT für die Entwicklung zur nächsten zu verwenden.

Wenn Sie das Release 1.4.2 THEN warten müssen, verzweigen Sie es von dem Commit, das Ihr Artefakt 1.4.2 erzeugt hat.

Dann teilen Sie Jenkins den Speicherort Ihres Repositorys und den Namen des Zweigs mit, was dazu führt, dass ein Dateisatz ausgecheckt wird, und dann weisen Sie Jenkins an, maven in Ihrem Projekt zu verwenden, um ihn zu erstellen.

Hinweis: Ich habe festgestellt, dass es sehr vorteilhaft ist, eine einzige pom.xml-Datei zum Erstellen des eigentlichen Artefakts und eine weitere pom.xml-Datei zum Erstellen der eigentlichen Bits zu verwenden, die an den Kunden gesendet werden.


quelle