Exécuter des hooks avant et après le déploiement

Ce document explique comment exécuter des programmes ou des opérations arbitraires avant ou après le déploiement.

Vous pouvez configurer Cloud Deploy et Skaffold pour qu'ils exécutent des actions qui effectueront des actions pré-déploiement, post-déploiement, ou les deux. 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 sur le déploiement.

Vous pouvez configurer chaque crochet pour qu'il s'exécute dans un environnement d'exécution Cloud Deploy spécifique. 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 sur lequel vous déployez votre application.

Les hooks de déploiement sont supposés être 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 ?

Vous trouverez ci-dessous les étapes de configuration des hooks de déploiement, ainsi que le processus Skaffold et Cloud Deploy pour exécuter ces hooks :

  1. Vous configurez le skaffold.yaml utilisé pour une version donnée afin d'inclure customActions qui identifient la ou les images de conteneur à utiliser pour exécuter les hooks, ainsi que la commande ou le script spécifiques à exécuter sur chaque conteneur.

  2. Vous configurez des hooks dans 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 dans skaffold.yaml.

  3. Avant l'exécution du job de déploiement du déploiement progressif, Skaffold exécute toutes les commandes configurées dans skaffold.yaml référencées dans une strophe predeploy de la progression du pipeline.

    Le crochet predeploy s'exécute toujours en tant que premier job de la phase.

  4. Une fois la tâche de déploiement du déploiement exécutée, Cloud Deploy exécute toutes les commandes configurées dans skaffold.yaml référencées dans une strophe postdeploy de la progression du pipeline.

Les hooks de déploiement s'exécutent 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, vous pouvez éventuellement exécuter les hooks sur le même cluster que celui sur lequel 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 tenir compte de plusieurs éléments :

  • Dans l'étape du pipeline de déploiement, la configuration du hook (predeploy et postdeploy) se trouve sous strategy.canary.canaryDeployment ou strategy.canary.customCanaryDeployment.phaseConfigs, et non sous strategy.standard.

  • Pour un canary automatisé, les hooks predeploy ne sont exécutés qu'avant le déploiement dans la première phase, et les hooks postdeploy ne sont exécutés qu'après le déploiement dans la dernière phase (stable).

Configurer des actions dans Skaffold

Dans votre fichier skaffold.yaml, la strophe customActions accepte une ou plusieurs strophes customActions, configurées comme suit :

customActions:
- name: ACTION_NAME
  containers:
  - name: CONTAINER_NAME
    image: IMAGE
    command: [COMMANDS_TO_RUN]
    args: [LIST_OF_ARGS]

Dans cette strophe customerActions :

  • ACTION_NAME

    Nom de cette action. Vous pouvez choisir le nom de votre choix, 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 dans l'étape du pipeline de déploiement.

  • CONTAINER_NAME

    Nom du conteneur spécifique. Vous pouvez choisir le nom de votre choix, mais il doit être unique dans ce skaffold.yaml.

  • IMAGE

    Nom de l'image de conteneur dans laquelle votre commande sera exécutée.

  • COMMANDS_TO_RUN

    Liste des points d'entrée à exécuter sur ce conteneur. "/bin/sh" est une commande typique à spécifier ici pour appeler un shell. Vous devez inclure la commande à exécuter dans ce shell dans les arguments.

  • LIST_OF_ARGS

    Il s'agit d'une liste d'arguments à fournir à la commande. Il s'agit d'une liste séparée par des virgules, avec chaque argument entre guillemets. Si votre COMMAND_TO_RUN est "/bin/sh", l'un des arguments ici serait "-c", et un autre argument serait l'intégralité de la commande que vous souhaitez exécuter dans le shell que vous invoquez.

    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 qu'il fasse référence aux actions

Pour terminer la configuration de vos hooks de déploiement, vous devez configurer le pipeline de déploiement pour qu'il fasse référence aux 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 dans une ou plusieurs étapes spécifiques de la progression du pipeline.

Voici comment configurer des hooks avant et après le déploiement dans 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

    Identique à l'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

    Il s'agit du même ACTION_NAME que celui 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 des virgules. Lorsque plusieurs actions sont spécifiées, elles sont exécutées de manière séquentielle, dans l'ordre dans lequel elles sont 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'un job échoue, les deux conteneurs sont arrêtés. Vous pouvez configurer ce comportement à l'aide de la stratégie d'échec des actions personnalisées 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 qu'il exécute ces actions personnalisées sur le même cluster que celui sur lequel votre application est exécutée. Lorsque vous configurez des actions personnalisées dans skaffold.yaml et que vous les activez dans une étape de 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 non sur 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 une strophe executionMode.kubernetesCluster dans votre fichier de configuration skaffold.yaml, à l'intérieur de la strophe 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 strophe customActions qui inclut executionMode pour appeler le conteneur de crochet 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: {}

La strophe executionMode est facultative. 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 entièrement spécifié de l'appartenance aux clusters associés à GKE.

  • CLOUD_RUN_LOCATION

    Pour les cibles de type RUN, il s'agit de la région dans laquelle le service Cloud Run est déployé.

  • CLOUD_RUN_PROJECT

    Pour les cibles de type RUN, il s'agit du projet dans lequel le service Cloud Run a été créé.

  • CLOUD_RUN_SERVICE

    Pour les cibles de type RUN, nom du service Cloud Run déployé.

  • CLOUD_RUN_SERVICE_URLS

    Pour les cibles de type RUN, il s'agit de l'URL ou des 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 du service Cloud Run pour votre service, dans la consoleGoogle Cloud .

  • CLOUD_RUN_REVISION

    Pour les cibles de type RUN, il s'agit de la révision spécifique du service Cloud Run.

  • GKE_CLUSTER

    Pour les cibles de type GKE, le nom de ressource complet du cluster Google Kubernetes Engine, par exemple projects/p/locations/us-central1/clusters/dev.

  • TARGET_TYPE

    Type d'exécution spécifique de la cible. GKE, ANTHOS ou RUN. Pour les cibles personnalisées, ce paramètre n'est pas défini.

  • CLOUD_DEPLOY_LOCATION

    Région contenant les ressources Cloud Deploy.

  • CLOUD_DEPLOY_DELIVERY_PIPELINE

    ID du pipeline de livraison.

  • CLOUD_DEPLOY_TARGET

    ID de la cible.

  • CLOUD_DEPLOY_PROJECT

    Numéro de projet Google Cloud pour le projet contenant les ressources Cloud Deploy.

  • CLOUD_DEPLOY_PROJECT_ID

    ID du projet Google Cloud .

  • CLOUD_DEPLOY_RELEASE

    ID de la version dans laquelle les hooks s'exécuteront.

  • CLOUD_DEPLOY_ROLLOUT

    ID du déploiement contenant les jobs pour les hooks.

  • CLOUD_DEPLOY_JOB_RUN

    ID de l'exécution du job qui représente l'exécution actuelle du job.

  • CLOUD_DEPLOY_PHASE

    La phase du déploiement qui contient le job pour les hooks.

Déployer des paramètres en tant que variables d'environnement

En plus des variables d'environnement listées dans cette section, Cloud Deploy peut transmettre à vos conteneurs personnalisés tous les paramètres de déploiement que vous avez définis.

En savoir plus

Étapes suivantes