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 mehrerer Regionen mit jedem Repository. Es gibt verschiedene Repository-Modi, wobei jeder einen anderen Zweck hat. Das folgende Diagramm zeigt eine von vielen Möglichkeiten, wie Sie Repositories in verschiedenen Modi zusammen verwenden können. Zu sehen ist ein Workflow über zwei Google Cloud-Projekte hinweg. In einem Entwicklungsprojekt erstellt ein Entwicklungsteam 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.

Aufgaben in diesem Lab:
- Standard-Repositories zum Bereitstellen privater Pakete verwenden
- Remote-Repositories zum Speichern von Maven Central-Paketen im Cache verwenden
- Virtuelle Repositories verwenden, um mehrere Upstream-Repositories in einer Konfiguration zu kombinieren
Umgebung zum selbstbestimmten Lernen einrichten
- 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 eines erstellen.



- Der Projektname ist der Anzeigename für die Teilnehmer dieses Projekts. Er ist ein String, 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 unveränderlich. Sie kann also nicht mehr geändert werden, nachdem sie festgelegt wurde. Die Cloud Console generiert automatisch einen eindeutigen String. In der Regel müssen Sie sich nicht darum kümmern, was er ist. In den meisten Codelabs müssen Sie auf die Projekt-ID verweisen. Sie wird in der Regel als
PROJECT_IDangegeben. Wenn Ihnen die generierte ID nicht gefällt, können Sie eine andere zufällige ID generieren. Alternativ können Sie eine eigene ID ausprobieren und prüfen, ob sie verfügbar ist. Sie kann nach diesem Schritt nicht mehr geändert werden und bleibt für die Dauer des Projekts bestehen. - Es gibt noch 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 die Abrechnung aktivieren in der Cloud Console, um Cloud-Ressourcen/APIs verwenden zu können. Die Durchführung dieses Codelabs sollte nicht viel kosten, wenn überhaupt. Wenn Sie Ressourcen herunterfahren möchten, damit Ihnen nach dieser Anleitung keine Kosten mehr in Rechnung gestellt werden, können Sie die erstellten Ressourcen oder das gesamte Projekt löschen. Neue Google Cloud-Nutzer können am kostenlosen Testprogramm im Wert von 300$ teilnehmen.
Arbeitsbereich einrichten
gcloud einrichten
Legen Sie in der Cloud Shell eine Projekt-ID und Projektnummer fest. Speichern Sie sie als Variablen 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, private 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"
Wenn die Aufforderung zur Cloud Shell-Autorisierung angezeigt wird, klicken Sie auf „Autorisieren“.
Rufen Sie in der Google Cloud Console „Artifact Registry“ > „Repositories“ auf. Dort sehen Sie das neu erstellte Maven-Repository mit dem Namen container-dev-java-repo. Wenn Sie darauf klicken, sehen Sie, dass es noch 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 auszugeben, die dem Java-Projekt hinzugefügt werden soll:
gcloud artifacts print-settings mvn \
--repository=container-dev-java-repo \
--location=us-central1
Der vorherige Befehl gibt XML-Code zurück, der der Datei „pom.xml“ Ihres Projekts hinzugefügt werden muss.
- Im Abschnitt repositories ist angegeben, wo Maven Remote-Artefakte für das aktuelle Projekt herunterladen darf.
- Im Abschnitt distributionManagement ist angegeben, in welches Remote-Repository das Projekt Daten per Push überträgt, wenn es bereitgestellt wird.
- Im Abschnitt extensions wird artifactregistry-maven-wagon hinzugefügt, wodurch die Authentifizierungs- und Transportschicht aktiviert wird, die für die Verbindung zu 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 die restlichen Einträge in der Datei „pom.xml“ geladen werden. Damit das übergeordnete Projekt Zugriff auf die Erweiterung hat, kann sie in einer „extensions.xml“-Datei platziert werden, die vor der Datei „pom.xml“ geladen wird. So ist sie für die übergeordneten Abhängigkeiten verfügbar.
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 die Datei ein, direkt vor dem schließenden project-Tag.
Tipp: Führen Sie in der Cloud Shell den folgenden Befehl im Terminal aus, um den Editor im aktuellen Verzeichnis zu öffnen.
cloudshell workspace .
Beispiel (Ihre Projektnamen in den URLs lauten anders):
...
<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>
Das Java-Paket in Artifact Registry hochladen
Nachdem Sie Artifact Registry in Maven konfiguriert haben, können Sie es verwenden, um von anderen Projekten in Ihrer Organisation verwendete Java-JARs zu speichern.
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 Datei „pom.xml“ erhöhen.
Das Java-Paket in Artifact Registry prüfen

3. Remote-Repositories
Remote-Repositories ermöglichen das Zwischenspeichern von Drittanbieterpaketen für erhöhte Zuverlässigkeit und Sicherheit.
Remote-Repository erstellen
Hinweis: Details 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 ansehen
Rufen Sie in der Cloud Console „Artifact Registry“ > „Repositories“ auf. Klicken Sie auf maven-central-cache. Das Repository wurde erstellt und ist derzeit leer.
Repository im Terminal ansehen
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 auszugeben, die dem Java-Projekt hinzugefügt werden soll:
gcloud artifacts print-settings mvn \
--repository=maven-central-cache \
--location=us-central1
Fügen Sie den Repository-Abschnitt in die Datei „pom.xml“ ein. Kopieren Sie dabei nicht das äußere <repositories>-Tag aus der Ausgabe.
Ändern Sie die ID des neu hinzugefügten Repositorys in „central“, damit jeder Repository-Eintrag eine eindeutige ID hat.
Beispiel (Ihre Projektnamen in den URLs lauten anders):
...
<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 die Datei extensions.xml für Ihr Projekt zu erstellen. So kann Maven mit dem Mechanismus Core Extensions übergeordnete oder Plug-in-Abhängigkeiten aus Artifact Registry auflösen.
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 die Anwendung mit dem Remote-Repository zu kompilieren:
rm -rf ~/.m2/repository
mvn compile
Pakete in der Console ansehen
Rufen Sie in der Cloud Console „Artifact Registry“ > „Repositories“ auf. Klicken Sie auf maven-central-cache und prüfen Sie, ob die binären Artefakte dort im Cache gespeichert sind:

4. Virtuelle Repositories
Virtuelle Repositories dienen als Schnittstelle für den Zugriff auf mehrere Repositories über eine einzelne Konfiguration. Das vereinfacht die Clientkonfiguration zur Nutzung Ihrer Artefakte und erhöht die Sicherheit, indem Dependency-Confusion-Angriffe verhindert 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 auszugeben, die dem Java-Projekt hinzugefügt werden soll:
gcloud artifacts print-settings mvn \
--repository=virtual-maven-repo \
--location=us-central1
Ersetzen Sie den gesamten Abschnitt „repositories“ in Ihrer POM-Datei durch den für das virtuelle Repository aus der Ausgabe.
Beispiel (Ihre Projektnamen in den URLs lauten anders):
...
<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 ein Durchgangs-Repository ist und Pakete darin nicht gespeichert werden, löschen Sie zur Veranschaulichung des Prozesses das zuvor erstellte Repository „maven-central-cache“ und erstellen es neu, um mit einem leeren Repository von vorne 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 sich das leere Repository in der Console ansehen. Rufen Sie in der Cloud Console „Artifact Registry“ > „Repositories“ auf.
Erstellen Sie nun Ihr Projekt mit dem folgenden Befehl, um das virtuelle Repository zu testen:
rm -rf ~/.m2/repository
mvn compile
Pakete in der Console ansehen
Rufen Sie in der Cloud Console „Artifact Registry“ > „Repositories“ auf. Klicken Sie auf maven-central-cache und prüfen Sie, ob die binären Artefakte so konfiguriert wurden, dass sie aus dem virtuellen Repository abgerufen werden, aber letztendlich aus dem maven-central-cache abgerufen wurden:

5. Glückwunsch!
Sie haben das Codelab abgeschlossen.
Behandelte Themen
- Standard-Repositories zum Bereitstellen privater Pakete verwendet
- Remote-Repositories zum Speichern von Maven Central-Paketen im Cache 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.2023