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 et/ou après le déploiement.

Vous pouvez configurer Cloud Deploy et Skaffold pour qu'ils s'exécutent actions pour effectuer des actions pré-déploiement ou des actions 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 prédéploiement et post-déploiement jobs activés le déploiement.

Vous pouvez configurer chaque hook pour qu'il s'exécute dans un environnement d'exécution Cloud Deploy spécifié, mais si vous effectuez un déploiement sur Google Kubernetes Engine, vous pouvez également 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 plus de il n'y a aucun effet supplémentaire.

Comment fonctionnent les hooks de déploiement ?

La section suivante décrit les étapes à suivre pour configurer des hooks de déploiement et Skaffold et Cloud Deploy pour exécuter ces hooks:

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

  2. Vous configurez des hooks à une ou plusieurs étapes de votre pipeline de livraison progression, 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, Skaffold exécute toutes les commandes configurées dans skaffold.yaml qui sont référencés dans une section predeploy du pipeline la progression.

    Le hook predeploy s'exécute toujours en tant que première tâche de la phase.

  4. Une fois le job de déploiement exécuté, Cloud Deploy exécute Commandes configurées dans skaffold.yaml et référencées dans un postdeploy dans la progression du pipeline.

Les hooks de déploiement sont exécutés dans l'exécution Cloud Deploy par défaut ou dans un environnement d'exécution alternatif spécifié. Pour les déploiements à GKE et GKE Enterprise, vous pouvez éventuellement Exécuter les hooks sur le même cluster 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, plusieurs options choses à savoir:

  • À l'étape du pipeline de livraison, configuration du hook (predeploy et postdeploy) est inférieur à strategy.canary.canaryDeployment ou strategy.canary.customCanaryDeployment.phaseConfigs, et non sous strategy.standard

  • Pour une version Canary automatisée, les hooks predeploy sont exécutés avant le déploiement dans ne correspond qu'à la première phase, et les hooks postdeploy sont exécutés après le déploiement dans uniquement la dernière phase (stable).

Configurer des actions dans Skaffold

Dans votre fichier skaffold.yaml, la strophe customActions contient 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 section customerActions:

  • ACTION_NAME

    Nom de l'action. Ce nom peut être choisi librement, mais il doit être unique dans cet élément skaffold.yaml. Il s'agit du nom qui sera référencé des actions pré- et post-déploiement définis à l'étape du pipeline de livraison.

  • CONTAINER_NAME

    est le nom du conteneur spécifique ; Vous pouvez utiliser le nom de votre choix, mais il doit être unique dans cette skaffold.yaml.

  • IMAGE

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

  • COMMANDS_TO_RUN

    Il s'agit d'une liste de 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'un fichier séparé par une virgule en plaçant chaque argument entre guillemets. Si votre COMMAND_TO_RUN est "/bin/sh", alors l'un des arguments ici serait "-c", et un autre serait l'intégralité de la commande à exécuter dans le shell que vous à appeler.

    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, Vous 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é- et post-déploiement sont configurées à une ou plusieurs étapes spécifiques de la progression du pipeline.

Voici comment configurer des hooks avant et après le déploiement dans un 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 au ACTION_NAME que vous avez utilisé dans votre skaffold.yaml pour définir l'action personnalisée à exécuter avant le déploiement.

  • POSTDEPLOY_ACTION

    Identique au ACTION_NAME que vous avez utilisé dans votre skaffold.yaml pour définir l'action personnalisée à 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 s'exécutent de manière séquentielle, dans l'ordre dans lequel elles sont spécifiées. Le job (prédéploiement ou post-déploiement) échoue lors du premier déploiement l'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 de sorte qu'il exécute ces actions personnalisées sur le cluster où l'application est en cours d'exécution. Lorsque vous configurez des actions personnalisées dans skaffold.yaml et que vous les activez à une étape de pipeline, l'action s'exécute automatiquement dans le cluster de cette cible.

Cette fonctionnalité est disponible pour les déploiements sur GKE GKE Enterprise uniquement, pas 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 une strophe executionMode.kubernetesCluster dans votre fichier de configuration skaffold.yaml, dans 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 hook sur le cluster d'applications :

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. Si vous l'omettez, Skaffold exécute conteneur d'action personnalisée dans l'environnement d'exécution Cloud Deploy.

Variables d'environnement disponibles

Cloud Deploy fournit et insère l'environnement suivant variables dans l'environnement d'exécution, que vous pouvez utiliser pour vos hooks:

  • ANTHOS_MEMBERSHIP

    Pour les cibles de type ANTHOS, nom de ressource entièrement spécifié 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 Cloud Run service 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, l'URL ou les URL (liste séparée par une virgule) que les utilisateurs finaux utiliseront pour accéder à votre service. Vous les trouverez dans le les détails du service Cloud Run de votre service, dans le console Google Cloud.

  • CLOUD_RUN_REVISION

    Pour les cibles de type RUN, la révision spécifique de Cloud Run Google Cloud.

  • GKE_CLUSTER

    Pour les cibles de type GKE, nom de ressource entièrement spécifié du cluster Google Kubernetes Engine, par exemple projects/p/locations/us-central1/clusters/dev.

  • TARGET_TYPE

    Type d'environnement d'exécution spécifique de la cible. GKE, ANTHOS ou RUN. Pour les cibles personnalisées, ce paramètre ne sera 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

    Le 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 pour les hooks.

  • CLOUD_DEPLOY_JOB_RUN

    ID de l'exécution de la tâche qui représente l'exécution actuelle de la tâche.

  • CLOUD_DEPLOY_PHASE

    Phase du déploiement qui contient la tâche pour les hooks.

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

Outre les variables d'environnement répertoriées dans cette section, Cloud Deploy peut transmettre à vos conteneurs personnalisés paramètres de déploiement que vous avez définis.

En savoir plus

Étape suivante