In diesem Dokument wird beschrieben, wie Sie beliebige Programme oder Vorgänge vor oder nach der Bereitstellung ausführen.
Sie können Cloud Deploy und Skaffold so konfigurieren, dass Aktionen ausgeführt werden, um Aktionen vor oder nach der Bereitstellung oder beides auszuführen. So ausgeführte Programme werden als „Hooks“ bezeichnet. Pre-Deploy- und Post-Deploy-Hooks werden als Pre-Deploy- und Post-Deploy-Jobs für den Roll-out ausgeführt.
Sie können jeden Hook so konfigurieren, dass er in einer bestimmten Ausführungsumgebung von Cloud Deploy ausgeführt wird. Wenn Sie jedoch in Google Kubernetes Engine bereitstellen, können Sie ihn optional so konfigurieren, dass er im GKE-Cluster ausgeführt wird, in dem Sie Ihre Anwendung bereitstellen.
Es wird davon ausgegangen, dass Bereitstellungshooks idempotent sind. Wenn eine bestimmte Aktion mehr als einmal ausgeführt wird, hat das keine zusätzlichen Auswirkungen.
Wie funktionieren Bereitstellungshooks?
Im Folgenden werden die Schritte zum Konfigurieren von Bereitstellungshooks sowie der Skaffold- und Cloud Deploy-Prozess zum Ausführen dieser Hooks beschrieben:
Sie konfigurieren das
skaffold.yamlfür eine bestimmte Version so, dass escustomActionsenthält, die das oder die Container-Images zum Ausführen der Hooks und den spezifischen Befehl oder das spezifische Script zum Ausführen auf jedem Container identifizieren.Sie konfigurieren Hooks in einer oder mehreren Phasen in Ihrer Bereitstellungspipeline. Jede Phase verweist auf eine der
customActions, die Sie inskaffold.yamlkonfiguriert haben.Bevor der Bereitstellungsjob des Rollouts ausgeführt wird, führt Skaffold alle in
skaffold.yamlkonfigurierten Befehle aus, auf die in einempredeploy-Abschnitt im Pipelineverlauf verwiesen wird.Der
predeploy-Hook wird immer als erster Job in der Phase ausgeführt.Nachdem der Bereitstellungsjob des Rollouts ausgeführt wurde, führt Cloud Deploy alle in
skaffold.yamlkonfigurierten Befehle aus, auf die in einempostdeploy-Abschnitt in der Pipeline-Progression verwiesen wird.
Bereitstellungshooks werden in der Standardausführungsumgebung von Cloud Deploy oder in einer angegebenen alternativen Ausführungsumgebung ausgeführt. Bei Deployments in GKE können Sie die Hooks optional im selben Cluster ausführen, in dem die Anwendung bereitgestellt wird.
Bereitstellungshooks mit einer Canary-Bereitstellung verwenden
Wenn Sie Bereitstellungshooks für eine Canary-Bereitstellung konfigurieren, sollten Sie Folgendes beachten:
In der Phase der Bereitstellungspipeline befindet sich die Konfiguration des Hooks (
predeployundpostdeploy) unterstrategy.canary.canaryDeploymentoderstrategy.canary.customCanaryDeployment.phaseConfigsund nicht unterstrategy.standard.Bei einem automatisierten Canary-Release werden
predeploy-Hooks nur vor dem Deployment in der ersten Phase undpostdeploy-Hooks nur nach dem Deployment in der letzten Phase (stabil) ausgeführt.
Aktionen in Skaffold konfigurieren
Im Abschnitt customActions Ihrer Datei skaffold.yaml sind ein oder mehrere customActions-Abschnitte enthalten, die so konfiguriert sind:
customActions:
- name: ACTION_NAME
containers:
- name: CONTAINER_NAME
image: IMAGE
command: [COMMANDS_TO_RUN]
args: [LIST_OF_ARGS]
In diesem customerActions-Abschnitt:
ACTION_NAME
Ist ein Name für diese Aktion. Dieser Name kann beliebig sein, muss aber innerhalb dieses
skaffold.yamleindeutig sein. Dies ist der Name, auf den in den Pre-Deploy- und Post-Deploy-Aktionen der Lieferpipelinephase verwiesen wird.CONTAINER_NAME
Ist ein Name für den jeweiligen Container. Dieser Name kann beliebig sein, muss aber innerhalb dieses
skaffold.yamleindeutig sein.IMAGE
Ist der Name des Container-Images, in dem Ihr Befehl ausgeführt wird.
COMMANDS_TO_RUN
Eine Liste der Einstiegspunkte, die in diesem Container ausgeführt werden sollen.
"/bin/sh"ist ein typischer Befehl, der hier angegeben wird, um eine Shell aufzurufen. Der Befehl, der in dieser Shell ausgeführt werden soll, wird in den Argumenten angegeben.LIST_OF_ARGS
Eine Liste von Argumenten, die dem Befehl übergeben 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, wäre eines der Argumente hier"-c"und ein weiteres Argument wäre der gesamte Befehl, den Sie in der Shell ausführen möchten, die Sie aufrufen.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 auf die Aktionen verwiesen wird
Um die Konfiguration Ihrer Bereitstellungshooks abzuschließen, konfigurieren Sie die Bereitstellungspipeline so, dass sie auf die benutzerdefinierten Aktionen verweist, die Sie in Ihrer skaffold.yaml-Datei definiert haben. Aktionen vor und nach der Bereitstellung werden in einer oder mehreren bestimmten Phasen in der Pipeline konfiguriert.
So konfigurieren Sie Pre- und Post-Deploy-Hooks in einer Pipelinephase, wenn Sie eine standard-Bereitstellungsstrategie verwenden:
serialPipeline:
stages:
- targetId: hooks-staging
profiles: []
strategy:
standard:
predeploy:
actions: ["PREDEPLOY-ACTION"]
postdeploy:
actions: ["POSTDEPLOY-ACTION"]
In diesem YAML-Code:
PREDEPLOY_ACTION
Entspricht der ACTION_NAME, die Sie in Ihrem
skaffold.yamlverwendet haben, um die benutzerdefinierte Aktion zu definieren, die vor der Bereitstellung ausgeführt werden soll.POSTDEPLOY_ACTION
Entspricht dem ACTION_NAME, das Sie in Ihrem
skaffold.yamlverwendet haben, um die benutzerdefinierte Aktion zu definieren, die nach der Bereitstellung ausgeführt werden soll.
Sie können für predeploy und postdeploy mehrere durch Kommas getrennte Aktionen angeben. Wenn mehrere Aktionen angegeben werden, werden sie seriell in der angegebenen Reihenfolge ausgeführt. Der Job (vor oder nach der Bereitstellung) schlägt bei der ersten Aktion fehl, die fehlschlägt. Die verbleibenden Aktionen werden nicht ausgeführt.
Wenn Sie standardmäßig mehrere Container parallel ausführen und ein Job fehlschlägt, werden beide Container beendet. Sie können dieses Verhalten mit der Skaffold-Fehlerstrategie für benutzerdefinierte Aktionen konfigurieren.
Hooks im Anwendungscluster ausführen
Standardmäßig werden Bereitstellungshooks 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, auf dem Ihre Anwendung ausgeführt wird. Wenn Sie benutzerdefinierte Aktionen in skaffold.yaml konfigurieren und in einer Pipelinephase aktivieren, wird die Aktion automatisch im Cluster des jeweiligen Ziels ausgeführt.
Diese Funktion ist nur für Bereitstellungen in GKE verfügbar, nicht für Cloud Run. Bei Bereitstellungen in Cloud Run können Hooks nur in der Cloud Deploy-Ausführungsumgebung ausgeführt werden.
Wenn Sie Ihren Hook im Cluster ausführen möchten, fügen Sie in der Konfigurationsdatei skaffold.yaml einen executionMode.kubernetesCluster-Abschnitt in den customActions-Abschnitt für die jeweilige benutzerdefinierte Aktion ein:
customActions
- name: ACTION_NAME
containers:
- name: CONTAINER_NAME
image: IMAGE
command: [COMMANDS_TO_RUN]
args: [LIST_OF_ARGS]
executionMode:
kubernetesCluster: {}
Hier sehen Sie ein Beispiel für einen customActions-Abschnitt, der 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: {}
Der executionMode-Abschnitt ist optional. Wenn Sie ihn weglassen, führt Skaffold den benutzerdefinierten Aktionscontainer in der Cloud Deploy-Ausführungsumgebung aus.
Verfügbare Umgebungsvariablen
Cloud Deploy stellt die folgenden Umgebungsvariablen in der Ausführungsumgebung bereit und füllt sie aus. Sie können sie für Ihre Hooks verwenden:
ANTHOS_MEMBERSHIPFür Ziele vom Typ
ANTHOSist dies der vollständig angegebene Ressourcenname der Mitgliedschaft des angehängten GKE-Clusters.CLOUD_RUN_LOCATIONFür Ziele vom Typ
RUNdie Region, in der der Cloud Run-Dienst bereitgestellt wird.CLOUD_RUN_PROJECTFür Ziele vom Typ
RUNdas Projekt, in dem der Cloud Run-Dienst erstellt wurde.CLOUD_RUN_SERVICEFür Ziele vom Typ
RUNder Name des bereitgestellten Cloud Run-Dienstes.CLOUD_RUN_SERVICE_URLSFür Ziele vom Typ
RUNdie URL oder URLs (durch Kommas getrennte Liste), über die Endnutzer auf Ihren Dienst zugreifen. Sie finden diese in den Cloud Run-Dienstdetails für Ihren Dienst in derGoogle Cloud -Konsole.CLOUD_RUN_REVISIONFür Ziele des Typs
RUNdie spezifische Revision des Cloud Run-Dienstes.GKE_CLUSTERFür Ziele vom Typ
GKEist dies der vollständig angegebene Ressourcenname des Google Kubernetes Engine-Clusters, z. B.projects/p/locations/us-central1/clusters/dev.TARGET_TYPEDer spezifische Laufzeittyp des Ziels. Entweder
GKE,ANTHOSoderRUN. Bei benutzerdefinierten Zielvorhaben wird dieser Wert nicht festgelegt.CLOUD_DEPLOY_LOCATIONDie Region, die die Cloud Deploy-Ressourcen enthält.
CLOUD_DEPLOY_DELIVERY_PIPELINEDie ID der Bereitstellungspipeline.
CLOUD_DEPLOY_TARGETDie ID des Ziels.
CLOUD_DEPLOY_PROJECTDie Google Cloud Projektnummer für das Projekt, das die Cloud Deploy-Ressourcen enthält.
CLOUD_DEPLOY_PROJECT_IDDie Google Cloud Projekt-ID für das Projekt.
CLOUD_DEPLOY_RELEASEDie ID des Releases, in dem die Hooks ausgeführt werden.
CLOUD_DEPLOY_ROLLOUTDie ID des Roll-outs, der die Jobs für die Hooks enthält.
CLOUD_DEPLOY_JOB_RUNDie ID des Joblauf, der die aktuelle Ausführung des Jobs darstellt.
CLOUD_DEPLOY_PHASEDie Phase der Einführung, die den Job für die Hooks enthält.
Parameter als Umgebungsvariablen bereitstellen
Zusätzlich zu den in diesem Abschnitt aufgeführten Umgebungsvariablen kann Cloud Deploy alle von Ihnen festgelegten Bereitstellungsparameter an Ihre benutzerdefinierten Container übergeben.