Softwarelieferung sichern

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.

5af5e4da3ccfdff3.png

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

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

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:

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 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:

9deea93caa5fefd7.png

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:

9deea93caa5fefd7.png

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