Tutorial: Firmeneigenes Repository mit Sonatype Nexus aufsetzen

Sonatype Nexus verwaltet Software-Bibliotheken oder -Abhängigkeiten und erlaubt deren bequeme Verteilung und Integration in Software-Projekte. Benötigt ein Entwickler eine bestimmte Bibliothek in seinem Projekt, so kann er sie über gängige Build-Tools wie Maven, Gradle, Ivy, Sbt oder andere dann vom Nexus-Server beziehen und eigene weiterentwickelte Bibliotheken diesem wiederum zur Verfügung stellen.

Wie ein solches internes Repository in wenigen Schritten aufgesetzt wird, zeigt dieses Tutorial. Im Anschluss daran stellen wir eine noch schnellere Variante mithilfe des Tools Docker vor.

Warum ein eigenes Repository?

Verschiedene Gründe sprechen für die Installation eines Nexus-Servers im Firmennetzwerk: Zunächst steht durch ihn ein Server für eigene, interne Bibliotheken und Abhängigkeiten zur Verfügung und ermöglicht so eine zentrale, sichere Verwaltung interner Projekte.

Des weiteren dient der Nexus-Server auch als Cache, da er externe Repositories spiegeln kann. So wird der Entwickler in seiner Arbeit nicht gebremst, wenn beispielsweise externe Repositories nicht erreichbar sind.

Außerdem besteht die Möglichkeit, auch Abhängigkeiten, die nicht im klassischen Maven-Format vorliegen, als solche zu verwalten und in Projekte zu integrieren. Die komfortable Weboberfläche erlaubt es, bequem nach Abhängigkeiten und Bibliotheken zu suchen und sie zu verwalten. Ein schöner Nebeneffekt für das Unternehmen ist dabei noch die Ersparnis an Bandbreite dar.

Installation und Konfiguration

Zunächst wird Nexus von der Sonatype-Website heruntergeladen und dann in ein passendes Verzeichnis entpackt. Danach stehen zwei Verzeichnisse zur Verfügung: Im ersten (nexus-version) befindet sich die Nexus-Anwendung samt Konfigurationsdateien und Skripten zum Initialisieren der Anwendung, im anderen Verzeichnis (sonatype-work) werden gespeicherte Bibliotheken und Laufzeitdaten wie z.B. der Suchindex abgelegt.

Der Nexus-Server kann nun wie folgt gestartet werden:

% ./bin/nexus start
Starting Nexus OSS...
Started Nexus OSS.
% ./bin/nexus status
Nexus OSS is running (6041).

Unter der Adresse http://localhost:8081/nexus/ steht nun die Weboberfläche zur Verfügung.

Nexus Weboberfläche nach der Schnellinstallation

Nexus-Weboberfläche nach der Schnellinstallation

Die Standard-Zugangsdaten sind die folgenden und sollten im Falle  einer öffentlich zugänglichen Installation umgehend geändert werden:

  • Admin-Benutzer:
    • Login: admin
    • Passwort: admin123
  • Deployment-Benutzer:
    • Login: deployment
    • Passwort: deployment123
Anmeldung als Administrator in der Nexus Weboberfläche

Anmeldung als Administrator in der Nexus Weboberfläche

In der Repository-Übersicht kann der Entwickler die vorkonfigurierten Repositories einsehen und bei Bedarf weitere ergänzen. Das erste Repository aus der Übersicht soll im folgenden Schritt in den Entwicklungsprozess integriert werden.

Nexus Repository Verwaltung

Nexus-Repository-Verwaltung

Client/Projekt-Konfiguration zur Nexus-Anbindung

Um nun den Nexus-Server in der Entwicklung mit Maven zu verwenden, sollte er als Mirror entweder global oder im Benutzer-Home-Verzeichnis (~/.m2) in der Datei settings.xml eingetragen werden:

<settings>
	<mirrors>
		<mirror>
			<id>seibertmedia-test-nexus</id>
			<name>Seibert Media Test Nexus</name>
			<url>http://localhost:8081/nexus/content/groups/public</url>
			<mirrorOf>*</mirrorOf>
		</mirror>
	</mirrors>
</settings>

Fehlende Drittanbieter-Repositories ergänzen

Möglicherweise bewirkt die Verwendung der Mirror-Option, dass nun ein Projekt nicht mehr gebaut werden kann, weil ein benötigtes Drittanbieter-Repository fehlt. Dies lässt sich bequem und unkompliziert lösen, indem wir einfach das fehlende Verzeichnis in der Nexus-Verzeichnisverwaltung als neues Proxy-Repository anlegen und dieses im Anschluss daran zu unserem (im obigen Beispiel  verwendeten) Gruppen-Repository hinzufügen.

Im folgenden Beispiel fügen wir das Maven-Repository für JBoss-Snapshot-Artefakte zunächst als Proxy-Repository zu unseren verwalteten Repositories hinzu:

Einrichten eines neuen Proxy-Repositories im Nexus

Einrichten eines neuen Proxy-Repositories im Nexus

Im Anschluss daran konfigurieren wir unser Gruppen-Repository so, dass es das JBoss-Snapshot-Repository berücksichtigt:

Dem Gruppen-Repository wird das neue Proxy-Repository hinzugefügt

Dem Gruppen-Repository wird das neue Proxy-Repository hinzugefügt

Artefakte-Deployment auf das Repository mit Maven

Haben sich im Laufe der Entwicklung Artefakte wie z.B. interne Bibliotheken o.ä. geändert und sollen zur Verfügung gestellt werden, können diese zwar auch per Hand über die Weboberfläche hochgeladen werden, bequemer ist es jedoch, diesen Prozess direkt über das Build-Tool (Maven) zu lösen.

Dazu wird zunächst im betroffenen Maven-Projekt in der Datei pom.xml die Information ergänzt, welche Repositories für die Verwaltung zuständig sind:

<distributionManagement>
  <repository>
     <id>deployment</id>
     <name>Internal Releases</name>
     <url>http://localhost:8081/nexus/content/repositories/releases/</url>
  </repository>
  <snapshotRepository>
     <id>deployment</id>
     <name>Internal Releases</name>
     <url>http://localhost:8081/nexus/content/repositories/snapshots/</url>
  </snapshotRepository>
</distributionManagement>

Die Zugangsdaten für den Server können ähnlich wie bei der Einstellung des Mirrors in der settings.xml wie folgt hinterlegt werden:

<settings>
   <servers>
      <server>
        <id>deployment</id>
        <username>deployment</username>
        <password>deployment123</password>
     </server>
  </servers>
</settings>

Schließlich ist es möglich, durch Ausführen des Befehls mvn deploy  im Projektverzeichnis das Artefakt auf den Nexus-Server hochzuladen und bereitzustellen:

% mvn deploy
[..] 
[INFO] ------------------------------------------------------------------------
[INFO] Building test-artifact 1.0.0
[INFO] ------------------------------------------------------------------------
[..]Uploading: http://localhost:8081/nexus/content/repositories/releases/net/seibertmedia/test-artifact/1.0.0/test-artifact-1.0.0.jar
Uploaded: http://localhost:8081/nexus/content/repositories/releases/net/seibertmedia/test-artifact/1.0.0/test-artifact-1.0.0.jar (3 KB at 19.2 KB/sec)
Uploading: http://localhost:8081/nexus/content/repositories/releases/net/seibertmedia/test-artifact/1.0.0/test-artifact-1.0.0.pom
Uploaded: http://localhost:8081/nexus/content/repositories/releases/net/seibertmedia/test-artifact/1.0.0/test-artifact-1.0.0.pom (2 KB at 43.6 KB/sec)
Downloading: http://localhost:8081/nexus/content/repositories/releases/net/seibertmedia/test-artifact/maven-metadata.xml
Uploading: http://localhost:8081/nexus/content/repositories/releases/net/seibertmedia/test-artifact/maven-metadata.xml
Uploaded: http://localhost:8081/nexus/content/repositories/releases/net/seibertmedia/test-artifact/maven-metadata.xml (309 B at 9.7 KB/sec)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

Nun steht die Bibliothek auf dem Nexus-Server zur Verfügung und ist über dessen Suchfunktion auffindbar:

Deploytes Artifakt auf dem Nexus Server

Bereitgestelltes Artefakt auf dem Nexus-Server

Alternativ: One-Minute-Installation mit Docker

Docker ist eine Open-Source-Software, die es schnell und bequem erlaubt, Anwendungen mitmilfe von Betriebssystemvirtualisierung in Containern zu isolieren und zu verwalten. Für eine ganze Bandbreite von Software-Produkten bestehen fertige Docker-Images, die eine schnelle Bereitstellung und Integration der entsprechenden Systeme ermöglichen.

Hier in Kurzform die Einrichtung eines Nexus-Servers mithilfe von Docker:

Der folgende Befehl startet eine virtualisierte Nexus-Instanz auf Port 8081:

docker run -p 8081:8081 --name nexus griff/sonatype-nexus

Hier eine Variante mit Angabe eines dedizierten Datenverzeichnisses:

mkdir -p /devdata/nexus
docker run -v /devdata/nexus:/opt/sonatype-work -p 8081:8081 --name nexus griff/sonatype-nexus

Ihr Partner für individuelle Software-Projekte

Planen Sie bereits ein konkretes Software-Projekt? Oder gibt es bestimmte Prozesse in Ihrem Unternehmen, die Ihnen schon lange Kopfzerbrechen bereiten? Bremst ein System oder eine Schnittstelle Ihre Mitarbeiter auf der einen oder Ihre Kunden auf der anderen Seite aus? Dann sprechen Sie mit uns darüber! Wir freuen uns darauf, gemeinsam eine individuelle Lösung zu entwickeln – bei höchster Qualität und voller Kostenkontrolle.  Wir legen größten Wert auf Erweiterbarkeit, Performanz, Skalierbarkeit, Plattformunabhängigkeit und Testbarkeit und schaffen individuelle High-End-Software-Lösungen, die sich auch im Nachhinein flexibel ausbauen und verändern lassen.

Weiterführende Infos

Was agile Software-Projekte dem Kunden bringen
Individuelle Software-Entwicklung: Workflows, Branching-Modelle und Continuous Delivery
Vorgehen nach Scrum: Die beste Wahl für den Kunden, die Agentur – und das Produkt
Echte Integration: Das Zusammenspiel von JIRA, Stash und Bamboo im Entwicklungsprozess
Der Beginn eines Happy Ends: Initialer Anforderungs-Workshop für erfolgreiche Projekte
Darum ist eine regelmäßige Kundenpräsenz beim Entwicklungsteam so sinnvoll

Artikel teilen:Share on FacebookTweet about this on TwitterShare on Google+Share on LinkedInEmail this to someonePrint this page
  • Heinz

    Aus der NetBeans-Doku (http://wiki.netbeans.org/FaqNexus): „NetBeans will refuse to download an index from a * mirror.“ Dies dürfte der Grund dafür sein, dass mit der vorgeschlagenenen Konfiguration beim Bearbeiten von Abhängigkeiten in POM-Dateien keine Vorschläge mehr für Versionsnummern usw. erscheinen.

    Abhilfe ist eine Spiegelangabe wie die folgende:

    central-mirror
    Central Mirror
    http://localhost:8081/nexus/content/repositories/central/
    central