Softwareversorgung sichern

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.

5af5e4da3ccfdff3.png

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

  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 ein Konto erstellen.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

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

147eac5168648db1.png

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:

9deea93caa5fefd7.png

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:

9deea93caa5fefd7.png

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