Maven Deploy für Nexus

1. Übersicht

In einem früheren Artikel habe ich erläutert, wie ein Maven-Projekt lokal ein Drittanbieter-JAR installieren kann, das noch nicht in Maven Central (oder einem der anderen großen und öffentlich gehosteten Repositorys) bereitgestellt wurde.

Diese Lösung sollte nur in kleinen Projekten angewendet werden, in denen die Installation, Ausführung und Wartung eines vollständigen Nexus-Servers möglicherweise zu viel des Guten ist. Wenn jedoch ein Projekt wächst,

Nexus wird schnell zur einzigen echten und ausgereiften Option zum Hosten von Artefakten von Drittanbietern sowie zum Wiederverwenden interner Artefakte über Entwicklungsströme hinweg.

Dieser Artikel zeigt, wie Sie die Artefakte eines Projekts mit Maven in Nexus bereitstellen .

2. Nexus-Anforderungen in der pom.xml

Damit Maven der Lage sein , die Artefakte bereitstellen es in dem schafft Paket Phase des Build, braucht es die Repository - Informationen , wo die verpackten Artefakte, über das wird eingesetzt definieren distribution Element :

 nexus-snapshots //localhost:8081/nexus/content/repositories/snapshots 

Ein gehostetes, öffentliches Snapshots- Repository ist in Nexus sofort einsatzbereit, sodass Sie keine weiteren Elemente erstellen oder konfigurieren müssen. Mit Nexus können Sie ganz einfach die URLs der gehosteten Repositorys ermitteln. In jedem Repository wird der genaue Eintrag angezeigt, der im hinzugefügt werden solldes Projekts pom unter der Registerkarte Zusammenfassung .

3. Plugins

Standardmäßig verwaltet Maven den Bereitstellungsmechanismus über das Maven-Deployment-Plugin - dies ist der Bereitstellungsphase des Standard-Maven-Lebenszyklus zugeordnet:

 maven-deploy-plugin 2.8.1 default-deploy deploy deploy 

Das Maven-Deploy-Plugin ist eine praktikable Option für die Bereitstellung von Artefakten eines Projekts für Nexus. Es wurde jedoch nicht entwickelt, um die Vorteile von Nexus voll auszuschöpfen. Aus diesem Grund hat Sonatype ein Nexus-spezifisches Plugin erstellt - das Nexus-Staging-Maven-Plugin - das die erweiterten Funktionen von Nexus voll ausnutzen soll - Funktionen wie Staging.

Obwohl wir für einen einfachen Bereitstellungsprozess keine Staging-Funktionalität benötigen, werden wir dieses benutzerdefinierte Nexus-Plugin weiterentwickeln, da es mit dem klaren Zweck erstellt wurde, gut mit Nexus zu kommunizieren.

Der einzige Grund für die Verwendung des Maven-Deploy-Plugins besteht darin, die Option offen zu halten, zukünftig eine Alternative zu Nexus zu verwenden - beispielsweise ein Artifactory-Repository. Im Gegensatz zu anderen Komponenten, die sich während des gesamten Lebenszyklus eines Projekts möglicherweise ändern, ist es jedoch sehr unwahrscheinlich, dass sich der Maven Repository Manager ändert, sodass keine Flexibilität erforderlich ist.

Der erste Schritt bei der Verwendung eines anderen Bereitstellungs-Plugins in der Bereitstellungsphase besteht darin, die vorhandene Standardzuordnung zu deaktivieren:

 org.apache.maven.plugins maven-deploy-plugin ${maven-deploy-plugin.version} true 

Jetzt können wir definieren:

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

Das Bereitstellungsziel des Plugins wird der Bereitstellungsphase des Maven-Builds zugeordnet.

Beachten Sie auch, dass wir, wie bereits erwähnt, bei einer einfachen Bereitstellung von -SNAPSHOT- Artefakten auf Nexus keine Staging-Funktionalität benötigen , sodass diese über das System vollständig deaktiviert wird Element.

Standardmäßig enthält das Bereitstellungsziel den Staging-Workflow, der für Release-Builds empfohlen wird.

4. Die Datei global settings.xml

Die Bereitstellung auf Nexus ist ein gesicherter Vorgang. Zu diesem Zweck ist auf jeder Nexus-Instanz sofort ein Bereitstellungsbenutzer vorhanden.

Das Konfigurieren von Maven mit den Anmeldeinformationen dieses Bereitstellungsbenutzers , damit es ordnungsgemäß mit Nexus interagieren kann, kann nicht in der Datei pom.xml des Projekts durchgeführt werden. Dies liegt daran, dass die Syntax des Poms dies nicht zulässt, ganz zu schweigen von der Tatsache, dass der Pom möglicherweise ein öffentliches Artefakt ist und daher nicht für die Speicherung von Anmeldeinformationen geeignet ist.

Die Anmeldeinformationen des Servers müssen in der globalen Maven- Einstellung.xml definiert werden :

 nexus-snapshots deployment the_pass_for_the_deployment_user 

Der Server kann auch so konfiguriert werden, dass anstelle von Roh- und Klartextanmeldeinformationen eine schlüsselbasierte Sicherheit verwendet wird.

5. Der Bereitstellungsprozess

Das Durchführen des Bereitstellungsprozesses ist eine einfache Aufgabe:

mvn clean deploy -Dmaven.test.skip=true

Das Überspringen von Tests ist im Kontext eines Bereitstellungsjobs in Ordnung, da dieser Job der letzte Job aus einer Bereitstellungspipeline für das Projekt sein sollte.

Ein häufiges Beispiel für eine solche Bereitstellungspipeline wäre eine Abfolge von Jenkins-Jobs, von denen jeder nur dann den nächsten auslöst, wenn er erfolgreich abgeschlossen wird. Daher liegt es in der Verantwortung der vorherigen Jobs in der Pipeline, alle Testsuiten aus dem Projekt auszuführen. Zum Zeitpunkt der Ausführung des Bereitstellungsjobs sollten alle Tests bereits bestanden sein.

Wenn ein einzelner Befehl ausgeführt wird, können Tests aktiv ausgeführt werden, bevor die Bereitstellungsphase ausgeführt wird:

mvn clean deploy

6. Fazit

Dies ist eine einfache, aber hochwirksame Lösung für die Bereitstellung von Maven-Artefakten in Nexus.

Es ist auch etwas eigensinnig - das Nexus-Staging-Maven-Plugin wird anstelle des Standard- Maven-Deploy-Plugins verwendet . Die Staging-Funktionalität ist deaktiviert usw. Diese Auswahlmöglichkeiten machen die Lösung einfach und praktisch.

Die potenzielle Aktivierung der vollständigen Staging-Funktionalität kann Gegenstand eines zukünftigen Artikels sein.

Abschließend werden wir den Release-Prozess im nächsten Artikel diskutieren.