Ce document explique comment valider 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 ?
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.
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.
Une fois un déploiement déployé (
skaffold apply
), Cloud Deploy exécute la commandeskaffold 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.
Skaffold appelle le ou les tests spécifiés dans la strophe
verify
de votreskaffold.yaml
pour les exécuter sur l'application déployée.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 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:
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 de la tâche
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 :
Création, mise à jour et suppression d'exécutions de tâches
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 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
ouVerify
)
Voici un exemple de message Pub/Sub pour une exécution de tâche ayant échoué, 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
Pour activer la validation du déploiement pour 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
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.
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'application
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é est disponible uniquement pour les déploiements dans GKE et GKE Enterprise, et non 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 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 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 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 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 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
, 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é.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 complet de la ressource de l'instance déployée Service Cloud Run, par exempleprojects/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 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 exempleprojects/p/locations/us-central1/clusters/dev
.TARGET_TYPE
Type d'environnement d'exécution spécifique de la cible.
GKE
,ANTHOS
ouRUN
.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 s'exécutera.
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 tâche.
CLOUD_DEPLOY_PHASE
phase du déploiement qui contient la tâche à vérifier.
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.