Neuaufbau von Container-Images automatisieren, um Basis-Image-Updates zu synchronisieren


Mit Cloud Workstations können Sie benutzerdefinierte Images für Ihre Workstations erstellen und verwenden. Nachdem ein benutzerdefiniertes Image in Verwendung ist, empfiehlt es sich, einen Neuaufbau des benutzerdefinierten Images zu automatisieren, um Fehlerkorrekturen und Updates einzubinden, die in den Basis-Images verfügbar sind.

In dieser Anleitung erfahren Sie, wie Sie eine automatisierte Pipeline erstellen, um Sicherheitsupdates und Patches in Ihre benutzerdefinierten Workstation-Images aufzunehmen.

Lernziele

In dieser Anleitung erstellen Sie eine automatisierte Pipeline für Ihr Basis-Image:

  1. Erstellen Sie ein Artifact Registry-Repository, um Ihr benutzerdefiniertes Image zu speichern und zu scannen.
  2. Konfigurieren Sie GitHub mit Google Cloud, um Ihre Image-Konfigurationen zu speichern.
  3. Erstellen Sie einen Cloud Build-Trigger, um die Erstellung und Bereitstellung benutzerdefinierter Images in Artifact Registry zu automatisieren.
  4. Konfigurieren Sie Cloud Scheduler so, dass Builds regelmäßig gestartet werden.
  5. Prüfen Sie die Ergebnisse der automatisierten Prozesse.

Kosten

In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:

Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen. Neuen Google Cloud-Nutzern steht möglicherweise eine kostenlose Testversion zur Verfügung.

Nach Abschluss der in diesem Dokument beschriebenen Aufgaben können Sie weitere Kosten vermeiden, indem Sie die erstellten Ressourcen löschen. Weitere Informationen finden Sie unter Bereinigen.

Vorbereitung

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  4. Enable the Artifact Registry, Container Scanning API, Cloud Build, and Cloud Scheduler APIs.

    Enable the APIs

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  9. Enable the Artifact Registry, Container Scanning API, Cloud Build, and Cloud Scheduler APIs.

    Enable the APIs

  10. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

    gcloud init

Umgebung vorbereiten

Bevor Sie fortfahren, müssen Sie die folgenden Umgebungsvariablen festlegen.

  1. Legen Sie die Projekt-ID für das Cloud-Projekt fest, das Sie verwenden möchten:

    PROJECT_ID=$PROJECT_ID
    
  2. Legen Sie den GitHub-Nutzernamen fest, unter dem Sie Ihr Repository speichern möchten:

    GITHUB_USER=$GITHUB_ID
    
  3. Legen Sie die Variablen PROJECT_NUMBER und REGION fest, die während des Vorgangs verwendet werden sollen:

    PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID \
        --format='value(projectNumber)')
    
    REGION=$REGION
    

    Ersetzen Sie im vorherigen Beispiel $REGION durch den Namen der Region die Sie verwenden möchten, z. B. us-central1.

    Weitere Informationen zu verfügbaren Regionen finden Sie unter Cloud Workstations-Standorte.

Artifact Registry-Repository erstellen

In dieser Anleitung verwenden Sie Artifact Registry zum Speichern und Scannen Ihrer Images.

  1. Erstellen Sie mit dem folgenden Befehl ein Repository:

    gcloud artifacts repositories create custom-images \
          --repository-format=docker \
          --location=$REGION \
          --description="Docker repository"
    

    Ersetzen Sie $REGION durch den Namen der Region, die Sie verwenden möchten.

  2. Konfigurieren Sie Docker so, dass Ihre gcloud-CLI-Anmeldedaten verwendet werden, wenn Zugriff auf Artifact Registry.

    gcloud auth configure-docker $REGION-docker.pkg.dev
    

    Führen Sie den folgenden Befehl aus, um die Artefaktanalyse zu deaktivieren:

    gcloud services disable containerscanning.googleapis.com
    

GitHub-Repository konfigurieren

In der Praxis speichern Sie die Dockerfile für Ihre benutzerdefinierten Images in einem Git-Repository. Der automatisierte Prozess greift während des Build-Prozesses auf dieses Repository zu, um die relevanten Konfigurationen und das Dockerfile abzurufen.

Beispiel-Repository verzweigen

So forken Sie ein Beispiel-Repository mit Containerdefinitionen:

  1. Klicken Sie auf diesen Link zu Erstellen Sie eine neue Verzweigung. des software-delivery-workshop-Repositorys.
  2. Wenn Sie dazu aufgefordert werden, melden Sie sich bei GitHub an.
  3. Wählen Sie Ihren GitHub-Nutzernamen als Inhaber aus. Der Repository-Name wird als software-delivery-workshop angezeigt.
  4. Klicken Sie auf Verzweigung erstellen und warten Sie einige Sekunden, bis der Vorgang abgeschlossen ist.

Cloud Build mit GitHub verbinden

Verbinden Sie das Repository anschließend über die integrierte GitHub-Verbindungsfunktion mit Cloud Build. Klicken Sie auf den Link zum GitHub-Repository und folgen Sie die Anweisungen zum Abschließen des Vorgangs. Sie müssen den Trigger im letzten Schritt des Assistenten nicht erstellen und können die letzten Schritte überspringen, da Sie dies später über die Befehlszeile tun können.

Wenn Sie eine andere Git-Repository-Lösung verwenden, können Sie auch der Anleitung zum Verbinden von Cloud Build mit GitLab oder Bitbucket folgen.

Cloud Build-Trigger erstellen

Das Beispiel-Repository enthält eine Containerdefinition und einen Cloud Build Konfiguration, die zum Erstellen des Container-Images verwendet wird. In diesem Schritt erstellen Sie ein Cloud Build-Trigger, der die Anweisungen im cloudbuild.yaml-Datei, die Sie im labs/cloudbuild-scheduled-jobs/code-oss-java Ordner.

gcloud builds triggers create manual \
    --name=custom-image-trigger \
    --repo=$GITHUB_USER/software-delivery-workshop \
    --repo-type=GITHUB \
    --branch=main \
    --build-config=labs/cloudbuild-scheduled-jobs/code-oss-java/cloudbuild.yaml \
    --substitutions=_REGION=$REGION,_AR_REPO_NAME=custom-images,_AR_IMAGE_NAME=code-oss-java,_IMAGE_DIR=labs/cloudbuild-scheduled-jobs/code-oss-java

TRIGGER_ID=$(gcloud builds triggers list \
    --filter=name="custom-image-trigger" --format="value(id)")

In diesem Beispiel wird Folgendes konfiguriert:

  • Mit dem Befehl gcloud wird in Cloud Build ein manueller Trigger mit dem Namen custom-image-trigger erstellt, wie das Flag name in der zweiten Zeile zeigt.
  • Die nächsten drei Zeilen enthalten Flags, die sich auf das Quell-GitHub-Repository beziehen:
  • Das Flag build-config gibt den Pfad zur Cloud Build-Datei im Git-Repository an.
  • Verwenden Sie das Flag substitutions, um den Job dynamisch zu machen. Für diesen Job gibt der Befehl übergibt folgende Variablen:

    • Region, $_REGION
    • Name des Artifact Registry-Repositories, $_AR_REPO_NAME
    • Name des Container-Images, $_AR_IMAGE_NAME
    • Speicherort des zu erstellenden Dockerfiles, $_IMAGE_DIR

    In der Datei cloudbuild.yaml sehen Sie, wie diese Variablen im Prozess verwendet werden.

  • Nach dem Erstellen des Triggers wird der eindeutige Name des Triggers abgerufen und zur späteren Verwendung in der Umgebungsvariablen $TRIGGER_ID gespeichert.

Cloud Scheduler konfigurieren

Damit Ihre Images immer auf dem neuesten Stand mit den neuesten Updates und Patches sind, können Sie den Cloud Build-Trigger mit Cloud Scheduler in einem festgelegten Intervall ausführen. In dieser Anleitung wird der Job täglich ausgeführt. Legen Sie in der Praxis eine Häufigkeit fest, die Ihren organisatorischen Anforderungen entspricht, damit immer die neuesten Updates enthalten sind.

  1. Gewähren Sie dem Standarddienstkonto, das aufgerufen werden soll, eine erforderliche Rolle Cloud Build-Trigger:

    gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member="serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
        --role="roles/cloudbuild.builds.editor"
    
  2. Gewähren Sie dem Cloud Build-Dienstkonto zum Hochladen eine erforderliche Rolle Images in Artifact Registry:

    gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member=serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com \
        --role="roles/artifactregistry.admin"
    
  3. Erstellen Sie den Cloud Scheduler-Job mit dem folgenden Befehl:

    gcloud scheduler jobs create http run-build \
        --schedule='0 1 * * *' \
        --uri=https://cloudbuild.googleapis.com/v1/projects/$PROJECT_ID/locations/global/triggers/$TRIGGER_ID:run \
        --location=us-central1 \
        --oauth-service-account-email=$PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --oauth-token-scope=https://www.googleapis.com/auth/cloud-platform
    
  4. Der Job ist so konfiguriert, dass er einmal täglich ausgeführt wird. Wenn Sie die Funktion sofort testen möchten, führen Sie den Job manuell über Cloud Scheduler aus:

    Zu Cloud Scheduler

    1. Suchen Sie auf der Cloud Scheduler-Seite nach dem Eintrag run-build, den Sie gerade erstellt haben.
    2. Klicken Sie in der Spalte „Aktionen“ auf das Dreipunkt-Menü more_vertMehr für diese Zeile.
    3. Klicken Sie auf Jobausführung erzwingen, um das System manuell zu testen.
    4. Nachdem der Befehl erfolgreich ausgeführt wurde, rufen Sie die Seite „Cloud Build-Verlauf“ auf, um den Fortschritt zu überprüfen:

      Zum Cloud Build-Verlauf

Ergebnisse überprüfen

Weil Sie die Container Scanning API im Rahmen der Einrichtung aktiviert haben werden die Images in Artifact Registry automatisch auf ihre Sicherheit Sicherheitslücken.

So prüfen Sie die Sicherheitslücken:

  1. Öffnen Sie die Seite „Artifact Registry-Repositories“:

    Zu Artifact Registry-Repositories

  2. Klicken Sie in der Liste der Repositories auf ein Repository.

  3. Klicken Sie auf den Namen eines Images. Die Gesamtzahl der Sicherheitslücken für jeden Image-Digest wird in der Spalte Sicherheitslücken angezeigt.

    Seite „Artifact Registry-Repositories“ mit dem Namen eines Beispiel-Images

  4. Wenn Sie die Liste der Sicherheitslücken für ein Image aufrufen möchten, klicken Sie auf den Link in der Spalte Vulnerabilities (Sicherheitslücken). Die Liste der Sicherheitslücken enthält severity Verfügbarkeit einer Fehlerbehebung und den Namen des Pakets, das die eine Sicherheitslücke.

    Seite „Artifact Registry – Sicherheitslücken“ mit einer Beispielliste von Sicherheitslücken

Bereinigen

Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie entweder das Projekt, das die Ressourcen enthält, oder Sie behalten das Projekt und löschen die einzelnen Ressourcen.

Um zu vermeiden, dass Ihrem Google Cloud-Konto die Ressourcen in Rechnung gestellt werden auf dieser Seite verwendet haben, achten Sie darauf, Ressourcen zu löschen, die Sie nicht mehr benötigen.

So löschen Sie ein Google Cloud-Projekt aus der Google Cloud Console oder aus dem gcloud-Befehlszeile:

Console

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

gcloud

    Delete a Google Cloud project:

    gcloud projects delete PROJECT_ID

Weitere Informationen zum Löschen anderer Ressourcen wie Workstationcluster, Workstationkonfigurationen und Workstations, Siehe Ressourcen löschen.

Nächste Schritte