Maven-Freigabe zum Nexus

Maven Release zum Nexus

1. Überblick

Im vorherigen Artikel dieser Reihe haben wir eindeployment process with Maven to Nexus eingerichtet. In diesem Artikel konfigurieren wirRelease Process with Maven - sowohl inpom des Projekts als auch in einem Jenkins-Job.

2. Repository inpom

Damit Maven auf einem Nexus Repository Server freigeben kann, müssen wir die Informationen vondefine the repositoryüber das ElementdistributionManagementabrufen:


   
      nexus-releases
      http://localhost:8081/nexus/content/repositories/releases
   

Das gehostete Release-Repository ist bei Nexus bereits im Auslieferungszustand, sodass es nicht explizit erstellt werden muss.

3. SCM in den Mavenpom

Der Freigabeprozess interagiert mit der Quellcodeverwaltung des Projekts. Dies bedeutet, dass wir zuerst das<scm>-Element in unserenpom.xml definieren müssen:


   scm:git:https://github.com/user/project.git
   http://github.com/user/project
   scm:git:https://github.com/user/project.git

Oder mit dem git-Protokoll:


   scm:git:[email protected]:user/project.git
   scm:git:[email protected]:user/project.git
   scm:git:[email protected]:user/project.git

4. Das Release Plugin

Das Standard-Maven-Plugin, das von einem Release-Prozess verwendet wird, istmaven-release-plugin - die Konfiguration für dieses Plugin ist minimal:


   org.apache.maven.plugins
   maven-release-plugin
   2.4.2
   
      [email protected]{project.version}
      true
      releases
   

Was hier wichtig ist, ist, dass diereleaseProfiles-Konfiguration tatsächlich ein Maven-Profil - dasreleases-Profil - zwingt, während des Freigabeprozesses aktiv zu werden.

In diesem Prozess wirdnexus-staging-maven-plugin verwendet, um eine Bereitstellung für das Nexus-Repository vonnexus-releasesdurchzuführen:


   
      releases
      
         
            
               org.sonatype.plugins
               nexus-staging-maven-plugin
               1.5.1
               
                  
                     default-deploy
                     deploy
                     
                        deploy
                     
                  
               
               
                  nexus-releases
                  http://localhost:8081/nexus/
                  true
               
            
         
      
   

Das Plugin ist so konfiguriert, dass der Freigabeprozesswithout the staging mechanism wiepreviously für den Bereitstellungsprozess (skipStaging=true) ausgeführt wird.

Und ähnlich wie beim BereitstellungsprozessReleasing to Nexus is a secured operation - daher werden wir das Benutzerformular Nexus von Out of the Boxdeploymenterneut verwenden.

Wir müssen auch die Anmeldeinformationen für dennexus-releases-Server in den globalensettings.xml (%USER_HOME%/.m2/settings.xml) konfigurieren:


   
      nexus-releases
      deployment
      the_pass_for_the_deployment_user
   

Dies ist die vollständige Konfiguration

5. Der Freigabeprozess

Teilen wir den Release-Prozess in kleine und fokussierte Schritte auf. Wir führen ein Release durch, wenn die aktuelle Version des Projekts eine SNAPSHOT-Version ist - sagen wir0.1-SNAPSHOT.

5.1. Release: Reinigen

Cleaning a Release wird:

  • Löschen Sie den Release-Deskriptor (release.properties).

  • Löschen Sie alle Backup-POM-Dateien

5.2. Release: vorbereiten

Der nächste Teil des Freigabeprozesses istPreparing the Release; dieser Wille:

  • Führen Sie einige Überprüfungen durch. Es sollten keine nicht festgeschriebenen Änderungen vorgenommen werden, und das Projekt sollte von keinen SNAPSHOT-Abhängigkeiten abhängig sein

  • Ändern Sie die Version des Projekts in der POM-Datei in eine vollständige Versionsnummer (entfernen Sie das SNAPSHOT-Suffix) - in unserem Beispiel -0.1

  • Führen Sie die Suites des Projektstestaus

  • festschreiben und die Änderungen vorantreiben

  • Erstellen Sie dietag aus diesem nicht SNAPSHOT-versionierten Code

  • increase the version des Projekts im POM - in unserem Beispiel -0.2-SNAPSHOT

  • festschreiben und die Änderungen vorantreiben

5.3. Release: durchführen

Der letzte Teil des Freigabeprozesses istPerforming the Release; dieser Wille:

  • Checkout-Release-Tag von SCM

  • Erstellen und Bereitstellen von freigegebenem Code

Dieser zweite Schritt des Prozesses basiert auf der Ausgabe des Vorbereitungsschritts -release.properties.

6. Auf Jenkins

Jenkins kann den Freigabeprozess auf zwei Arten ausführen: Entweder kann es seine eigenen Freigabe-Plugins verwenden oder es kann einfach ausgeführt werden, um die Freigabe mit einem Standard-Maven-Job auszuführen, der die richtigen Freigabeschritte ausführt.

Die vorhandenen Jenkins-Plugins, die sich auf den Veröffentlichungsprozess konzentrieren, sind:

Da der Maven-Befehl zum Ausführen der Freigabe jedoch einfach genug ist, können wir einfach einen Standard-Jenkins-Job definieren, um die Operation auszuführen - es sind keine Plugins erforderlich.

Für einen neuen Jenkins-Job (Erstellen eines maven2 / 3-Projekts) definieren wir zwei String-Parameter:releaseVersion=0.1 unddevelopmentVersion=0.2-SNAPSHOT.

Im Konfigurationsabschnitt vonBuildkönnen wir einfach den folgenden Maven-Befehl für die Ausführung konfigurieren:

Release:Clean release:prepare release:perform
   -DreleaseVersion=${releaseVersion} -DdevelopmentVersion=${developmentVersion}

Wenn Sie einen parametrisierten Job ausführen, fordert Jenkins den Benutzer auf, Werte für diese Parameter anzugeben. Daher müssen wir jedes Mal, wenn wir den Job ausführen, die richtigen Werte fürreleaseVersion unddevelopmentVersion eingeben.

Es lohnt sich auch,Workspace Cleanup Plugin zu verwenden und die OptionDelete workspace before build starts für diesen Build zu aktivieren. Beachten Sie jedoch, dass der Schrittperform der Version unbedingt mit demselben Befehl ausgeführt werden muss wie der Schrittprepare. Dies liegt daran, dass der letzte Schrittperformrelease.properties verwendet Datei erstellt vonprepare. Dies bedeutet, dass kein Jenkins-Jobprepare und kein andererperform ausführen kann.

7. Fazit

Dieser Artikel zeigte, wie der Prozess vonReleasing a Maven project mit oder ohne Jenkins implementiert wird. Ähnlich wieto Deployment verwendet dieser Prozessnexus-staging-maven-plugin, um mit Nexus zu interagieren, und konzentriert sich auf ein Git-Projekt.