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. Das Produkt ist vollständig in die Tools und Laufzeiten von Google Cloud eingebunden und unterstützt das sprachbasierte Abhängigkeitsmanagement für die 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 lernen Sie einige der Funktionen von Artifact Registry kennen.

Lerninhalte

Was sind die Lernziele dieses Labs?

  • Repositories für Container und Sprachpakete erstellen
  • Container-Images mit Artifact Registry verwalten
  • Maven konfigurieren, um Artifact Registry für Java-Abhängigkeiten zu verwenden

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. 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 Teilnehmer dieses Projekts. Es handelt sich um einen String, der nicht von Google APIs verwendet wird. Sie können ihn jederzeit aktualisieren.
  • Die Projekt-ID ist für alle Google Cloud-Projekte eindeutig und unveränderlich (kann nach dem Festlegen nicht mehr geändert werden). In der Cloud Console wird automatisch ein eindeutiger String generiert. Normalerweise ist es nicht wichtig, wie dieser String aussieht. In den meisten Codelabs müssen Sie auf die Projekt-ID verweisen (sie wird in der Regel als PROJECT_ID angegeben). Wenn Ihnen die generierte ID nicht gefällt, können Sie eine andere zufällige ID generieren. Alternativ können Sie es mit einem eigenen versuchen und 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
  1. Als Nächstes müssen Sie die Abrechnung in der Cloud Console aktivieren, um Cloud-Ressourcen/-APIs zu verwenden. Die Durchführung dieses Codelabs sollte keine oder nur geringe Kosten verursachen. Wenn Sie Ressourcen herunterfahren möchten, damit Ihnen nach Abschluss dieser Anleitung keine Kosten mehr in Rechnung gestellt werden, können Sie die von Ihnen erstellten Ressourcen oder das gesamte Projekt löschen. Neue Nutzer von Google Cloud kommen für das Programm für kostenlose Testversionen mit einem Guthaben von 300$ infrage.

gcloud einrichten

Legen Sie in Cloud Shell eine Projekt-ID und Projektnummer fest. Speichern Sie diese als die Variablen PROJECT_ID und PROJECT_NUMBER ab.

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 GoogleCloudPlatform-Org auf GitHub. Klonen Sie das Repository 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

Ein Docker-Repository in Artifact Registry erstellen.

Artifact Registry unterstützt die Verwaltung von Container-Images und Sprachpaketen. Die verschiedenen Artefakttypen erfordern unterschiedliche Spezifikationen. Es unterscheiden sich beispielsweise die Anfragen nach Maven-Abhängigkeiten von Anfragen nach Node-Abhängigkeiten.

Um die verschiedenen API-Spezifikationen zu unterstützen, muss Artifact Registry wissen, welches Format für die API-Antworten angewendet werden soll. Dazu erstellen Sie ein Repository und fügen das Flag --repository-format ein, 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"

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 Docker-Repository mit dem Namen container-dev-repo. Wenn Sie darauf klicken, sehen Sie, dass es noch leer ist.

Docker-Authentifizierung für Artifact Registry konfigurieren

Die Verbindung zu Artifact Registry erfordert Anmeldedaten, die den Zugriff ermöglichen. Anstatt separate Anmeldedaten einzurichten, können Sie Docker so konfigurieren, dass Ihre gcloud-Anmeldedaten nahtlos verwendet werden.

Führen Sie in Cloud Shell den folgenden Befehl aus. Dadurch wird Docker so konfiguriert, dass die Google Cloud CLI zum Authentifizieren von Anfragen an Artifact Registry in der Region us-central1 verwendet wird:

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

Sie werden aufgefordert, die Änderung der Docker-Konfiguration für Cloud Shell zu bestätigen. Drücken Sie die Eingabetaste.

Beispielanwendung ansehen

Im geklonten Git-Repository finden Sie eine Beispielanwendung. Wechseln Sie in das Java-Verzeichnis und sehen Sie sich den Anwendungscode an.

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

Der Ordner enthält als Beispiel eine Java-Anwendung, die eine einfache Webseite rendert. Neben verschiedenen Dateien, die für dieses Lab nicht relevant sind, ist im Ordner src der Quellcode enthalten, außerdem ein Dockerfile, mit dem wir ein Container-Image lokal erstellen.

Das Container-Image erstellen

Damit Sie Container-Images in Artifact Registry speichern können, müssen Sie zuerst ein Repository erstellen.

Führen Sie den folgenden Befehl aus, um das Container-Image zu erstellen und es richtig zu taggen, damit es im nächsten Schritt per Push in Ihr Repository übertragen werden kann:

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

Das Container-Image per Push an Artifact Registry übertragen

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

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

Das Image in Artifact Registry prüfen

Rufen Sie die Google Cloud Console – Artifact Registry – Repositories auf.. Klicken Sie auf container-dev-repo und prüfen Sie, ob das java-hello-world-Image vorhanden ist. Klicken Sie auf das Bild und sehen Sie nach, ob es mit tag1 gekennzeichnet ist. Sie sehen, dass der Scan auf Sicherheitslücken ausgeführt wird oder bereits abgeschlossen ist, und die Anzahl der erkannten Sicherheitslücken.

9cb46d3689b3ed2.png

Klicken Sie auf die Anzahl der Sicherheitslücken, um die Liste der im Image erkannten Sicherheitslücken zusammen mit dem Namen des CVE-Bulletins und dem Schweregrad aufzurufen. Klicken Sie bei jeder aufgeführten Sicherheitslücke auf ANSEHEN, um weitere Details zu erhalten:

c2a961e6218d5a45.png

4. Mit Sprachpaketen arbeiten

In diesem Abschnitt erfahren Sie, wie Sie ein Artifact Registry-Java-Repository einrichten und Pakete hochladen, die Sie in verschiedenen Anwendungen verwenden.

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"

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.

Authentifizierung für Artifact Repository einrichten

Verwenden Sie den folgenden Befehl, um den bekannten Speicherort für Standardanmeldedaten für Anwendungen (Application Default Credentials, ADC) mit den Anmeldedaten Ihres Nutzerkontos zu aktualisieren. Auf diese Weise kann sich der Credential Helper für Artifact Registry damit authentifizieren, wenn er eine Verbindung zu Repositories herstellt:

gcloud auth login --update-adc

Maven für Artifact Registry konfigurieren

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

cloudshell workspace .

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

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

62328383ea59b30c.png

a9d756bf08575b0d.png

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

95d98e831787b2ff.png

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

Fügen Sie die zurückgegebenen Einstellungen in die entsprechenden Abschnitte der Datei pom.xml ein.

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>

Ein Beispiel für die vollständige Datei. Ersetzen Sie <PROJECT> 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>

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

Das Java-Paket in Artifact Registry prüfen

Rufen Sie die Cloud Console – Artifact Registry – Repositories auf. Klicken Sie auf container-dev-java-repo und prüfen Sie, ob das binäre Artefakt hello-world vorhanden ist:

e348d976ac1ac107.png

5. Glückwunsch!

Herzlichen Glückwunsch! Sie haben das Codelab abgeschlossen.

Behandelte Themen

  • Repositories für Container und Sprachpakete erstellt
  • Verwaltete Container-Images mit Artifact Registry
  • Maven so konfiguriert, dass Artifact Registry für Java-Abhängigkeiten verwendet wird

Bereinigen

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

gcloud projects delete $PROJECT_ID