Vérifier votre déploiement

Ce document explique comment valider un déploiement Cloud Deploy.

Vous pouvez configurer Cloud Deploy et Skaffold pour vérifier qu'une application que vous avez déployée sur une cible fonctionne correctement. La validation est effectuée à l'aide de votre propre image de test, et vous configurez Cloud Deploy et Skaffold pour exécuter ces tests une fois le déploiement terminé.

Par défaut, la vérification du déploiement s'exécute dans l'environnement d'exécution de Cloud Deploy, mais vous pouvez également la configurer pour qu'elle s'exécute sur le même cluster que l'application.

Comment fonctionne la validation de déploiement ?

  1. Vous configurez Skaffold pour la validation.

    Cette configuration identifie l'image ou les images de conteneur à utiliser pour exécuter des tests, ainsi que les commandes spécifiques (script, par exemple) à exécuter à partir de cette image de conteneur.

  2. Vous configurez une ou plusieurs cibles dans votre pipeline de diffusion pour la validation du déploiement.

    Cette configuration active la validation des charges de travail déployées sur cette cible.

  3. Une fois un déploiement déployé (skaffold apply), Cloud Deploy exécute la commande skaffold verify dans l'environnement d'exécution Cloud Deploy.

    Pour les déploiements sur Google Kubernetes Engine et GKE Enterprise, vous pouvez éventuellement exécuter le conteneur de validation sur le même cluster que le conteneur de l'application.

  4. Skaffold appelle le ou les tests spécifiés dans la strophe verify de votre skaffold.yaml pour les exécuter sur l'application déployée.

  5. La réussite ou l'échec des tests exécutés indique la réussite ou l'échec de la validation.

    • La réussite de la validation est déterminée par le code de sortie du conteneur exécuté.

      0 indique un succès. Un code de sortie non nul indique un échec. Pour générer le résultat de validation souhaité, assurez-vous que le conteneur se termine avec le code de sortie approprié. Si plusieurs conteneurs sont exécutés lors de la validation, ils doivent tous réussir pour que la validation aboutisse.

    • Si la validation échoue, le déploiement échoue également.

    • Si un déploiement échoue lors de la validation, vous pouvez le constater en inspectant le déploiement:

      Détails du déploiement dans la console Google Cloud, y compris l'état de validation

  6. Vous pouvez ignorer ou réessayer une validation ayant échoué.

    Vous pouvez également arrêter une tâche de validation en cours.

Composants utilisés pour la validation

La ressource rollout inclut les objets suivants, qui permettent de vérifier le déploiement:

  • Phase

    Ensemble d'opérations (tâches) d'un déploiement regroupées logiquement, par exemple un déploiement ou un déploiement et une validation.

  • Job

    Opération spécifique à effectuer sur un déploiement, par exemple le déploiement ou la validation.

  • Exécution de la tâche

    En tant qu'enfant de la ressource de déploiement, l'exécution de la tâche est une instance d'une tâche, par exemple une tentative de déploiement.

Pour en savoir plus sur les ressources Cloud Deploy, consultez la section Architecture du service Cloud Deploy.

Notifications générées par la validation du déploiement

Cloud Deploy génère des messages Pub/Sub et les publie pour les événements suivants:

  • Création, mise à jour et suppression d'exécutions de tâches

    Ces notifications sont publiées sur le thème clouddeploy-resources et contiennent les attributs suivants:

    • Resource
    • ResourceType (JobRun)
    • Action (Create, Update, Delete)
    • ProjectNumber
    • Location
    • TargetId
    • DeliveryPipelineId
    • ReleaseId
    • RolloutId
    • JobRunId

Voici un exemple de message Pub/Sub pour la création d'une exécution de tâche, publié sur le sujet clouddeploy-resources:

{
    "ackId": "UAYWLF1GSFE3GQhoUQ5PXiM_NSAoRRAGAE8CKF15MFcrQVh9Dz4NGXJ9YXRiWRIJBkUHeF9cEQ1iXE5EB0nq0KDVV1dKXxYGAExQeVhbHQVoWVh0Bnn7h5nK-8HjYwk9OqKarPdtO4PY2fNHZiI9XhJLLD5-My5FQV5AEkw4G0RJUytDCypYEU4EISE-MD5FU0Q",
    "message": {
      "attributes": {
        "Action": "Create",
        "DeliveryPipelineId": "dv-pipeline",
        "JobRunId": "634f8c6f-30c3-49ca-af80-68dc24d4cc5d",
        "Location": "us-central1",
        "ProjectNumber": "253401481285",
        "ReleaseId": "test-release-100",
        "Resource": "projects/253401481285/locations/us-central1/deliveryPipelines/dv-pipeline/releases/test-release-100/rollouts/test-release-100-to-dev-0001/jobRuns/634f8c6f-30c3-49ca-af80-68dc24d4cc5d",
        "ResourceType": "JobRun",
        "RolloutId": "test-release-100-to-dev-0001"
      },
      "messageId": "5572937706805411",
      "publishTime": "2022-09-07T14:00:46.040Z"
    }
  },
  • Démarrage, réussite et échec de l'exécution de la tâche

    Ces notifications sont publiées sur le thème clouddeploy-operations et contiennent les attributs suivants:

    • Resource
    • ResourceType (JobRun)
    • Action (Start, Succeed, Failure)
    • ProjectNumber
    • Location
    • TargetId
    • DeliveryPipelineId
    • ReleaseId
    • RolloutId
    • JobRunId
    • PhaseId
    • JobId
    • JobType (Deploy ou Verify)

Voici un exemple de message Pub/Sub pour une exécution de tâche ayant échoué, publié sur le sujet clouddeploy-operations:

{
    "ackId": "RFAGFixdRkhRNxkIaFEOT14jPzUgKEUUBAgUBXx9cEFPdVhec2hRDRlyfWB9aVsbCAUXU3cJURsHaE5tdR-6xcvaS0NVb18UAgRFWndfXhMEblhfcy-fkK3HwvT9U0AvOemNgdZpe6jHiulvZiM9XxJLLD5-My5FQV5AEkw4G0RJUytDCypYEU4EISE-MD5FUw",
    "message": {
      "attributes": {
        "Action": "Failure",
        "DeliveryPipelineId": "dv-pipeline",
        "JobId": "verify",
        "JobRunId": "b389224a-c259-4a00-ab75-c22e48bc3136",
        "JobType": "Verify",
        "Location": "us-central1",
        "PhaseId": "stable",
        "ProjectNumber": "253401481285",
        "ReleaseId": "test-release-101",
        "Resource": "projects/253401481285/locations/us-central1/deliveryPipelines/dv-pipeline/releases/test-release-101/rollouts/test-release-101-to-dev-0001/jobRuns/b389224a-c259-4a00-ab75-c22e48bc3136",
        "ResourceType": "JobRun",
        "RolloutId": "test-release-101-to-dev-0001",
        "TargetId": "dev"
      },
      "messageId": "5573609905896436",
      "publishTime": "2022-09-07T15:35:37.906Z"
    }
  },

Configurer Cloud Deploy pour la validation du déploiement

Pour activer la validation du déploiement d'une cible Cloud Deploy, ajoutez une propriété verify: true à une ou plusieurs cibles données dans la progression d'un pipeline de livraison, comme illustré dans cet exemple:

apiVersion: deploy.cloud.google.com/v1
kind: DeliveryPipeline
metadata:
 name: my-demo-app
description: main application pipeline
serialPipeline:
 stages:
 - targetId: dev
   profiles: []
   strategy:
     standard:
       verify: true
 - targetId: prod
   profiles: []
   strategy:
     standard:
       verify: false

Dans cette configuration, la validation du déploiement est activée sur la cible dev, mais pas sur la cible prod. verify: false équivaut à omettre la propriété verify ou l'intégralité du stanza strategy.

L'opération de validation est exécutée dans son propre environnement d'exécution. Cet environnement d'exécution peut être configuré pour VERIFY de la même manière que pour RENDER et DEPLOY.

Configurer Skaffold pour la validation du déploiement

Pour activer la validation du déploiement pour une cible, vous devez ajouter une section verify dans le fichier de configuration skaffold.yaml de votre déploiement. Cette configuration peut concerner un profil Skaffold spécifique, si vous utilisez des profils distincts par cible.

Cette strophe verify identifie un conteneur à exécuter pour effectuer la validation (par exemple, un test d'intégration).

Voici un exemple de skaffold.yaml incluant une stanza verify:

apiVersion: skaffold/v4beta7
kind: Config
build:
  artifacts:
    - image: integration-test
      context: integration-test
manifests:
  rawYaml:
  - kubernetes.yaml
deploy:
  kubectl: {}
verify:
- name: verify-integration-test
  container:
    name: integration-test
    image: integration-test
    command: ["./test-systems.sh"]
- name: verify-endpoint-test
  container:
    name: alpine
    image: alpine
    command: ["/bin/sh"]
    args: ["-c", "wget #ENDPOINT_URL"]

Cet exemple simple montre une strophe verify identifiant un conteneur à utiliser et un script de test à exécuter dans ce conteneur. Dans cet exemple, #ENDPOINT_URL n'est qu'un espace réservé pour l'URL de vos applications et n'est pas une variable d'environnement Cloud Deploy disponible.

Exécuter le conteneur de validation sur le cluster d'applications

Par défaut, la validation du déploiement s'exécute dans l'environnement d'exécution Cloud Deploy. Vous pouvez également configurer Skaffold pour exécuter le conteneur de validation sur le même cluster que celui sur lequel votre application s'exécute. Lorsque vous configurez la validation dans le cluster dans skaffold.yaml et activez la validation sur une cible, la validation 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 la validation que dans l'environnement d'exécution Cloud Deploy.

La validation dans le cluster nécessite la version 2.3 ou ultérieure de Skaffold.

Pour exécuter votre conteneur de validation sur le cluster, incluez une section executionMode.kubernetesCluster dans votre fichier de configuration skaffold.yaml, dans la section verify du conteneur de validation spécifique:

verify:
- name: 
  container:
    name: 
    image: 
    command: 
    args: 
  executionMode:
    kubernetesCluster:

Voici un exemple de strophe de validation qui inclut executionMode pour appeler le conteneur de validation sur le cluster d'applications:

verify:
- name: integration-test-container
  container:
    name: integration-test-container
    image: integration-test-container
  executionMode:
    kubernetesCluster: {}

La strophe executionMode est facultative. Si vous l'omettez, Skaffold exécute le conteneur de validation dans l'environnement d'exécution Cloud Deploy.

Réessayer la validation

Lorsqu'une tâche de validation échoue, vous pouvez réessayer la validation en créant une nouvelle exécution de tâche:

gcloud deploy rollouts retry-job ROLLOUT_NAME \
             --job-id=JOB_ID \
             --phase-id=PHASE_ID \
             --delivery-pipeline=PIPELINE_NAME \
             --release=RELEASE_NAME \
             --region=REGION

Si vous réessayez la validation, l'état du déploiement passe de FAILED à IN_PROGRESS.

Vous ne pouvez relancer une validation que pour un déploiement dont la tâche de validation a échoué.

Variables d'environnement disponibles

Cloud Deploy fournit et renseigne les variables d'environnement suivantes dans l'environnement d'exécution VERIFY, que vous pouvez utiliser pour vos tests:

  • 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 le service Cloud Run a été créé.

  • CLOUD_RUN_SERVICE

    Pour les cibles de type RUN, nom de ressource entièrement spécifié du service Cloud Run déployé, par exemple projects/p/locations/us-central1/services/dev.

  • 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 les détails du service Cloud Run pour votre service, 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, 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.

  • CLOUD_DEPLOY_LOCATION

    Région dans laquelle l'environnement d'exécution s'exécute.

  • CLOUD_DEPLOY_DELIVERY_PIPELINE

    Pipeline de diffusion d'ID exécuté par l'environnement d'exécution.

  • CLOUD_DEPLOY_TARGET

    ID de la cible sur laquelle l'environnement d'exécution s'exécute.

  • CLOUD_DEPLOY_PROJECT

    Numéro du projet Google Cloud dans lequel l'environnement d'exécution s'exécute.

  • CLOUD_DEPLOY_RELEASE

    ID de la version dans laquelle la validation s'exécutera.

  • CLOUD_DEPLOY_ROLLOUT

    ID du déploiement contenant les tâches à valider.

  • 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 de validation.

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