Abhängigkeitsverwaltung mit Artifact Registry

1. Übersicht

Als Weiterentwicklung von Container Registry bildet Artifact Registry die zentrale Schnittstelle, über die Ihr Unternehmen Container-Images und Sprachpakete (wie Maven und npm) verwalten kann. Es ist vollständig in die Tools und Laufzeiten von Google Cloud eingebunden und unterstützt die sprachbasierte Abhängigkeitsverwaltung zur Verwendung mit Tools wie npm und Maven. So lässt er sich einfacher in Ihre CI/CD-Tools zur Einrichtung automatisierter Pipelines einbinden.

In diesem Lab werden Sie durch einige Funktionen von Artifact Registry geführt.

Lerninhalte

Was sind die Lernziele dieses Labs?

  • Repositories für Container und Sprachpakete erstellen
  • Container-Images mit Artifact Registry verwalten
  • Maven für die Verwendung von Artifact Registry für Java-Abhängigkeiten konfigurieren

2. Einrichtung und Anforderungen

Umgebung zum selbstbestimmten Lernen einrichten

  1. 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.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • 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.
  1. 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$.

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)')

Google-Dienste aktivieren

gcloud services enable \
  cloudresourcemanager.googleapis.com \
  container.googleapis.com \
  artifactregistry.googleapis.com \
  containerregistry.googleapis.com \
  containerscanning.googleapis.com

Quellcode abrufen

Der Quellcode für dieses Lab befindet sich in der Google Cloud Platform-Organisation auf GitHub. Klonen Sie es mit dem folgenden Befehl und wechseln Sie dann in das Verzeichnis.

git clone https://github.com/GoogleCloudPlatform/cloud-code-samples/

3. Mit Container-Images arbeiten

Docker-Repository in Artifact Registry erstellen

Artifact Registry unterstützt die Verwaltung von Container-Images und Sprachpaketen. Verschiedene Artefakttypen erfordern unterschiedliche Spezifikationen. Beispielsweise unterscheiden sich die Anfragen für Maven-Abhängigkeiten von Anfragen für Knotenabhängigkeiten.

Zur Unterstützung der unterschiedlichen API-Spezifikationen muss Artifact Registry wissen, welches Format die API-Antworten haben sollen. Dazu erstellen Sie ein Repository und übergeben das Flag --repository-format, das den gewünschten Repository-Typ angibt.

Führen Sie in Cloud Shell den folgenden Befehl aus, um ein Repository für Docker-Images zu erstellen:

gcloud artifacts repositories create container-dev-repo --repository-format=docker \
--location=us-central1 --description="Docker repository for Container Dev Workshop"

Klicken Sie auf „Autorisieren“, wenn die Eingabeaufforderung für die Cloud Shell-Autorisierung angezeigt wird.

Rufen Sie die Google Cloud Console unter Artifact Registry – Repositories auf. Dort sehen Sie Ihr neu erstelltes Docker-Repository mit dem Namen container-dev-repo. Wenn Sie darauf klicken, ist es leer.

Docker-Authentifizierung für Artifact Registry konfigurieren

Beim Herstellen einer Verbindung zu Artifact Registry sind Anmeldedaten erforderlich, um Zugriff zu gewähren. Anstatt separate Anmeldedaten einzurichten, kann Docker für die nahtlose Verwendung Ihrer gcloud-Anmeldedaten konfiguriert werden.

Führen Sie in Cloud Shell den folgenden Befehl aus, um Docker für die Verwendung der Google Cloud CLI zum Authentifizieren von Anfragen an Artifact Registry in der Region us-central1 zu konfigurieren:

gcloud auth configure-docker us-central1-docker.pkg.dev

Der Befehl fordert Sie zur Bestätigung des Änderns der Cloud Shell-Docker-Konfiguration auf. Drücken Sie die Eingabetaste.

Beispielanwendung ansehen

Im Git-Repository, das Sie in einem vorherigen Schritt geklont haben, wird eine Beispielanwendung bereitgestellt. Wechseln Sie in das Java-Verzeichnis und überprüfen Sie den Anwendungscode.

cd cloud-code-samples/java/java-hello-world

Der Ordner enthält eine Java-Beispielanwendung, die eine einfache Webseite rendert: Neben verschiedenen Dateien, die für dieses Lab nicht relevant sind, enthält er im Ordner src den Quellcode und ein Dockerfile, mit dem wir lokal ein Container-Image erstellen.

Container-Image erstellen

Bevor Sie Container-Images in Artifact Registry speichern können, müssen Sie eines erstellen.

Führen Sie den folgenden Befehl aus, um das Container-Image zu erstellen und ordnungsgemäß zu taggen, damit es im nächsten Schritt an Ihr Repository übertragen wird:

docker build -t us-central1-docker.pkg.dev/$PROJECT_ID/container-dev-repo/java-hello-world:tag1 .

Container-Image per Push an Artifact Registry übertragen

Führen Sie den folgenden Befehl aus, um das Container-Image in das zuvor erstellte Repository zu übertragen:

docker push us-central1-docker.pkg.dev/$PROJECT_ID/container-dev-repo/java-hello-world:tag1

Image in Artifact Registry prüfen

Öffnen Sie die Google Cloud Console – Artifact Registry – Repositories.. Klicken Sie auf container-dev-repo und prüfen Sie, ob das Image java-hello-world vorhanden ist. Klicken Sie auf das Bild und sehen Sie sich das Bild mit dem Tag tag1 an. Sie können sehen, dass das Scannen auf Sicherheitslücken läuft oder bereits abgeschlossen ist und die Anzahl der erkannten Sicherheitslücken angezeigt wird.

9cb46d3689b3ed2.png

Klicken Sie auf die Anzahl der Sicherheitslücken, um die Liste der im Image gefundenen Sicherheitslücken mit dem Namen des CVE-Bulletins und dem Schweregrad aufzurufen. Sie können für jede aufgeführte Sicherheitslücke auf ANSEHEN klicken, um weitere Details zu erhalten:

c2a961e6218d5a45.png

4. Mit Sprachpaketen arbeiten

In diesem Abschnitt erfahren Sie, wie Sie ein Java-Repository für Artifact Registry einrichten und Pakete hochladen, um sie in verschiedenen Anwendungen zu nutzen.

Package Repository für Java 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.

Rufen Sie die Google Cloud Console unter Artifact Registry – Repositories auf. Dort sehen Sie Ihr neu erstelltes Maven-Repository mit dem Namen container-dev-java-repo. Wenn Sie darauf klicken, sehen Sie, dass es im Moment leer ist.

Authentifizierung für das Artifact-Repository einrichten

Verwenden Sie den folgenden Befehl, um den bekannten Speicherort für Standardanmeldedaten für Anwendungen (Application Standard Credentials, ADC) mit den Anmeldedaten Ihres Nutzerkontos zu aktualisieren, damit der Artifact Registry Credential Helper sich damit beim Herstellen einer Verbindung zu Repositories authentifizieren kann:

gcloud auth login --update-adc

Maven für Artifact Registry konfigurieren

Führen Sie den folgenden Befehl im Ordner java-hello-world aus, um den Cloud Shell-Editor zu öffnen und den Anwendungsordner zu seinem Arbeitsbereich hinzuzufügen:

cloudshell workspace .

Aktivieren Sie Drittanbieter-Cookies, indem Sie auf „Website funktioniert jetzt?“ klicken. und dann auf „Cookies zulassen“.

Nachdem der Browser neu geladen wurde, öffnen Sie Cloud Shell und führen Sie den obigen Befehl noch einmal aus, um den Anwendungsordner zu laden.

62328383ea59b30c.png

a9d756bf08575b0d.png

Öffnen Sie die Datei „pom.xml“ im Cloud Shell-Editor und klicken Sie auf „Editor öffnen“.

95d98e831787b2ff.png

Öffnen Sie das Terminal im Cloud Shell-Editor und 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

und fügen Sie die zurückgegebenen Einstellungen den entsprechenden Abschnitten in der Datei pom.xml hinzu.

Cloud Editor-Ansicht mit integriertem Terminal:

33c3bfa412b7babd.png

Abschnitt distributionManagement aktualisieren

<distributionManagement>
   <snapshotRepository>
     <id>artifact-registry</id>
     <url>artifactregistry://us-central1-maven.pkg.dev/<PROJECT>/container-dev-java-repo</url>
   </snapshotRepository>
   <repository>
     <id>artifact-registry</id>
     <url>artifactregistry://us-central1-maven.pkg.dev/<PROJECT>/container-dev-java-repo</url>
   </repository>
</distributionManagement>

Aktualisieren Sie den Abschnitt repositories.

 <repositories>
   <repository>
     <id>artifact-registry</id>
     <url>artifactregistry://us-central1-maven.pkg.dev/<PROJECT>/container-dev-java-repo</url>
     <releases>
       <enabled>true</enabled>
     </releases>
     <snapshots>
       <enabled>true</enabled>
     </snapshots>
   </repository>
 </repositories>

Erweiterungen aktualisieren

<extensions>
     <extension>
       <groupId>com.google.cloud.artifactregistry</groupId>
       <artifactId>artifactregistry-maven-wagon</artifactId>
       <version>2.1.0</version>
     </extension>
   </extensions>

Hier ist ein Beispiel der vollständigen Datei zu deiner Referenz. <PROJECT> muss ersetzt werden durch Ihre Projekt-ID.

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>
 
 <artifactId>hello-world</artifactId>
 <packaging>jar</packaging>
 <name>Cloud Code Hello World</name>
 <description>Getting started with Cloud Code</description>
 <version>1.0.0</version>
<distributionManagement>
   <snapshotRepository>
     <id>artifact-registry</id>
     <url>artifactregistry://us-central1-maven.pkg.dev/<PROJECT>/container-dev-java-repo</url>
   </snapshotRepository>
   <repository>
     <id>artifact-registry</id>
     <url>artifactregistry://us-central1-maven.pkg.dev/<PROJECT>/container-dev-java-repo</url>
   </repository>
 </distributionManagement>
 
 <repositories>
   <repository>
     <id>artifact-registry</id>
     <url>artifactregistry://us-central1-maven.pkg.dev/<PROJECT>/container-dev-java-repo</url>
     <releases>
       <enabled>true</enabled>
     </releases>
     <snapshots>
       <enabled>true</enabled>
     </snapshots>
   </repository>
 </repositories>
 
 <parent>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-parent</artifactId>
   <version>2.6.3</version>
 </parent>
 
 <properties>
   <java.version>1.8</java.version>
   <checkstyle.config.location>./checkstyle.xml</checkstyle.config.location>
 </properties>
 
 <build>
   <plugins>
     <plugin>
       <groupId>com.google.cloud.tools</groupId>
       <artifactId>jib-maven-plugin</artifactId>
       <version>3.2.0</version>
     </plugin>
     <plugin>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-maven-plugin</artifactId>
     </plugin>
     <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-checkstyle-plugin</artifactId>
       <version>3.1.2</version>
     </plugin>
   </plugins>
   <extensions>
     <extension>
       <groupId>com.google.cloud.artifactregistry</groupId>
       <artifactId>artifactregistry-maven-wagon</artifactId>
       <version>2.1.0</version>
     </extension>
   </extensions>
 </build>
 
 <!-- The Spring Cloud GCP BOM will manage spring-cloud-gcp version numbers for you. -->
 <dependencyManagement>
   <dependencies>
     <dependency>
       <groupId>org.springframework.cloud</groupId>
       <artifactId>spring-cloud-gcp-dependencies</artifactId>
       <version>1.2.8.RELEASE</version>
       <type>pom</type>
       <scope>import</scope>
     </dependency>
   </dependencies>
 </dependencyManagement>
  
 <dependencies>
 
   <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter</artifactId>
   </dependency>
 
   <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-jetty</artifactId>
   </dependency>
 
   <dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-webmvc</artifactId>
   </dependency>
 
   <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-thymeleaf</artifactId>
   </dependency>
 
   <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-test</artifactId>
     <scope>test</scope>
   </dependency>
 
   <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-gcp-starter-logging</artifactId>
   </dependency>
      
 </dependencies>
 
</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

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:

e348d976ac1ac107.png

5. Glückwunsch!

Glückwunsch, du hast das Codelab abgeschlossen.

Behandelte Themen

  • Repositories für Container und Sprachpakete erstellt
  • Verwaltete Container-Images mit Artifact Registry
  • Maven für die Verwendung von Artifact Registry für Java-Abhängigkeiten konfiguriert

Bereinigen

Führen Sie den folgenden Befehl aus, um das Projekt zu löschen

gcloud projects delete $PROJECT_ID