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 Prozess zum Erstellen eines benutzerdefinierten Zieltyps und zum Verwenden in Ihrer Auslieferungspipeline beschrieben:

  1. Erstellen Sie eine containerisierte Anwendung oder Anwendungen, die die Funktion zum Bereitstellen auf Ihrem benutzerdefinierten Ziel enthalten und die die Anforderungen von Cloud Deploy für benutzerdefinierte Zieltypen erfüllen.

  2. Definieren Sie in skaffold.yaml eine benutzerdefinierte Aktion, die auf diesen Container verweist und den oder die darin auszuführenden Befehle angibt.

  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 einer customTarget-Property, die den neuen benutzerdefinierten Zieltyp identifiziert.

  5. Verweisen Sie auf dieses Ziel in der Bereitstellungssequenz.

  6. Erstellen Sie einen Release.

Die einzelnen Schritte werden im Rest dieses Dokuments ausführlich beschrieben.

Containeranwendungen erstellen

Die Funktionen, die auf Ihrem benutzerdefinierten Ziel bereitgestellt werden sollen, sind in containerisierten Anwendungen definiert. Sie stellen sie Cloud Deploy zur Verfügung, indem Sie in Ihrer skaffold.yaml-Datei darauf verweisen. Wenn Ihre Bereitstellungspipeline ein Ziel mit einem benutzerdefinierten Zieltyp enthält, ruft Cloud Deploy die für diesen benutzerdefinierten Zieltyp in Skaffold definierten benutzerdefinierten Aktionscontainer auf, um die von Ihnen definierten Rendering- und Bereitstellungsaktionen auszuführen.

Das Verhalten Ihrer Anwendungen liegt in Ihrer Verantwortung. Es muss jedoch die von Cloud Deploy bereitgestellten Eingabeumgebungsvariablen verwenden und die erforderlichen Ausgaben zurückgeben.

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

Benutzerdefinierte Aktionen in Skaffold definieren

Nachdem Sie die Container-Images für die benutzerdefinierte Aktion erstellt haben, können Sie sie in Ihrer skaffold.yaml-Konfigurationsdatei referenzieren.

Sie konfigurieren jede benutzerdefinierte Aktion für ein benutzerdefiniertes Ziel in einer customActions-Strophe. Für jeden benutzerdefinierten Zieltyp erstellen Sie in Skaffold eine benutzerdefinierte Aktion für das Rendern und eine für die Bereitstellung. In der Definition von CustomTargetType wird angegeben, welche benutzerdefinierte Aktion für das Rendern und welche für die Bereitstellung verwendet wird.

Hier ist die Konfiguration für benutzerdefinierte Render- 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

    Ein beliebiger Name für die benutzerdefinierte Render- oder Bereitstellungsaktion. Die CustomTargetType-Definition verweist auf diesen Namen in der renderAction- oder deployAction-Property.

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

    In der containers-Strophe ist mehr als ein Container zulässig, Google empfiehlt jedoch, nur einen zu verwenden.

  • customActions.containers.name

    Ein beliebiger Name für den Container, den Sie für diese Aktion verwenden. Als Best Practice sollte dieser Containername immer mit SHA qualifiziert sein.

  • image

    Der Pfad zum Container-Image.

  • command

    Dies ist der Befehl oder die Befehle, die im Container ausgeführt werden sollen.

  • args

    Eine Sammlung von Argumenten für die command.

Eine ausführliche Dokumentation zu den Konfigurationseigenschaften, die in customActions verwendet werden, finden Sie in der Skaffold-YAML-Referenz.

Benutzerdefinierten Zieltyp definieren

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

Die Definition von CustomTargetType lautet:

# 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

    Ein beliebiger Name, den Sie dieser benutzerdefinierten Zieltypdefinition geben. Auf diesen Namen wird in der Zieldefinition für alle Ziele verwiesen, für die der von Ihnen definierte benutzerdefinierte Zieltyp verwendet wird.

  • RENDER_ACTION_NAME

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

  • DEPLOY_ACTION_NAME

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

  • includeSkaffoldModules

    Optionaler Abschnitt, der verwendet wird, wenn Sie Remote-Skaffold-Konfigurationen verwenden. Die Eigenschaften in diesem Abschnitt werden im Abschnitt Remote-Skaffold-Konfigurationen verwenden beschrieben.

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 diese Konfigurationen über die Definition Ihres benutzerdefinierten Zieltyps referenzieren.

Wenn Sie Remote-Skaffold-Konfigurationen verwenden, müssen die benutzerdefinierten Aktionen nicht für die skaffold.yaml definiert werden, die Sie zum Zeitpunkt der Veröffentlichung angeben. So können Sie benutzerdefinierte Aktionen in Ihrer gesamten 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-Strophe 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 mit dem Attribut metadata.name in jeder Skaffold-Konfiguration übereinstimmen, die eingeschlossen werden soll. Wenn diese Option weggelassen wird, werden alle Konfigurationen im angegebenen Pfad von Cloud Deploy übernommen.

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

      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 auf /* endet und 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 entsprechenden 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 folgendes 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 path:-Attribut ist optional. Wenn Sie es nicht angeben, wird in Cloud Deploy skaffold.yaml angenommen. Wenn skaffold.yaml nicht vorhanden ist oder der angegebene Dateiname nicht gefunden wird, schlägt die Erstellung der Version fehl.

      REPO_URL ist die URL zum Git-Repository.

      PATH_TO_FILE ist der Pfad in diesem Repository zur Datei mit den Skaffold-Konfigurationen.

      BRANCH_NAME ist der Name des Branches (z. B. main), aus dem die Skaffold-Konfigurationen übernommen werden sollen.

Beispiel

Die folgende YAML-Datei mit benutzerdefiniertem 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 angezeigte 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 die CustomTargetType konfiguriert haben, führen Sie den Befehl gcloud deploy apply aus, um die CustomTargetType-Ressource 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. Die CustomTargetType muss sich im selben Projekt wie die Target-Ressource befinden, auf die sie 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, auf die sie verweist. Sie müssen die Region nicht angeben, wenn Sie sie als Standardregion für die gcloud CLI festgelegt haben.

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

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

Ziel festlegen

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

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 der Auslieferungspipeline hinzufügen

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

Alle Ziele in einer Auslieferungspipeline müssen denselben Zieltyp verwenden. So ist es beispielsweise nicht möglich, eine Bereitstellungspipeline mit einigen Zielen zu haben, die in der Google Kubernetes Engine und in einigen benutzerdefinierten Zielen bereitgestellt werden.

Wie bei unterstützten Zieltypen können Sie auch in der Pipeline-Phase Bereitstellungsparameter angeben.

Release erstellen

Nachdem Sie den benutzerdefinierten Zieltyp vollständig definiert und ein Ziel für die Verwendung dieses Typs erstellt haben, können Sie wie gewohnt eine Version erstellen:

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

Beim Erstellen eines Release wird Ihre benutzerdefinierte Renderaktion für jedes Ziel in Ihrer Bereitstellungspipeline ausgeführt. Dabei werden auch Bereitstellungsparameter verarbeitet, die für den Release, die Ziele oder die Bereitstellungspipeline konfiguriert wurden. Cloud Deploy stellt dem benutzerdefinierten Rendercontainer die Bereitstellungsparameter als Eingabe zur Verfügung.

Ausgabe Ihrer benutzerdefinierten Ziele ansehen

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

So rufen Sie die Ausgabe Ihrer benutzerdefinierten Renderaktion auf:

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

    Zur Seite der Lieferpipelines

  2. Klicken Sie auf den Namen der Lieferpipeline.

    Die Pipelinevisualisierung zeigt den Bereitstellungsstatus der App. Ihre Version wird auf dem Tab Releases unter Details zur Lieferpipeline aufgeführt.

  3. Klicken Sie auf den Namen der Version.

    Die Seite Release-Details wird angezeigt.

  4. Klicken Sie auf den Tab Artefakte.

  5. Klicken Sie unter Ziel-Artefakte auf den Pfeil neben Artefakte ansehen.

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

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

Nächste Schritte