Vérifier votre déploiement

Ce document explique comment vérifier un déploiement Cloud Deploy.

Vous pouvez configurer Cloud Deploy et Skaffold pour vérifier qu'un que vous avez déployée sur n'importe quelle cible fonctionne correctement. La validation s'effectue à l'aide de votre propre image de test, et vous configurez Cloud Deploy et Skaffold pour exécuter ces tests après le déploiement se termine.

Par défaut, la vérification du déploiement s'exécute environnement d'exécution, mais vous pouvez aussi le configurer pour qu'il s'exécute sur le même cluster où l'application s'exécute.

Comment la vérification du déploiement fonctionne-t-elle ?

  1. Vous configurez Skaffold pour la validation.

    Cette configuration identifie la ou les images de conteneur à utiliser pour exécuter et les commandes spécifiques (script, par exemple) à exécuter à partir de ce de l'image de conteneur.

  2. Vous configurez une ou plusieurs cibles dans votre diffusion. pour valider le déploiement.

    Cette configuration active la vérification des charges de travail déployées dans ce cible.

  3. Après le déploiement (skaffold apply), Cloud Deploy s'exécute la 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 cluster où l'application conteneur est en cours d'exécution.

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

  5. Le succès ou l'échec des tests exécutés indique la réussite ou l'échec de la vérification.

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

      0 indique la réussite de l'opération. Un code de sortie différent de zéro indique un échec. Pour générer le résultat de la vérification souhaité, assurez-vous que le conteneur se ferme le code de sortie approprié. Si plusieurs conteneurs sont exécutés dans le cadre de la validation, ils doivent tous réussir pour que la validation aboutisse.

    • Si la vérification échoue, le déploiement échoue également.

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

      Informations sur le déploiement dans la console Google Cloud, y compris l'état de la validation

  6. Vous pouvez ignorer ou retenter la validation ayant échoué.

    Vous pouvez également terminer une tâche de vérification en cours.

Composants utilisés pour la validation

La ressource de déploiement inclut les qui prennent en charge la vérification du déploiement:

  • Phase

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

  • Job

    Opération spécifique à effectuer sur un déploiement, telle que le déploiement ou la vérification.

  • Exécution du job

    Enfant de la ressource de déploiement, le job exécuté est une instance d'un job, par une tentative de déploiement.

Pour en savoir plus sur les ressources Cloud Deploy, consultez la page Cloud Deploy architecture de service

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:

  • Exécution du job : création, mise à jour et suppression

    Ces notifications sont publiées dans le sujet 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 l'exécution d'un job Create, publié dans 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 du job

    Ces notifications sont publiées dans le sujet 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 tâche ayant échoué run, publié dans 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

L'activation de la validation du déploiement pour une cible Cloud Deploy consiste concernant l'ajout d'une propriété verify: true à une ou plusieurs cibles données dans la progression du 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 vérification du déploiement est activée sur la cible dev. mais pas sur la cible prod. verify: false équivaut à omettre le verify ou l'intégralité du strophe 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

L'activation de la validation du déploiement pour une cible nécessite un bloc verify dans le fichier de configuration skaffold.yaml pour votre déploiement. Cette configuration à un profil Skaffold spécifique, si vous utilisez des profils distincts cible.

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

Voici un exemple de skaffold.yaml qui inclut un strophe 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 illustre une stanza verify. identifier 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 vos applications. et ne constitue pas une variable d'environnement Cloud Deploy disponible.

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

Par défaut, la vérification du déploiement s'exécute environnement d'exécution. Vous pouvez également configurer Skaffold pour exécuter le conteneur Verification sur le cluster où votre application s'exécute. Si vous configurez la validation en cluster skaffold.yaml et activez la validation sur une cible, la validation 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 Cloud Run ne peut exécuter la validation que dans le Environnement d'exécution Cloud Deploy

La validation en cluster nécessite Skaffold version 2.3 ou ultérieure

Pour exécuter votre conteneur de validation sur le cluster, incluez un Stupide executionMode.kubernetesCluster dans votre configuration skaffold.yaml dans le bloc verify du conteneur de validation spécifique:

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

Voici un exemple de validation du bloc comprenant executionMode pour appelez le conteneur de vérification sur le cluster d'application:

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

Le bloc executionMode est facultatif. Si vous l'omettez, Skaffold exécute de validation dans l'environnement d'exécution Cloud Deploy.

Relancer la validation

Lorsqu'une tâche de validation échoue, vous pouvez relancer la vérification en créant une exécution de job:

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

Une nouvelle tentative de validation fait passer l'état du déploiement de FAILED à IN_PROGRESS

Vous ne pouvez relancer une vérification que pour un déploiement dont le job de vérification a échoué.

Variables d'environnement disponibles

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

  • ANTHOS_MEMBERSHIP

    Pour les cibles de type ANTHOS, le nom de ressource complet de la ressource Anthos .

  • CLOUD_RUN_LOCATION

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

  • 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 complet de la ressource de l'instance déployée Service Cloud Run, par exemple projects/p/locations/us-central1/services/dev.

  • CLOUD_RUN_SERVICE_URLS

    Pour les cibles de type RUN, la ou les URL (liste d'éléments séparés par une virgule) qui se terminent les utilisateurs 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, le nom de ressource complet de la ressource 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 exécutée par l'environnement d'exécution.

  • 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 sera exécutée.

  • CLOUD_DEPLOY_ROLLOUT

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

  • CLOUD_DEPLOY_JOB_RUN

    L'ID de l'exécution de la tâche qui représente l'exécution actuelle du d'un projet.

  • CLOUD_DEPLOY_PHASE

    phase du déploiement qui contient la tâche à vérifier.