Ce document explique comment exécuter des programmes ou des opérations arbitraires avant et/ou après le déploiement.
Vous pouvez configurer Cloud Deploy et Skaffold pour exécuter des actions de prédéploiement et/ou de post-déploiement. Ces programmes, exécutés de cette manière, sont appelés "hooks". Les hooks de prédéploiement et de post-déploiement s'exécutent en tant que tâches de prédéploiement et de post-déploiement lors du déploiement.
Vous pouvez configurer chaque hook pour qu'il s'exécute dans un environnement d'exécution Cloud Deploy spécifié. Toutefois, si vous effectuez un déploiement sur Google Kubernetes Engine, vous pouvez éventuellement le configurer pour qu'il s'exécute sur le cluster GKE dans lequel vous déployez votre application.
Les hooks de déploiement sont considérés comme idempotents. Si une action donnée est exécutée plusieurs fois, il n'y a aucun effet supplémentaire.
Comment fonctionnent les hooks de déploiement ?
La section suivante décrit les étapes de configuration des hooks de déploiement, ainsi que les processus Skaffold et Cloud Deploy pour les exécuter:
Vous configurez le
skaffold.yaml
utilisé pour une version donnée afin d'inclure descustomActions
qui identifient la ou les images de conteneur à utiliser pour exécuter les hooks, ainsi que la commande ou le script spécifique à exécuter sur chaque conteneur.Vous configurez des hooks en une ou plusieurs étapes de la progression de votre pipeline de livraison, chacune faisant référence à l'un des
customActions
que vous avez configurés dansskaffold.yaml
.Avant l'exécution de la tâche de déploiement, Skaffold exécute toutes les commandes configurées dans
skaffold.yaml
et référencées dans un stanzapredeploy
dans la progression du pipeline.Le hook
predeploy
s'exécute toujours en tant que premier job de la phase.Une fois la tâche de déploiement exécutée, Cloud Deploy exécute toutes les commandes configurées dans
skaffold.yaml
et référencées dans une stanzapostdeploy
dans la progression du pipeline.
Les hooks de déploiement sont exécutés dans l'environnement d'exécution Cloud Deploy par défaut ou dans un autre environnement d'exécution spécifié. Pour les déploiements sur GKE et GKE Enterprise, vous pouvez éventuellement exécuter les hooks sur le même cluster que celui où l'application est déployée.
Utiliser des hooks de déploiement avec un déploiement Canary
Lorsque vous configurez des hooks de déploiement pour un déploiement Canary, vous devez prendre en compte plusieurs points:
À l'étape du pipeline de livraison, la configuration du hook (
predeploy
etpostdeploy
) se trouve sousstrategy.canary.canaryDeployment
oustrategy.canary.customCanaryDeployment.phaseConfigs
, et non sousstrategy.standard
.Pour une version Canary automatisée, les hooks
predeploy
ne sont exécutés qu'avant le déploiement lors de la première phase, et les hookspostdeploy
ne sont exécutés qu'après le déploiement de la dernière phase (stable).
Configurer les actions dans Skaffold
Dans votre fichier skaffold.yaml
, le bloc customActions
accepte un ou plusieurs stanzas customActions
, configurés comme suit:
customActions
- name: ACTION_NAME
containers:
- name: CONTAINER_NAME
image: IMAGE
command: [COMMANDS_TO_RUN]
args: [LIST_OF_ARGS]
Dans cette stanza customerActions
:
ACTION_NAME
Nom de l'action. Vous pouvez choisir n'importe quel nom, mais il doit être unique dans ce
skaffold.yaml
. Il s'agit du nom qui sera référencé à partir des actions de pré-déploiement et de post-déploiement définies à l'étape du pipeline de livraison.CONTAINER_NAME
Nom du conteneur spécifique. Vous pouvez choisir n'importe quel nom, mais celui-ci doit être unique dans ce
skaffold.yaml
.IMAGE
Nom de l'image de conteneur dans laquelle votre commande s'exécutera.
COMMANDS_TO_RUN
est une liste de points d'entrée à exécuter sur ce conteneur ;
"/bin/sh"
est une commande type à spécifier ici pour appeler un shell. Vous devez inclure la commande à exécuter dans ce shell dans les arguments.LIST_OF_ARGS
Liste d'arguments à fournir à la commande. Il s'agit d'une liste d'éléments séparés par une virgule, les arguments étant placés entre guillemets. Si votre COMMAND_TO_RUN est
"/bin/sh"
, l'un des arguments ici est"-c"
, et un autre argument est la commande entière que vous souhaitez exécuter dans le shell que vous appelez.Exemple :
command: ["/bin/sh"] args: ["-c", `echo "This command ran!"`]
Pour en savoir plus sur les actions personnalisées Skaffold, consultez la documentation Skaffold.
Configurer le pipeline pour référencer les actions
Pour terminer la configuration de vos hooks de déploiement, configurez le pipeline de livraison pour qu'il référence les actions personnalisées que vous avez définies dans votre fichier skaffold.yaml
. Les actions de pré-déploiement et de post-déploiement sont configurées à une ou plusieurs étapes spécifiques de la progression du pipeline.
Voici comment configurer des hooks de pré et post-déploiement lors d'une étape de pipeline lorsque vous utilisez une stratégie de déploiement standard
:
serialPipeline:
stages:
- targetId: hooks-staging
profiles: []
strategy:
standard:
predeploy:
actions: ["PREDEPLOY-ACTION"]
postdeploy:
actions: ["POSTDEPLOY-ACTION"]
Dans ce fichier YAML:
PREDEPLOY_ACTION
Est identique au ACTION_NAME que vous avez utilisé dans votre
skaffold.yaml
pour définir l'action personnalisée que vous souhaitez exécuter avant le déploiement.POSTDEPLOY_ACTION
Est identique au ACTION_NAME que vous avez utilisé dans votre
skaffold.yaml
pour définir l'action personnalisée que vous souhaitez exécuter après le déploiement.
Vous pouvez spécifier plusieurs actions pour predeploy
et postdeploy
, séparées par une virgule. Lorsque plusieurs actions sont spécifiées, elles s'exécutent en série, dans l'ordre dans lequel elles ont été spécifiées. La tâche (prédéploiement ou post-déploiement) échoue lors de la première action qui échoue, et les actions restantes ne sont pas exécutées.
Par défaut, si vous exécutez plusieurs conteneurs en parallèle et qu'une tâche échoue, les deux conteneurs sont arrêtés. Vous pouvez configurer ce comportement à l'aide de la stratégie d'échec de l'action personnalisée Skaffold.
Exécuter les hooks sur le cluster d'application
Par défaut, les hooks de déploiement s'exécutent dans l'environnement d'exécution Cloud Deploy. Vous pouvez également configurer Skaffold pour exécuter ces actions personnalisées sur le cluster où votre application est exécutée. Lorsque vous configurez les actions personnalisées dans skaffold.yaml
et que vous les activez à l'étape du pipeline, l'action s'exécute automatiquement dans le cluster de cette cible.
Cette fonctionnalité n'est disponible que pour les déploiements sur GKE et GKE Enterprise, et non pour Cloud Run. Les déploiements sur Cloud Run ne peuvent exécuter des hooks que dans l'environnement d'exécution Cloud Deploy.
Pour exécuter votre hook sur le cluster, incluez un stanza executionMode.kubernetesCluster
dans votre fichier de configuration skaffold.yaml
, à l'intérieur de la stanza customActions
pour l'action personnalisée spécifique:
customActions
- name: ACTION_NAME
containers:
- name: CONTAINER_NAME
image: IMAGE
command: [COMMANDS_TO_RUN]
args: [LIST_OF_ARGS]
executionMode:
kubernetesCluster: {}
Voici un exemple de stanza customActions
qui inclut executionMode
pour appeler le conteneur de hook sur le cluster d'application:
customActions:
- name: predeploy-action
containers:
- name: predeploy-echo
image: ubuntu
command: ["/bin/sh"]
args: ["-c", 'echo "this is a predeploy action"' ]
executionMode:
kubernetesCluster: {}
Le bloc executionMode
est facultatif et, si vous l'omettez, Skaffold exécute le conteneur d'action personnalisée dans l'environnement d'exécution Cloud Deploy.
Variables d'environnement disponibles
Cloud Deploy fournit et renseigne les variables d'environnement suivantes dans l'environnement d'exécution, que vous pouvez utiliser pour vos hooks:
ANTHOS_MEMBERSHIP
Pour les cibles de type
ANTHOS
, le nom de ressource complet de l'appartenance à Anthos.CLOUD_RUN_LOCATION
Pour les cibles de type
RUN
, la région dans laquelle le service Cloud Run est déployé.CLOUD_RUN_PROJECT
Pour les cibles de type
RUN
, le projet dans lequel le service Cloud Run a été créé.CLOUD_RUN_SERVICE
Pour les cibles de type
RUN
, le nom du service Cloud Run déployé.CLOUD_RUN_SERVICE_URLS
Pour les cibles de type
RUN
, la ou les URL (liste séparée par des virgules) que les utilisateurs finaux utiliseront pour accéder à votre service. Vous les trouverez dans les détails de votre service Cloud Run, dans la console Google Cloud.CLOUD_RUN_REVISION
Pour les cibles de type
RUN
, la révision spécifique du service Cloud Run.GKE_CLUSTER
Pour les cibles de type
GKE
, le nom complet de la ressource du cluster Google Kubernetes Engine, par exempleprojects/p/locations/us-central1/clusters/dev
.TARGET_TYPE
Type d'exécution spécifique de la cible.
GKE
,ANTHOS
ouRUN
. Il ne sera pas défini pour les cibles personnalisées.CLOUD_DEPLOY_LOCATION
Région contenant les ressources Cloud Deploy.
CLOUD_DEPLOY_DELIVERY_PIPELINE
ID du pipeline de livraison.
CLOUD_DEPLOY_TARGET
Identifiant de la cible.
CLOUD_DEPLOY_PROJECT
Projet Google Cloud contenant les ressources Cloud Deploy.
CLOUD_DEPLOY_RELEASE
ID de la version dans laquelle les hooks seront exécutés.
CLOUD_DEPLOY_ROLLOUT
ID du déploiement contenant les tâches associées aux hooks.
CLOUD_DEPLOY_JOB_RUN
ID de l'exécution de la tâche qui représente l'exécution en cours de la tâche.
CLOUD_DEPLOY_PHASE
La phase du déploiement contenant la tâche pour les hooks.
Étapes suivantes
Consultez le guide de démarrage rapide: exécuter des hooks avant et après le déploiement.
En savoir plus sur Skaffold