1. Übersicht
Mit Artifact Registry können Sie verschiedene Artefakttypen speichern, mehrere Repositories in einem einzelnen Projekt erstellen und jedem Repository eine bestimmte Region oder Multiregion zuordnen. Es gibt mehrere Repository-Modi. Jeder Modus dient einem 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 für zwei Google Cloud-Projekte. In einem Entwicklungsprojekt erstellen Entwickelnde eine Java-Anwendung. In einem separaten Laufzeitprojekt erstellt ein anderer Build mit der Anwendung ein Container-Image zur Bereitstellung in Google Kubernetes Engine.
In diesem Lab lernen Sie, wie Sie die folgenden Aufgaben ausführen.
- Standard-Repositories zum Bereitstellen privater Pakete verwenden
- Remote-Repositories verwenden, um Maven-Zentralpakete im Cache zu speichern
- Mit virtuellen Repositories mehrere vorgelagerte Repositories in einer Konfiguration 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 Projekt. Wenn Sie noch kein Gmail- oder Google Workspace-Konto haben, müssen Sie eines erstellen.
- Der Projektname ist der Anzeigename für die Projektteilnehmer. Es handelt sich um eine Zeichenfolge, die von Google APIs nicht verwendet wird. Sie können sie jederzeit aktualisieren.
- Die Projekt-ID ist für alle Google Cloud-Projekte eindeutig und unveränderlich. Sie kann nach dem Festlegen nicht mehr geändert werden. Die Cloud Console generiert automatisch einen eindeutigen String. ist Ihnen meist egal, was es ist. In den meisten Codelabs musst du dich auf die Projekt-ID beziehen, die üblicherweise als
PROJECT_ID
gekennzeichnet ist. Wenn Ihnen die generierte ID nicht gefällt, können Sie eine weitere zufällige ID erstellen. Alternativ können Sie einen eigenen verwenden und nachsehen, ob er verfügbar ist. Sie kann nach diesem Schritt nicht mehr geändert werden und bleibt für die Dauer des Projekts bestehen. - Zur Information gibt es noch einen dritten Wert, die Projektnummer, die von manchen APIs verwendet wird. Weitere Informationen zu allen 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. Dieses Codelab sollte ohne großen Aufwand betrieben werden. Wenn Sie Ressourcen herunterfahren möchten, um über diese Anleitung hinaus keine Kosten zu verursachen, können Sie die von Ihnen erstellten Ressourcen oder das gesamte Projekt löschen. Neue Google Cloud-Nutzer haben Anspruch auf eine kostenlose Testversion von 300$.
Einrichtung des Arbeitsbereichs
gcloud einrichten
Legen Sie in Cloud Shell eine Projekt-ID und Projektnummer fest. Speichern Sie sie als Variablen des Typs 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 Eingabeaufforderung für die Cloud Shell-Autorisierung angezeigt wird.
Gehen Sie zu Google Cloud Console – Artifact Registry – Repositories. Dort sehen Sie das neu erstellte Maven-Repository mit dem Namen container-dev-java-repo
. Wenn Sie darauf klicken, sehen Sie, dass es im Moment leer ist.
gcloud artifacts repositories describe container-dev-java-repo \
--location=us-central1
Die Antwort sollte in etwa so aussehen:
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 Ihrem Java-Projekt hinzugefügt werden soll:
gcloud artifacts print-settings mvn \
--repository=container-dev-java-repo \
--location=us-central1
Der vorherige Befehl gibt xml zurück, der zu den Projekten pom.xml hinzugefügt wird.
- Der Abschnitt repositories gibt an, wo Maven Remote-Artefakte zur Verwendung durch das aktuelle Projekt herunterladen kann.
- Der Abschnitt distributionManagement gibt an, an welches Remote-Repository das Projekt bei der Bereitstellung übertragen wird.
- Im Abschnitt extensions wird „Artifact Registry-maven-wagon“ hinzugefügt. Dadurch wird die Authentifizierungs- und Transportschicht aktiviert, die für die Verbindung mit Artifact Registry erforderlich ist.
- Hinweis: Erweiterungen können in pom.xml oder extensions.xml vorhanden sein. In Fällen, in denen das Projekt von einem übergeordneten Projekt abhängt, wird auf diese Abhängigkeiten zugegriffen, bevor die restlichen Einträge in der pom.xml-Datei geladen werden. Um sicherzustellen, dass das übergeordnete Element Zugriff auf die Erweiterung hat, kann es in der Datei „extensions.xml“ 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 pom.xml
im Cloud Shell-Editor und fügen Sie die zurückgegebenen Einstellungen am Ende der Datei direkt im schließenden project
-Tag hinzu.
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 werden in Ihren URLs unterschiedlich sein.)
...
<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 mit Artifact Registry Java-JARs zur Verwendung durch andere Projekte in Ihrer Organisation speichern.
Führen Sie den folgenden Befehl aus, um das 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.
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 sich das Binärartefakt hello-world
dort befindet:
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 prüfen
Rufen Sie Cloud Console – Artifact Registry – Repositories auf. Klicken Sie auf maven-central-cache
. Sie sehen, dass das Objekt 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 auszugeben, die Ihrem 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 Ihre pom.xml-Datei ein. Achten Sie darauf, nicht die äußeren <repositories> zu kopieren. 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 werden in Ihren URLs unterschiedlich sein.)
...
<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 den Kernerweiterungsmechanismus, um sicherzustellen, dass Maven übergeordnete oder Plug-in-Abhängigkeiten von 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 die Anwendung mithilfe des Remote-Repositorys 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 für mehrere Repositories, auf die mit einer einzigen Konfiguration zugegriffen werden kann. Dies vereinfacht die Clientkonfiguration für Nutzer Ihrer Artefakte und erhöht die Sicherheit, da Angriffe auf Abhängigkeitskonversationen vermieden 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 Ihrem 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 Abschnitt „virtual repositories“ aus der Ausgabe.
Beispiel: (Ihre Projektnamen werden in Ihren URLs unterschiedlich sein.)
...
<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 Virtual Repository abrufen
Da das virtuelle Repository ein Passthrough ist und keine tatsächlichen Pakete speichert, löschen Sie zur Veranschaulichung des Prozesses das zuvor erstellte Repository „maven-central-cache“ 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 Console prüfen. Rufen Sie Cloud Console – Artifact Registry – Repositories auf.
Führen Sie nun das virtuelle Repository aus, indem Sie Ihr Projekt mit dem folgenden Befehl erstellen.
rm -rf ~/.m2/repository
mvn compile
Pakete in der Console prüfen
Öffnen Sie Cloud Console – Artifact Registry – Repositories. Klicken Sie auf maven-central-cache
und prüfen Sie, ob die binären Artefakte für den Abruf aus dem virtuellen Repository konfiguriert, aber letztendlich aus dem maven-central-cache
abgerufen wurden:
5. Glückwunsch!
Glückwunsch, du hast das Codelab abgeschlossen.
Behandelte Themen
- Standard-Repositories zum Bereitstellen privater Pakete verwendet
- Remote-Repositories verwendet, um Maven Central-Pakete im Cache zu speichern
- 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