In diesem Dokument wird beschrieben, wie Sie vor und/oder nach der Bereitstellung beliebige Programme oder Vorgänge ausführen.
Sie können Cloud Deploy und Skaffold so konfigurieren, dass Aktionen für Aktionen vor und nach der Bereitstellung oder beides ausgeführt werden. Diese Programme, die so ausgeführt werden, werden als „Hooks“ bezeichnet. Die Hooks "Predeploy" und "Postdeploy" werden während des Roll-outs als Pre-Deploy- und Post-Deploy-Jobs ausgeführt.
Sie können jeden Hook so konfigurieren, dass er in einer angegebenen Ausführungsumgebung von Cloud Deploy ausgeführt wird. Wenn Sie das Hook aber in der Google Kubernetes Engine bereitstellen, können Sie es optional so konfigurieren, dass es auf dem GKE-Cluster ausgeführt wird, in dem Sie Ihre Anwendung bereitstellen.
Bereitstellungs-Hooks werden als idempotent betrachtet. Wenn eine bestimmte Aktion mehr als einmal ausgeführt wird, hat das keine zusätzlichen Auswirkungen.
Wie funktionieren Bereitstellungs-Hooks?
Im Folgenden werden die Schritte zum Konfigurieren von Bereitstellungs-Hooks sowie der Skafold- und Cloud Deploy-Prozess zum Ausführen dieser Hooks beschrieben:
Sie konfigurieren die für einen bestimmten Release verwendete
skaffold.yaml
so, dass siecustomActions
enthält, die das Container-Image oder die Container-Images für die Ausführung der Hooks identifizieren, sowie den spezifischen Befehl oder das Skript, das für jeden Container ausgeführt werden soll.Sie konfigurieren Hooks in einer oder mehreren Phasen des Fortschritts Ihrer Bereitstellungspipeline, die jeweils auf eine der
customActions
verweisen, die Sie inskaffold.yaml
konfiguriert haben.Bevor der Bereitstellungsjob des Roll-outs ausgeführt wird, führt Skaffold alle in
skaffold.yaml
konfigurierten Befehle aus, auf die in einerpredeploy
-Stanza im Pipelinefortschritt verwiesen wird.Der Hook
predeploy
wird immer als erster Job in der Phase ausgeführt.Nachdem der Bereitstellungsjob des Roll-outs ausgeführt wurde, führt Cloud Deploy alle in
skaffold.yaml
konfigurierten Befehle aus, auf die in einerpostdeploy
-Stanza in der Pipelineabfolge verwiesen wird.
Bereitstellungs-Hooks werden in der standardmäßigen Cloud Deploy-Ausführungsumgebung oder in einer angegebenen alternativen Ausführungsumgebung ausgeführt. Für Bereitstellungen in GKE und GKE Enterprise können Sie optional die Hooks im selben Cluster ausführen, in dem die Anwendung bereitgestellt wird.
Bereitstellungs-Hooks mit einem Canary-Deployment verwenden
Beim Konfigurieren von Bereitstellungs-Hooks für ein Canary-Deployment sind einige Dinge zu beachten:
In der Phase der Bereitstellungspipeline befindet sich die Konfiguration des Hooks (
predeploy
undpostdeploy
) unterstrategy.canary.canaryDeployment
oderstrategy.canary.customCanaryDeployment.phaseConfigs
und nicht unterstrategy.standard
.Bei einer automatisierten Canary-Version werden
predeploy
-Hooks nur vor der Bereitstellung in der ersten Phase undpostdeploy
-Hooks nach der Bereitstellung in der letzten Phase (stabil) ausgeführt.
Aktionen in Skaffold konfigurieren
In der Datei skaffold.yaml
enthält die Stanza customActions
eine oder mehrere customActions
-Stanzas, die so konfiguriert sind:
customActions
- name: ACTION_NAME
containers:
- name: CONTAINER_NAME
image: IMAGE
command: [COMMANDS_TO_RUN]
args: [LIST_OF_ARGS]
In dieser customerActions
-Stanza:
ACTION_NAME
Ist ein Name für diese Aktion. Sie können einen beliebigen Namen festlegen, er muss aber innerhalb von
skaffold.yaml
eindeutig sein. Dies ist der Name, auf den in den Aktionen vor und nach der Bereitstellung verwiesen wird, die in der Phase der Bereitstellungspipeline definiert wurden.CONTAINER_NAME
ist ein Name für den jeweiligen Container. Dieser Name kann frei gewählt werden, darf aber innerhalb von
skaffold.yaml
nur einmal vorkommen.IMAGE
Der Name des Container-Images, in dem Ihr Befehl ausgeführt wird.
COMMANDS_TO_RUN
Ist eine Liste von Einstiegspunkten, die in diesem Container ausgeführt werden sollen.
"/bin/sh"
ist ein typischer Befehl, der hier zum Aufrufen einer Shell angegeben wird. Den Befehl zur Ausführung in dieser Shell würden Sie in die Argumente aufnehmen.LIST_OF_ARGS
Ist eine Liste von Argumenten, die für den Befehl bereitgestellt werden sollen. Dies ist eine durch Kommas getrennte Liste, in der jedes Argument in Anführungszeichen steht. Wenn Ihr COMMAND_TO_RUN
"/bin/sh"
ist, ist eines der Argumente hier"-c"
und ein weiteres Argument den gesamten Befehl, den Sie in der aufgerufenen Shell ausführen möchten.Beispiel:
command: ["/bin/sh"] args: ["-c", `echo "This command ran!"`]
Weitere Informationen zu benutzerdefinierten Skaffold-Aktionen finden Sie in der Skaffold-Dokumentation.
Pipeline so konfigurieren, dass sie auf die Aktionen verweist
Zum Abschluss der Konfiguration der Bereitstellungs-Hooks konfigurieren Sie die Bereitstellungspipeline so, dass sie auf die benutzerdefinierten Aktionen verweist, die Sie in der Datei skaffold.yaml
definiert haben. Aktionen vor und nach der Bereitstellung werden in einer oder mehreren bestimmten Phasen der Pipelinefortschritt konfiguriert.
Im Folgenden wird beschrieben, wie Sie Hooks vor und nach der Bereitstellung in einer Pipelinephase konfigurieren, wenn Sie eine standard
-Bereitstellungsstrategie verwenden:
serialPipeline:
stages:
- targetId: hooks-staging
profiles: []
strategy:
standard:
predeploy:
actions: ["PREDEPLOY-ACTION"]
postdeploy:
actions: ["POSTDEPLOY-ACTION"]
In dieser YAML-Datei gilt:
PREDEPLOY_ACTION
Ist mit dem ACTION_NAME identisch, den Sie in
skaffold.yaml
verwendet haben, um die benutzerdefinierte Aktion zu definieren, die vor der Bereitstellung ausgeführt werden soll.POSTDEPLOY_ACTION
Ist mit dem ACTION_NAME identisch, den Sie in
skaffold.yaml
verwendet haben, um die benutzerdefinierte Aktion zu definieren, die nach der Bereitstellung ausgeführt werden soll.
Sie können mehrere Aktionen für predeploy
und postdeploy
angeben, die durch Kommas getrennt sind. Wenn mehr als eine Aktion angegeben ist, werden sie nacheinander in der angegebenen Reihenfolge ausgeführt. Der Job (Pre-Deploy oder Postdeploy) schlägt bei der ersten fehlgeschlagenen Aktion fehl. Die restlichen Aktionen werden nicht ausgeführt.
Wenn Sie mehrere Container parallel ausführen und ein Job fehlschlägt, werden standardmäßig beide Container angehalten. Sie können dieses Verhalten mit der Fail-Strategie für benutzerdefinierte Skafold-Aktionen konfigurieren.
Hooks im Anwendungscluster ausführen
Bereitstellungs-Hooks werden standardmäßig in der Ausführungsumgebung von Cloud Deploy ausgeführt. Sie können Skaffold auch so konfigurieren, dass diese benutzerdefinierten Aktionen auf demselben Cluster ausgeführt werden, in dem Ihre Anwendung ausgeführt wird. Wenn Sie in skaffold.yaml
benutzerdefinierte Aktionen konfigurieren und sie in einer Pipelinephase aktivieren, wird die Aktion automatisch im Cluster des Ziels ausgeführt.
Diese Funktion ist nur für Bereitstellungen in GKE und GKE Enterprise verfügbar, nicht für Cloud Run. Bereitstellungen in Cloud Run können Hooks nur in der Cloud Deploy-Ausführungsumgebung ausführen.
Fügen Sie zum Ausführen des Hooks im Cluster eine executionMode.kubernetesCluster
-Stanza in die skaffold.yaml
-Konfigurationsdatei in die customActions
-Stanza für die spezifische benutzerdefinierte Aktion ein:
customActions
- name: ACTION_NAME
containers:
- name: CONTAINER_NAME
image: IMAGE
command: [COMMANDS_TO_RUN]
args: [LIST_OF_ARGS]
executionMode:
kubernetesCluster: {}
Das folgende Beispiel zeigt eine customActions
-Stanza, die executionMode
enthält, um den Hook-Container im Anwendungscluster aufzurufen:
customActions:
- name: predeploy-action
containers:
- name: predeploy-echo
image: ubuntu
command: ["/bin/sh"]
args: ["-c", 'echo "this is a predeploy action"' ]
executionMode:
kubernetesCluster: {}
Die Stanza executionMode
ist optional. Wenn Sie sie weglassen, führt Skaffold den Container für benutzerdefinierte Aktionen in der Cloud Deploy-Ausführungsumgebung aus.
Verfügbare Umgebungsvariablen
Cloud Deploy stellt in der Ausführungsumgebung die folgenden Umgebungsvariablen bereit, die Sie für die Hooks verwenden können:
ANTHOS_MEMBERSHIP
Bei Zielen vom Typ
ANTHOS
der vollständig angegebene Ressourcenname der Anthos-Mitgliedschaft.CLOUD_RUN_LOCATION
Für Ziele vom Typ
RUN
die Region, in der der Cloud Run-Dienst bereitgestellt wird.CLOUD_RUN_PROJECT
Für Ziele vom Typ
RUN
das Projekt, in dem der Cloud Run-Dienst erstellt wurde.CLOUD_RUN_SERVICE
Für Ziele vom Typ
RUN
der Name des bereitgestellten Cloud Run-Dienstes.CLOUD_RUN_SERVICE_URLS
Für Ziele vom Typ
RUN
die URL oder URLs (durch Kommas getrennte Liste), die Endnutzer für den Zugriff auf Ihren Dienst verwenden. Sie finden diese in der Google Cloud Console in den Details des Cloud Run-Dienstes für Ihren Dienst.CLOUD_RUN_REVISION
Für Ziele vom Typ
RUN
die spezifische Version des Cloud Run-Dienstes.GKE_CLUSTER
Für Ziele vom Typ
GKE
der vollständig angegebene Ressourcenname des Google Kubernetes Engine-Clusters, z. B.projects/p/locations/us-central1/clusters/dev
.TARGET_TYPE
Der spezifische Laufzeittyp des Ziels. Entweder
GKE
,ANTHOS
oderRUN
. Bei benutzerdefinierten Zielen wird dies nicht festgelegt.CLOUD_DEPLOY_LOCATION
Die Region, die die Cloud Deploy-Ressourcen enthält.
CLOUD_DEPLOY_DELIVERY_PIPELINE
Die ID der Bereitstellungspipeline.
CLOUD_DEPLOY_TARGET
Die ID des Ziels.
CLOUD_DEPLOY_PROJECT
Das Google Cloud-Projekt, das die Cloud Deploy-Ressourcen enthält.
CLOUD_DEPLOY_RELEASE
Die ID des Release, in dem die Hooks ausgeführt werden.
CLOUD_DEPLOY_ROLLOUT
Die ID des Roll-outs, das die Jobs für die Hooks enthält.
CLOUD_DEPLOY_JOB_RUN
Die ID der Jobausführung, die die aktuelle Ausführung des Jobs darstellt.
CLOUD_DEPLOY_PHASE
Die Phase im Roll-out, die den Job für die Hooks enthält.