Benutzerdefiniertes Ziel erstellen

In diesem Dokument wird beschrieben, wie Sie einen benutzerdefinierten Cloud Deploy-Zieltyp erstellen und als Ziel in einer Cloud Deploy-Bereitstellungspipeline verwenden.

Im Folgenden wird der allgemeine Prozess zum Erstellen eines benutzerdefinierten Zieltyps und dessen Verwendung in Ihrer Bereitstellungspipeline dargestellt:

  1. Erstellen Sie eine oder mehrere Containeranwendungen, die die Funktionen zum Bereitstellen für Ihr benutzerdefiniertes Ziel enthalten und die Cloud Deploy-Anforderungen für benutzerdefinierte Zieltypen erfüllen.

  2. Definieren Sie eine benutzerdefinierte Aktion in skaffold.yaml, die auf diesen Container verweist und den Befehl bzw. die Befehle angibt, die für ihn ausgeführt werden sollen.

  3. Erstellen Sie eine CustomTargetType-Definition, die auf die benutzerdefinierte Aktion aus dem vorherigen Schritt verweist, und registrieren Sie sie als Cloud Deploy-Ressource.

  4. Definieren Sie ein neues Ziel mit dem Attribut customTarget, das den neuen benutzerdefinierten Zieltyp identifiziert.

  5. Verweisen Sie auf das Ziel aus dem Fortschritt der Bereitstellungspipeline.

  6. Release erstellen

Jeder dieser Schritte wird im weiteren Verlauf dieses Dokuments ausführlich beschrieben.

Containeranwendungen erstellen

Die Funktionen für die Bereitstellung in Ihrem benutzerdefinierten Ziel werden in Containeranwendungen definiert, die Sie für Cloud Deploy bereitstellen, indem Sie in Ihrer skaffold.yaml-Datei darauf verweisen. Wenn Ihre Bereitstellungspipeline ein Ziel enthält, das einen benutzerdefinierten Zieltyp verwendet, ruft Cloud Deploy die für diesen benutzerdefinierten Zieltyp definierten Container für benutzerdefinierte Aktionen in Skaffold auf, um die von Ihnen definierten Rendering- und Bereitstellungsaktionen auszuführen.

Das Verhalten Ihrer Anwendungen bleibt Ihnen überlassen. Er muss jedoch die von Cloud Deploy bereitgestellten Eingabeumgebungsvariablen nutzen und die erforderlichen Ausgaben zurückgeben.

In den meisten Fällen erstellen Sie für jeden benutzerdefinierten Zieltyp, den Sie erstellen, einen Container für die Renderingaktion und einen für die Bereitstellungsaktion. Die Renderingaktion ist optional. Wenn Sie jedoch keine angeben, verwendet Cloud Deploy die Standardeinstellung skaffold render.

Benutzerdefinierte Aktionen in Skaffold definieren

Wenn die Container-Images mit benutzerdefinierten Aktionen vorhanden sind, verweisen Sie in der Konfigurationsdatei skaffold.yaml darauf.

Sie konfigurieren jede benutzerdefinierte Aktion für ein benutzerdefiniertes Ziel in einer customActions-Stanza. Für jeden benutzerdefinierten Zieltyp erstellen Sie in Skaffold eine benutzerdefinierte Aktion zum Rendern und eine zum Bereitstellen. Die Definition von CustomTargetType gibt an, welche benutzerdefinierte Aktion zum Rendern und welche zum Bereitstellen verwendet wird.

Im Folgenden finden Sie die Konfiguration für benutzerdefinierte Rendering- und Bereitstellungsaktionen in skaffold.yaml:

apiVersion: skaffold/v4beta7
kind: Config
customActions:
# custom render action
- name:
  containers:
  - name:
    image:
    command:
    args:
# custom deploy action
- name:
  containers:
  - name:
    image:
    command:
    args:

In dieser Skaffold-Konfiguration:

  • customActions.name

    Ist ein beliebiger Name für die benutzerdefinierte Rendering- oder Bereitstellungsaktion. Die Definition CustomTargetType verweist im Attribut renderAction oder deployAction auf diesen Namen.

  • Die containers-Stanza enthält Ihre Referenz und Befehle zum Ausführen dieses Containers.

    Die containers-Stanza lässt mehr als einen Container zu. Google empfiehlt jedoch, nur einen zu verwenden.

  • customActions.containers.name

    Ist ein beliebiger Name für den spezifischen Container, den Sie für diese Aktion verwenden. Als Best Practice sollte dieser Containername immer SHA-qualifiziert sein.

  • image

    Der Pfad zum Container-Image.

  • command

    Der oder die Befehle, die im Container ausgeführt werden sollen.

  • args

    Ist eine Sammlung von Argumenten für command.

Ausführliche Informationen zu den in customActions verwendeten Konfigurationsattributen finden Sie in der Skaffold-YAML-Referenz.

Benutzerdefinierten Zieltyp definieren

Um ein benutzerdefiniertes Ziel zu definieren, erstellen Sie zuerst mithilfe der CustomTargetType-Konfiguration einen benutzerdefinierten Zieltyp. Sie können die CustomTargetType in derselben Datei wie Ihre Bereitstellungspipeline-Definition, mit Zieldefinitionen oder in einer separaten Datei erstellen.

Die CustomTargetType-Definition lautet so:

# Custom target type config (preview)
apiVersion: deploy.cloud.google.com/v1
kind: CustomTargetType
metadata:
  name: [CUSTOM_TARGET_TYPE_NAME]
  annotations:
  labels:
description:
customActions:
  renderAction: [RENDER_ACTION_NAME]
  deployAction: [DEPLOY_ACTION_NAME]
  includeSkaffoldModules:

Dabei gilt:

  • CUSTOM_TARGET_TYPE_NAME

    Dies ist ein beliebiger Name, den Sie dieser benutzerdefinierten Zieltypdefinition geben. Auf diesen Namen wird in der Zieldefinition für alle Ziele verwiesen, die den von Ihnen definierten benutzerdefinierten Zieltyp verwenden.

  • RENDER_ACTION_NAME

    Der Name der benutzerdefinierten Renderingaktion. Dieser Wert ist der in skaffold.yaml für die render-Aktion definierte customAction.name.

  • DEPLOY_ACTION_NAME

    Der Name der benutzerdefinierten Bereitstellungsaktion. Dieser Wert ist der in skaffold.yaml für die deploy-Aktion definierte customAction.name.

  • includeSkaffoldModules

    Ist eine optionale Stanza, die verwendet werden soll, wenn Sie Skaffold-Remote-Konfigurationen verwenden. Die Eigenschaften in dieser Stanza werden im Abschnitt Remote-Skafffold-Konfigurationen verwenden gezeigt.

Remote-Skaffold-Konfigurationen verwenden

Sie können Skaffold-Konfigurationen in einem öffentlichen Git-Repository, einem Cloud Storage-Bucket oder einem Cloud Build-Repository der 2. Generation speichern und über die Definition des benutzerdefinierten Zieltyps auf diese Konfigurationen verweisen.

Wenn Sie Skaffold-Remote-Konfigurationen verwenden, müssen für die skaffold.yaml, die Sie bei der Veröffentlichung angeben, keine benutzerdefinierten Aktionen definiert sein. So können Sie benutzerdefinierte Aktionen in Ihrer Organisation freigeben.

So verwenden Sie Remote-Skaffold-Konfigurationen:

  1. Erstellen Sie eine Skaffold-Konfiguration mit Ihren benutzerdefinierten Aktionen.

  2. Speichern Sie die Konfiguration in einem Git-Repository oder in einem Cloud Storage-Bucket.

  3. Fügen Sie in der Definition des benutzerdefinierten Zieltyps eine customActions.includeSkaffoldModules-Stanza hinzu.

  4. Geben Sie unter includeSkaffoldModules Folgendes an:

    • Optional ein oder mehrere configs-Elemente:

      - configs: ["name1", "name2"]

      Der Wert von configs ist eine Liste von Strings, die dem Attribut metadata.name in jeder einzuschließenden Skaffold-Konfiguration entsprechen. Wenn keine Angabe gemacht wird, übernimmt Cloud Deploy alle Konfigurationen im angegebenen Pfad.

    • Entweder eine googleCloudStorage-, git- oder googleCloudBuildRepo-Stanza.

      Für Cloud Storage:

      googleCloudStorage:
        source: PATH_TO_GCS_BUCKET
        path: FILENAME
      

      Für Git:

      git:
        repo: REPO_URL
        path: PATH_TO_FILE
        ref: BRANCH_NAME
      

      Für Cloud Build Repositories (2. Generation):

       googleCloudBuildRepo:
        repository: PATH_TO_GCB_REPO
        path: PATH_TO_FILE
        ref: BRANCH_NAME
      

      Wobei:

      PATH_TO_GCS_BUCKET ist der Pfad zu einem Cloud Storage-Verzeichnis, das mit /* endet, in dem die Skaffold-Konfigurationen gespeichert sind. Skaffold lädt alle Dateien in diesem Verzeichnis herunter und sucht dann anhand des konfigurierten relativen Pfads nach der relevanten Skaffold-Datei mit den Konfigurationen.

      PATH_TO_GCB_REPO ist der Pfad zum Cloud Build-Repository der 2. Generation, in dem die Skaffold-Konfigurationen gespeichert sind. Der Pfad hat das folgende Format: projects/{project}/locations/{location}/connections/{connection}/repositories/{repository}. Skaffold lädt alle Dateien in diesem Verzeichnis herunter und sucht dann anhand des konfigurierten relativen Pfads nach der Skaffold-Datei.

      FILENAME ist der Name der Datei, die die Skaffold-Konfigurationen enthält. Dieses Attribut path: ist optional. Wenn Sie es nicht angeben, geht Cloud Deploy von skaffold.yaml aus. Wenn skaffold.yaml nicht vorhanden ist oder der von Ihnen angegebene Dateiname nicht vorhanden ist, schlägt das Erstellen des Release fehl.

      REPO_URL ist die URL zum Git-Repository.

      PATH_TO_FILE ist der Pfad in diesem Repository zu der Datei, die die Skaffold-Konfigurationen enthält.

      BRANCH_NAME ist der Name des Zweigs (z. B. main), von dem die Skaffold-Konfigurationen abgerufen werden sollen.

Beispiel

Die folgende benutzerdefinierte YAML-Datei für den Zieltyp ist eine customActions-Stanza mit einer includeSkaffoldModules-Stanza, die auf Skaffold-Konfigurationen verweist, die in einem Cloud Storage-Bucket gespeichert sind:

customActions:
  renderAction: my-custom-action
  deployAction: my-custom-action
  includeSkaffoldModules:
    - configs: ["myConfig"]
      googleCloudStorage:
        source: "gs://my-custom-target-bucket/my-custom/*"
        path: "skaffold.yaml

Die folgende YAML-Datei ist eine Skaffold-Konfiguration, auf die die benutzerdefinierte Aktion verweist:

apiVersion: skaffold/v4beta7
kind: Config
metadata:
  name: myConfig
customActions:
  - name: my-custom-action
    containers:
      - name: my-custom-container
        image: us-east1-docker.pkg.dev/abcdefg/foldername/myimage@sha256:c56fcf6e0a7637ddf0df3d56a0dd23bfce03ceca06a6fc527b0e0e7430e6e9f9

Benutzerdefinierten Zieltyp registrieren

Nachdem Sie CustomTargetType konfiguriert haben, führen Sie den Befehl gcloud deploy apply aus, um die Ressource CustomTargetType in einem Google Cloud-Projekt zu registrieren:

gcloud deploy apply --file=[FILE] --project=[PROJECT] --region=[REGION]

Wobei:

FILE ist der Name der Datei, in der Sie diesen benutzerdefinierten Zieltyp definiert haben.

PROJECT ist das Google Cloud-Projekt, in dem diese Ressource erstellt werden soll. CustomTargetType muss sich im selben Projekt wie die Ressource Target befinden, die darauf verweist. Sie müssen das Projekt nicht angeben, wenn Sie es als Standardprojekt für die Google Cloud CLI festgelegt haben.

REGION ist die Region (z. B. us-centra1), in der diese Ressource erstellt werden soll. Die CustomTargetType muss sich in derselben Region wie die Target-Ressource befinden, die darauf verweist. Sie müssen die Region nicht angeben, wenn Sie sie als Standardregion für die gcloud CLI festgelegt haben.

Da die CustomTargetType jetzt als Cloud Deploy-Ressource erstellt wurde, können Sie sie in einer Target-Definition verwenden, um Ihr benutzerdefiniertes Ziel zu erstellen.

Weitere Informationen zur Definition CustomTargetType finden Sie in der Referenz zum Konfigurationsschema von Cloud Deploy.

Ziel festlegen

Der einzige Unterschied zwischen einer Zieldefinition für einen unterstützten Zieltyp und einer benutzerdefinierten Zieldefinition besteht darin, dass die benutzerdefinierte Zieldefinition eine customTarget-Stanza enthält. Die Syntax für customTarget lautet so:

customTarget:
  customTargetType: [CUSTOM_TARGET_TYPE_NAME]

Dabei ist CUSTOM_TARGET_TYPE_NAME der Wert des Attributs name, das in der Konfiguration des benutzerdefinierten Zieltyps definiert ist.

Ziel zur Bereitstellungspipeline hinzufügen

Sie können ein benutzerdefiniertes Ziel in einer Bereitstellungspipeline genau wie einen unterstützten Zieltyp verwenden. Das heißt, es gibt im Fortschritt der Bereitstellungspipeline keinen Unterschied zwischen Zielen eines unterstützten Zieltyps und benutzerdefinierten Zielen.

Alle Ziele in einer Bereitstellungspipeline müssen denselben Zieltyp verwenden. Beispielsweise ist eine Bereitstellungspipeline nicht möglich, bei der einige Ziele in Google Kubernetes Engine und einige benutzerdefinierte Ziele bereitgestellt werden.

Wie bei den unterstützten Zieltypen können Sie Bereitstellungsparameter in die Pipelinephase aufnehmen.

Release erstellen

Wenn Sie den benutzerdefinierten Zieltyp vollständig definiert und ein Ziel für diesen Typ erstellt haben, können Sie jetzt auf die gewohnte Weise einen Release erstellen:

gcloud deploy releases create [RELEASE_NAME] \
  --project=[PROJECT_NAME] \
  --region=[REGION] \
  --delivery-pipeline=[PIPELINE_NAME]

Nach dem Erstellen des Release wird die benutzerdefinierte Renderingaktion für jedes Ziel in der Bereitstellungspipeline ausgeführt, einschließlich der Verarbeitung der Bereitstellungsparameter, die für den Release, die Ziele oder die Bereitstellungspipeline konfiguriert wurden. Cloud Deploy stellt die Bereitstellungsparameter als Eingabe für den benutzerdefinierten Renderingcontainer bereit.

Ausgabe Ihrer benutzerdefinierten Ziele ansehen

Wenn Ihre benutzerdefinierte Aktion die Anforderungen an benutzerdefinierte Ziele erfüllt, können Sie die gerenderten Artefakte in der Google Cloud Console ansehen.

Führen Sie die folgenden Schritte aus, um sich die Ausgabe der benutzerdefinierten Renderingaktion anzusehen.

  1. Rufen Sie in der Google Cloud Console die Seite Bereitstellungspipelines von Cloud Deploy auf, um Ihre Bereitstellungspipeline anzusehen.

    Zur Seite der Lieferpipelines

  2. Klicken Sie auf den Namen Ihrer Bereitstellungspipeline.

    Die Pipeline-Visualisierung zeigt den Bereitstellungsstatus der Anwendung. Ihr Release wird auf dem Tab Releases unter Details zur Bereitstellungspipeline aufgeführt.

  3. Klicken Sie auf den Release-Namen.

    Die Seite Releasedetails wird angezeigt.

  4. Klicken Sie auf den Tab Artefakte.

  5. Klicken Sie unter Zielartefakte auf den Pfeil neben Artefakte ansehen.

    Die gerenderten Artefakte werden aufgelistet, einschließlich des gerenderten skaffold.yaml und der gerenderten Manifestdatei, die vom benutzerdefinierten Renderer generiert wurden. Und Sie können neben jedem Speicherort auf den Link Speicherort klicken, um den Cloud Storage-Bucket aufzurufen und die entsprechenden Dateien anzusehen.

    Sie können auch auf den Link Artefakte ansehen klicken, um diese Dateien mit dem Release Inspector nach Release, Ziel oder Phase anzusehen.

Nächste Schritte