1. Übersicht
Artifact Registry ermöglicht das Speichern verschiedener Artefakttypen, das Erstellen mehrerer Repositories in einem einzelnen Projekt und das Verknüpfen einer bestimmten Region oder Mehrfachregion mit jedem Repository. Es gibt mehrere Repository-Modi. Jeder Modus erfüllt einen anderen Zweck. Das folgende Diagramm zeigt eine von vielen Möglichkeiten, wie Sie Repositories in verschiedenen Modi zusammen verwenden können. Das Diagramm zeigt einen Workflow in zwei Google Cloud-Projekten. In einem Entwicklungsprojekt erstellen Entwickler eine Java-Anwendung. In einem separaten Laufzeitprojekt wird mit einem weiteren Build ein Container-Image mit der Anwendung für die Bereitstellung in der Google Kubernetes Engine erstellt.
In diesem Lab lernen Sie, wie Sie die folgenden Aufgaben ausführen.
- Standard-Repositories für die Bereitstellung privater Pakete verwenden
- Remote-Repositories zum Caching von Maven-Zentralen-Paketen verwenden
- Virtuelle Repositories verwenden, um mehrere Upstream-Repositories in einer Konfiguration zu kombinieren
Einrichten der Umgebung im eigenen Tempo
- Melden Sie sich in der Google Cloud Console an und erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes. Wenn Sie noch kein Gmail- oder Google Workspace-Konto haben, müssen Sie ein Konto erstellen.
- Der Projektname ist der Anzeigename für die Teilnehmer dieses Projekts. Es ist ein Zeichenstring, der von Google APIs nicht verwendet wird. Sie können ihn jederzeit aktualisieren.
- Die Projekt-ID ist für alle Google Cloud-Projekte eindeutig und kann nach der Festlegung nicht mehr geändert werden. In der Cloud Console wird automatisch ein eindeutiger String generiert. Normalerweise spielt es keine Rolle, wie er lautet. In den meisten Codelabs müssen Sie auf die Projekt-ID verweisen (normalerweise als
PROJECT_ID
gekennzeichnet). Wenn Ihnen die generierte ID nicht gefällt, können Sie eine andere zufällige generieren. Alternativ können Sie Ihr eigenes Gerät ausprobieren, um zu sehen, ob es verfügbar ist. Sie kann nach diesem Schritt nicht mehr geändert werden und bleibt für die Dauer des Projekts bestehen. - Zur Information: Es gibt einen dritten Wert, die Projektnummer, die von einigen APIs verwendet wird. Weitere Informationen zu diesen drei Werten finden Sie in der Dokumentation.
- Als Nächstes müssen Sie in der Cloud Console die Abrechnung aktivieren, um Cloud-Ressourcen/-APIs verwenden zu können. Die Ausführung dieses Codelabs sollte nur wenige Kosten verursachen, wenn überhaupt. Wenn Sie die Ressourcen deaktivieren möchten, damit keine Kosten über diese Anleitung hinaus anfallen, können Sie die von Ihnen erstellten Ressourcen oder das gesamte Projekt löschen. Neuen Nutzern der Google Cloud Platform steht das kostenlose Testprogramm mit einem Guthaben von 300$ zur Verfügung.
Workspace-Einrichtung
gcloud einrichten
Legen Sie in Cloud Shell eine Projekt-ID und Projektnummer fest. Speichern Sie sie als Variablen vom Typ PROJECT_ID
und PROJECT_NUMBER
.
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
APIs aktivieren
gcloud services enable artifactregistry.googleapis.com
Repository klonen
git clone https://github.com/GoogleCloudPlatform/java-docs-samples
cd java-docs-samples/container-registry/container-analysis
2. Standard-Repositories
Standard-Repositories bieten eine Möglichkeit, Ihre privaten Pakete zu speichern und für andere Anwendungen freizugeben.
Standard-Maven-Repository erstellen
Führen Sie in Cloud Shell den folgenden Befehl aus, um ein Repository für Java-Artefakte zu erstellen:
gcloud artifacts repositories create container-dev-java-repo \
--repository-format=maven \
--location=us-central1 \
--description="Java package repository for Container Dev Workshop"
Klicken Sie auf „Autorisieren“, wenn die Aufforderung zur Autorisierung von Cloud Shell angezeigt wird.
Rufen Sie die Google Cloud Console auf und gehen Sie zu „Artifact Registry“ - Repositories (Artefakt-Registrierung - Repositories). Sehen Sie sich das neu erstellte Maven-Repository mit dem Namen container-dev-java-repo
an. Wenn Sie darauf klicken, sehen Sie, dass es derzeit leer ist.
gcloud artifacts repositories describe container-dev-java-repo \
--location=us-central1
Sie sollten eine Antwort ähnlich der folgenden erhalten:
Encryption: Google-managed key Repository Size: 0.000MB createTime: '2023-03-21T19:01:45.461589Z' description: Java package repository for Container Dev Workshop format: MAVEN mavenConfig: {} mode: STANDARD_REPOSITORY name: projects/qwiklabs-gcp-03-4304110dc461/locations/us-central1/repositories/container-dev-java-repo updateTime: '2023-03-21T19:01:45.461589Z'
Maven für Artifact Registry konfigurieren
Führen Sie den folgenden Befehl aus, um die Repository-Konfiguration zu drucken und sie dem Java-Projekt hinzuzufügen:
gcloud artifacts print-settings mvn \
--repository=container-dev-java-repo \
--location=us-central1
Der vorherige Befehl gibt XML zurück, das der pom.xml-Datei Ihres Projekts hinzugefügt werden soll.
- Im Abschnitt Repositories wird angegeben, wo Maven Remote-Artefakte für die Verwendung im aktuellen Projekt herunterladen kann.
- Im Abschnitt distributionManagement wird angegeben, in welches Remote-Repository das Projekt bei der Bereitstellung gepusht wird.
- Im Abschnitt extensions wird „artifactregistry-maven-wagon“ hinzugefügt, wodurch die Authentifizierungs- und Transportebene aktiviert wird, die für die Verbindung mit Artifact Registry erforderlich ist.
- Hinweis: Erweiterungen können in pom.xml oder extensions.xml vorhanden sein. Wenn das Projekt von einem übergeordneten Projekt abhängt, wird auf diese Abhängigkeiten zugegriffen, bevor der Rest der Einträge in der pom.xml geladen wird. Damit das übergeordnete Element Zugriff auf die Erweiterung hat, kann sie in einer Datei „extensions.xml“ abgelegt werden, die vor der Datei „pom.xml“ geladen wird und sie so für die übergeordneten Abhängigkeiten verfügbar macht.
Kopieren Sie die drei Abschnitte, öffnen Sie die Datei pom.xml
im Cloud Shell-Editor und fügen Sie die zurückgegebenen Einstellungen unten in der Datei direkt innerhalb des schließenden project
-Tags ein.
Tipp: Führen Sie in Cloud Shell den folgenden Befehl im Terminal aus, um den Editor im aktuellen Verzeichnis zu öffnen.
cloudshell workspace .
Beispiel: (Ihre Projektnamen in den URLs werden sich unterscheiden)
...
<distributionManagement>
<snapshotRepository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
</snapshotRepository>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
</repository>
</distributionManagement>
<repositories>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<build>
<extensions>
<extension>
<groupId>com.google.cloud.artifactregistry</groupId>
<artifactId>artifactregistry-maven-wagon</artifactId>
<version>2.2.0</version>
</extension>
</extensions>
</build>
</project>
Java-Paket in Artifact Registry hochladen
Wenn Artifact Registry in Maven konfiguriert ist, können Sie jetzt Java-JAR-Dateien in Artifact Registry speichern, um sie für andere Projekte in Ihrer Organisation zu verwenden.
Führen Sie den folgenden Befehl aus, um Ihr Java-Paket in Artifact Registry hochzuladen:
mvn deploy -DskipTests
Wenn Sie diesen Befehl noch einmal ausführen möchten, müssen Sie die Version in der pom.xml erhöhen.
Java-Paket in Artifact Registry prüfen
Rufen Sie Cloud Console - Artifact Registry - Repositories auf. Klicken Sie auf container-dev-java-repo
und prüfen Sie, ob das Binärartefakt hello-world
vorhanden ist:
3. Remote-Repositories
Remote-Repositories bieten die Möglichkeit, Pakete von Drittanbietern im Cache zu speichern, um die Zuverlässigkeit und Sicherheit zu erhöhen.
Remote-Repository erstellen
Hinweis: Weitere Informationen zur Authentifizierung und Konfiguration finden Sie in der Produktdokumentation.
Führen Sie in Cloud Shell den folgenden Befehl aus, um ein Remote-Repository für Maven Central-Artefakte zu erstellen:
gcloud artifacts repositories create maven-central-cache \
--project=$PROJECT_ID \
--repository-format=maven \
--location=us-central1 \
--description="Remote repository for Maven Central caching" \
--mode=remote-repository \
--remote-repo-config-desc="Maven Central" \
--remote-mvn-repo=MAVEN-CENTRAL
Repository in der Console überprüfen
Rufen Sie Cloud Console - Artifact Registry - Repositories auf. Klicken Sie auf maven-central-cache
. Sie sehen, dass es erstellt wurde und derzeit leer ist.
Repository im Terminal prüfen
gcloud artifacts repositories describe maven-central-cache \
--location=us-central1
Repository in Ihr Projekt einbinden
Führen Sie den folgenden Befehl aus, um die Repository-Konfiguration zu drucken und sie dem Java-Projekt hinzuzufügen:
gcloud artifacts print-settings mvn \
--repository=maven-central-cache \
--location=us-central1
Fügen Sie den Abschnitt „Repository“ in Ihre pom.xml-Datei ein. Kopieren Sie das äußere <repositories>-Tag nicht aus der Ausgabe.
Ändern Sie die ID des neu hinzugefügten Repositories in „central“, damit jeder Repository-Eintrag eine eindeutige ID hat.
Beispiel: (Ihre Projektnamen in den URLs sind unterschiedlich)
...
<distributionManagement>
<snapshotRepository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
</snapshotRepository>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
</repository>
</distributionManagement>
<repositories>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>central</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/maven-central-cache</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<build>
<extensions>
<extension>
<groupId>com.google.cloud.artifactregistry</groupId>
<artifactId>artifactregistry-maven-wagon</artifactId>
<version>2.2.0</version>
</extension>
</extensions>
</build>
</project>
Führen Sie die folgenden Befehle in Ihrem Terminal aus, um eine extensions.xml
für Ihr Projekt zu erstellen. Verwenden Sie dazu den Mechanismus Core Extensions, damit Maven übergeordnete oder Plug-in-Abhängigkeiten aus Artifact Registry auflösen kann.
mkdir .mvn
cat > .mvn/extensions.xml << EOF
<extensions xmlns="http://maven.apache.org/EXTENSIONS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/EXTENSIONS/1.0.0 http://maven.apache.org/xsd/core-extensions-1.0.0.xsd">
<extension>
<groupId>com.google.cloud.artifactregistry</groupId>
<artifactId>artifactregistry-maven-wagon</artifactId>
<version>2.2.0</version>
</extension>
</extensions>
EOF
Abhängigkeiten aus dem Remote-Repository abrufen
Führen Sie den folgenden Befehl aus, um Ihre Anwendung mit dem Remote-Repository zu kompilieren:
rm -rf ~/.m2/repository
mvn compile
Pakete in der Console prüfen
Rufen Sie Cloud Console - Artifact Registry - Repositories auf. Klicken Sie auf maven-central-cache
und prüfen Sie, ob die dort im Cache gespeicherten Binärartefakte vorhanden sind:
4. Virtuelle Repositories
Virtuelle Repositories dienen als Schnittstelle, über die mehrere Repositories über eine einzige Konfiguration aufgerufen werden können. Dies vereinfacht die Clientkonfiguration für Nutzer Ihrer Artefakte und erhöht die Sicherheit, da Angriffe auf Abhängigkeiten abgeschwächt werden.
Richtliniendatei erstellen
cat > ./policy.json << EOF
[
{
"id": "private",
"repository": "projects/${PROJECT_ID}/locations/us-central1/repositories/container-dev-java-repo",
"priority": 100
},
{
"id": "central",
"repository": "projects/${PROJECT_ID}/locations/us-central1/repositories/maven-central-cache",
"priority": 80
}
]
EOF
Virtuelles Repository erstellen
gcloud artifacts repositories create virtual-maven-repo \
--project=${PROJECT_ID} \
--repository-format=maven \
--mode=virtual-repository \
--location=us-central1 \
--description="Virtual Maven Repo" \
--upstream-policy-file=./policy.json
Repository in Ihr Projekt einbinden
Führen Sie den folgenden Befehl aus, um die Repository-Konfiguration zu drucken und sie dem Java-Projekt hinzuzufügen:
gcloud artifacts print-settings mvn \
--repository=virtual-maven-repo \
--location=us-central1
Ersetzen Sie den gesamten Abschnitt „Repositories“ in Ihrer pom-Datei durch den Abschnitt „Virtuelle Repositories“ aus der Ausgabe.
Beispiel: (Ihre Projektnamen in den URLs sind unterschiedlich)
...
<distributionManagement>
<snapshotRepository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
</snapshotRepository>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
</repository>
</distributionManagement>
<repositories>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/virtual-maven-repo</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<build>
<extensions>
<extension>
<groupId>com.google.cloud.artifactregistry</groupId>
<artifactId>artifactregistry-maven-wagon</artifactId>
<version>2.2.0</version>
</extension>
</extensions>
</build>
</project>
Abhängigkeiten aus dem virtuellen Repository abrufen
Da das virtuelle Repository nur weiterleitet und keine Pakete speichert, löschen Sie zum besseren Verständnis das zuvor erstellte maven-central-cache-Repository und erstellen es neu, um mit einem leeren Repository zu beginnen.
Führen Sie die folgenden Befehle aus, um das Cache-Repository neu zu erstellen.
gcloud artifacts repositories delete maven-central-cache \
--project=$PROJECT_ID \
--location=us-central1 \
--quiet
gcloud artifacts repositories create maven-central-cache \
--project=$PROJECT_ID \
--repository-format=maven \
--location=us-central1 \
--description="Remote repository for Maven Central caching" \
--mode=remote-repository \
--remote-repo-config-desc="Maven Central" \
--remote-mvn-repo=MAVEN-CENTRAL
Sie können das leere Repository in der Konsole ansehen. Rufen Sie Cloud Console – Artifact Registry – Repositories auf.
Testen Sie jetzt das virtuelle Repository, indem Sie Ihr Projekt mit dem folgenden Befehl erstellen:
rm -rf ~/.m2/repository
mvn compile
Pakete in der Console prüfen
Rufen Sie Cloud Console – Artifact Registry – Repositories auf. Klicken Sie auf maven-central-cache
und prüfen Sie, ob die Binärartefakte so konfiguriert wurden, dass sie aus dem virtuellen Repository abgerufen werden, aber letztendlich aus dem maven-central-cache
abgerufen wurden:
5. Glückwunsch!
Herzlichen Glückwunsch, Sie haben das Codelab abgeschlossen.
Behandelte Themen
- Sie haben Standard-Repositories für die Bereitstellung Ihrer privaten Pakete verwendet.
- Remote-Repositories zum Caching von Maven-Zentralen-Paketen verwendet
- Virtuelle Repositories verwendet, um mehrere Upstream-Repositories in einer Konfiguration zu kombinieren
Bereinigen
Führen Sie den folgenden Befehl aus, um das Projekt zu löschen:
gcloud projects delete ${PROJECT_ID}
–
Letzte Aktualisierung: 22.03.23