Questo documento descrive come verificare un deployment di Cloud Deploy.
Puoi configurare Cloud Deploy e Skaffold per verificare che un'applicazione di cui hai eseguito il deployment in qualsiasi target funzioni correttamente. La verifica viene eseguita utilizzando la tua immagine di test e configuri Cloud Deploy e Skaffold per eseguire questi test al termine del deployment.
Per impostazione predefinita, la verifica del deployment viene eseguita nell'ambiente di esecuzione di Cloud Deploy, ma puoi anche configurarla per l'esecuzione nello stesso cluster in cui è in esecuzione l'applicazione.
Come funziona la verifica del deployment?
Configura Skaffold per la verifica.
Questa configurazione identifica l'immagine o le immagini container da utilizzare per eseguire i test e i comandi specifici (ad esempio lo script) da eseguire da quell'immagine container.
Puoi specificare più di un'immagine container. Se specifichi più contenitori, vengono eseguiti in parallelo, non in sequenza.
Configura una o più destinazioni nella pipeline di distribuzione per la verifica del deployment.
Questa configurazione abilita la verifica per i workload di cui è stato eseguito il deployment su questa destinazione.
Dopo il deployment di un rollout (
skaffold apply), Cloud Deploy esegue il comandoskaffold verifynell'ambiente di esecuzione di Cloud Deploy.Per i deployment su Google Kubernetes Engine e GKE Enterprise, puoi facoltativamente eseguire il container o i container di verifica sullo stesso cluster in cui è in esecuzione il container dell'applicazione.
Skaffold richiama il test o i test specificati nella sezione
verifydel tuoskaffold.yamlda eseguire sull'applicazione di cui è stato eseguito il deployment.L'esito positivo o negativo dei test eseguiti indica l'esito positivo o negativo della verifica.
L'esito positivo della verifica è determinato dal codice di uscita del container eseguito.
0indica che l'operazione è riuscita. Un codice di uscita diverso da zero indica un errore. Per generare il risultato di verifica previsto, assicurati che il contenitore esca con il codice di uscita appropriato. Se vengono eseguiti più contenitori nell'ambito della verifica, tutti devono avere esito positivo affinché la verifica riesca.Se la verifica non va a buon fine, anche l'implementazione non va a buon fine.
Se un deployment non riesce durante la verifica, puoi verificarlo esaminando l'implementazione:
Puoi ignorare o riprovare una verifica non riuscita.
Puoi anche terminare un job di verifica in corso.
Componenti utilizzati per la verifica
La risorsa rollout include i seguenti oggetti, che supportano la verifica del deployment:
Fase
L'insieme di operazioni (job) in un rollout raggruppate logicamente insieme, ad esempio un deployment o un deployment e una verifica.
Job
L'operazione specifica da eseguire su un'implementazione, ad esempio deploy o verifica.
Esecuzione job
Un elemento figlio della risorsa di implementazione, l'esecuzione del job è un'istanza di un job, ad esempio un tentativo di deployment.
Per saperne di più sulle risorse Cloud Deploy, consulta Architettura del servizio Cloud Deploy.
Notifiche generate dalla verifica del deployment
Cloud Deploy genera messaggi Pub/Sub e li pubblica per i seguenti eventi:
Creazione, aggiornamento ed eliminazione dell'esecuzione di un job
Queste notifiche vengono pubblicate nell'argomento
clouddeploy-resourcese contengono i seguenti attributi:ResourceResourceType(JobRun)Action(Create,Update,Delete)ProjectNumberLocationTargetIdDeliveryPipelineIdReleaseIdRolloutIdJobRunId
Di seguito è riportato un esempio di messaggio Pub/Sub per la creazione di un'esecuzione del job, pubblicato nell'argomento 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"
}
},
Avvio, esito positivo e negativo dell'esecuzione del job
Queste notifiche vengono pubblicate nell'argomento
clouddeploy-operationse contengono i seguenti attributi:ResourceResourceType(JobRun)Action(Start,Succeed,Failure)ProjectNumberLocationTargetIdDeliveryPipelineIdReleaseIdRolloutIdJobRunIdPhaseIdJobIdJobType(DeployoVerify)
Di seguito è riportato un esempio di messaggio Pub/Sub per un'esecuzione del job non riuscita, pubblicato nell'argomento 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"
}
},
Configura Cloud Deploy per la verifica del deployment
L'attivazione della verifica del deployment per un target Cloud Deploy consiste
nell'aggiunta di una proprietà verify: true
a un determinato target (o target) in una progressione della pipeline di distribuzione, come mostrato in
questo esempio:
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
In questa configurazione, la verifica del deployment è abilitata sulla destinazione dev,
ma non sulla destinazione prod. verify: false equivale a omettere la proprietà
verify o l'intera sezione strategy.
L'operazione di verifica viene eseguita all'interno del proprio ambiente di esecuzione.
Questo ambiente di esecuzione può essere configurato per VERIFY come per RENDER e DEPLOY.
Configura Skaffold per la verifica del deployment
L'attivazione della verifica del deployment per una destinazione richiede una sezione verify nel file di configurazione skaffold.yaml per il deployment. Questa configurazione
può essere per un profilo Skaffold specifico, se utilizzi profili separati per
destinazione.
Questa sezione verify identifica uno o più container da eseguire per la
verifica, ad esempio i test di integrazione. Se specifichi più contenitori, vengono eseguiti in parallelo, non in sequenza.
Di seguito è riportato un esempio di skaffold.yaml che include una sezione 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"]
Questo esempio mostra una
stanza verify
che identifica un container da utilizzare e uno script di test da eseguire in quel container.
#ENDPOINT_URL in questo esempio è solo un segnaposto per l'URL delle tue applicazioni
e non è una variabile di ambiente Cloud Deploy disponibile.
Esegui il container o i container di verifica sul cluster di applicazioni
Per impostazione predefinita, la verifica del deployment viene eseguita nell'ambiente di esecuzione di Cloud Deploy. Puoi anche
configurare Skaffold per eseguire il container o i container di verifica sullo stesso
cluster in cui è in esecuzione l'applicazione. Quando configuri la verifica in-cluster in skaffold.yaml e attivi la verifica su una destinazione, la verifica viene eseguita automaticamente nel cluster della destinazione.
Questa funzionalità è disponibile solo per i deployment su GKE e GKE Enterprise, non per Cloud Run. I deployment in Cloud Run possono eseguire la verifica solo nell'ambiente di esecuzione di Cloud Deploy.
Per eseguire i container di verifica sul cluster, includi una sezione
executionMode.kubernetesCluster nel file di configurazione skaffold.yaml, all'interno della sezione verify per il container di verifica specifico:
verify:
- name:
container:
name:
image:
command:
args:
executionMode:
kubernetesCluster:
Di seguito è riportato un esempio di sezione di verifica che include executionMode per
richiamare il container di verifica sul cluster di applicazioni:
verify:
- name: integration-test-container
container:
name: integration-test-container
image: integration-test-container
executionMode:
kubernetesCluster: {}
La sezione executionMode è facoltativa e, se la ometti, Skaffold esegue i
container di verifica nell'ambiente di esecuzione di Cloud Deploy.
Riprova la verifica
Quando un job di verifica non va a buon fine, puoi riprovare la verifica creando una nuova esecuzione del 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
Se riprovi la verifica, lo stato dell'implementazione cambia da FAILED a
IN_PROGRESS.
Puoi riprovare una verifica solo per un'implementazione il cui job di verifica non è riuscito.
Variabili di ambiente disponibili
Cloud Deploy fornisce e compila le seguenti variabili di ambiente nell'ambiente di esecuzione di VERIFY, che puoi utilizzare per i test:
ANTHOS_MEMBERSHIPPer i target di tipo
ANTHOS, il nome della risorsa completamente specificato dell'appartenenza ad Anthos.CLOUD_RUN_LOCATIONPer le destinazioni di tipo
RUN, la regione in cui è stato eseguito il deployment del servizio Cloud Run.CLOUD_RUN_PROJECTPer le destinazioni di tipo
RUN, il progetto in cui è stato creato il servizio Cloud Run.CLOUD_RUN_SERVICEPer le destinazioni di tipo
RUN, il nome risorsa completamente specificato del servizio Cloud Run di cui è stato eseguito il deployment, ad esempioprojects/p/locations/us-central1/services/dev.CLOUD_RUN_SERVICE_URLSPer i target di tipo
RUN, l'URL o gli URL (elenco separato da virgole) che gli utenti finali utilizzeranno per accedere al tuo servizio. Puoi trovarli nei dettagli del servizio Cloud Run per il tuo servizio, nella consoleGoogle Cloud .CLOUD_RUN_REVISIONPer le destinazioni di tipo
RUN, la revisione specifica del servizio Cloud Run.GKE_CLUSTERPer le destinazioni di tipo
GKE, il nome della risorsa completamente specificato del cluster Google Kubernetes Engine, ad esempioprojects/p/locations/us-central1/clusters/dev.TARGET_TYPEIl tipo di runtime specifico della destinazione.
GKE,ANTHOSoRUN.CLOUD_DEPLOY_LOCATIONLa regione in cui è in esecuzione l'ambiente di esecuzione.
CLOUD_DEPLOY_DELIVERY_PIPELINELa pipeline di distribuzione dell'ID in cui è in esecuzione l'ambiente di esecuzione.
CLOUD_DEPLOY_TARGETL'ID della destinazione in cui è in esecuzione l'ambiente di esecuzione.
CLOUD_DEPLOY_PROJECTIl numero di progetto del progetto Google Cloud in cui è in esecuzione l'ambiente di esecuzione.
CLOUD_DEPLOY_PROJECT_IDL'ID progetto Google Cloud contenente le risorse Cloud Deploy.
CLOUD_DEPLOY_RELEASEL'ID della release in cui verrà eseguita la verifica.
CLOUD_DEPLOY_ROLLOUTL'ID del rollout che contiene i job da verificare.
CLOUD_DEPLOY_JOB_RUNL'ID dell'esecuzione del job che rappresenta l'esecuzione corrente del job.
CLOUD_DEPLOY_PHASELa fase dell'implementazione che contiene il job di verifica.
Esegui il deployment dei parametri come variabili di ambiente
Oltre alle variabili di ambiente elencate in questa sezione, Cloud Deploy può passare ai tuoi container personalizzati qualsiasi parametro di deployment che hai impostato.