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:
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.
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.Erstellen Sie eine
CustomTargetType
-Definition, die auf die benutzerdefinierte Aktion aus dem vorherigen Schritt verweist, und registrieren Sie sie als Cloud Deploy-Ressource.Definieren Sie ein neues Ziel mit dem Attribut
customTarget
, das den neuen benutzerdefinierten Zieltyp identifiziert.Verweisen Sie auf das Ziel aus dem Fortschritt der Bereitstellungspipeline.
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 AttributrenderAction
oderdeployAction
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 definiertecustomAction.name
.DEPLOY_ACTION_NAME
Der Name der benutzerdefinierten Bereitstellungsaktion. Dieser Wert ist der in
skaffold.yaml
für die deploy-Aktion definiertecustomAction.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:
Erstellen Sie eine Skaffold-Konfiguration mit Ihren benutzerdefinierten Aktionen.
Speichern Sie die Konfiguration in einem Git-Repository oder in einem Cloud Storage-Bucket.
Fügen Sie in der Definition des benutzerdefinierten Zieltyps eine
customActions.includeSkaffoldModules
-Stanza hinzu.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 Attributmetadata.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
- odergoogleCloudBuildRepo
-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 Attributpath:
ist optional. Wenn Sie es nicht angeben, geht Cloud Deploy vonskaffold.yaml
aus. Wennskaffold.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.
Rufen Sie in der Google Cloud Console die Seite Bereitstellungspipelines von Cloud Deploy auf, um Ihre Bereitstellungspipeline anzusehen.
Zur Seite der Lieferpipelines
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.
Klicken Sie auf den Release-Namen.
Die Seite Releasedetails wird angezeigt.
Klicken Sie auf den Tab Artefakte.
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.