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 in modo che venga eseguita nello stesso cluster in cui è in esecuzione l'applicazione.
Come funziona la verifica del deployment?
Configuri 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 script) da eseguire da quell'immagine container.
Configura uno o più target nella pipeline di distribuzione per la verifica del deployment.
Questa configurazione consente la verifica dei carichi di lavoro di cui è stato eseguito il deployment in quel target.
Dopo aver eseguito il deployment di un rollout (
skaffold apply
), Cloud Deploy esegue il comandoskaffold verify
nell'ambiente di esecuzione di Cloud Deploy.Per i deployment su Google Kubernetes Engine e GKE Enterprise, facoltativamente puoi eseguire il contenitore di verifica nello stesso cluster in cui è in esecuzione il contenitore dell'applicazione.
Skaffold invoca il test o i test specificati nella stanza
verify
del tuoskaffold.yaml
da eseguire sull'applicazione di cui è stato eseguito il deployment.Il successo o l'esito negativo dei test eseguiti indica il successo o l'esito negativo della verifica.
L'esito positivo della verifica è determinato dal codice di uscita del contenitore eseguito.
0
indica il successo. Un codice di uscita diverso da zero indica un errore. Per generare il risultato di verifica desiderato, assicurati che il contenitore esce con il codice di uscita appropriato. Se nell'ambito della verifica viene eseguito più di un contenitore, tutti devono avere esito positivo affinché la verifica riesca.Se la verifica non va a buon fine, l'implementazione non va a buon fine.
Se un deployment non va a buon fine durante la verifica, puoi visualizzarlo controllando 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
La raccolta di operazioni (job) in un rollout raggruppate insieme in modo logico, ad esempio un deployment o un deployment e una verifica.
Job
L'operazione specifica da eseguire su un'implementazione, ad esempio il deployment o la verifica.
Esecuzione job
Elemento secondario 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 l'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 di esecuzioni di job
Queste notifiche vengono pubblicate nell'argomento
clouddeploy-resources
e contengono i seguenti attributi:Resource
ResourceType
(JobRun
)Action
(Create
,Update
,Delete
)ProjectNumber
Location
TargetId
DeliveryPipelineId
ReleaseId
RolloutId
JobRunId
Di seguito è riportato un esempio di messaggio Pub/Sub per la creazione di un'esecuzione di 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 ed esito negativo dell'esecuzione del job
Queste notifiche vengono pubblicate nell'argomento
clouddeploy-operations
e contengono i seguenti attributi:Resource
ResourceType
(JobRun
)Action
(Start
,Succeed
,Failure
)ProjectNumber
Location
TargetId
DeliveryPipelineId
ReleaseId
RolloutId
JobRunId
PhaseId
JobId
JobType
(Deploy
oVerify
)
Di seguito è riportato un esempio di messaggio Pub/Sub per l'esecuzione di un 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'aggiungere una proprietà verify: true
a un determinato target o a più 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 è attivata sulla destinazione dev
, ma non sulla destinazione prod
. verify: false
è equivalente all'omissione della proprietà verify
o dell'intera stanza strategy
.
L'operazione di verifica viene eseguita nel 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 un target richiede una stanza verify
nel
file di configurazione skaffold.yaml
per il deployment. Questa configurazione può essere per un profilo Skaffold specifico, se utilizzi profili distinti per ogni target.
Questa stanza verify
identifica un contenitore da eseguire per eseguire la verifica, ad esempio un test di integrazione.
Di seguito è riportato un esempio di skaffold.yaml
che include una 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"]
Questo semplice esempio mostra una verify
stanza
che identifica un contenitore da utilizzare e uno script di test da eseguire in quel contenitore.
#ENDPOINT_URL
in questo esempio è solo un segnaposto per l'URL delle applicazioni e non è una variabile di ambiente Cloud Deploy disponibile.
Esegui il container di verifica sul cluster di applicazioni
Per impostazione predefinita, la verifica del deployment viene eseguita nell'ambiente di esecuzione Cloud Deploy. Puoi anche configurare Skaffold in modo da eseguire il contenitore di verifica nello stesso cluster in cui è in esecuzione la tua applicazione. Quando configuri la verifica all'interno del cluster in skaffold.yaml
e attivi la verifica su un target, la verifica viene eseguita automaticamente nel cluster del target.
Questa funzionalità è disponibile solo per i deployment in 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.
La verifica all'interno del cluster richiede Skaffold 2.3 o versioni successive.
Per eseguire il container di verifica sul cluster, includi una stanza executionMode.kubernetesCluster
nel file di configurazione skaffold.yaml
, all'interno della stanza verify
per il container di verifica specifico:
verify:
- name:
container:
name:
image:
command:
args:
executionMode:
kubernetesCluster:
Di seguito è riportato un esempio di stanza di verifica che include executionMode
per invocare il contenitore di verifica nel cluster di applicazioni:
verify:
- name: integration-test-container
container:
name: integration-test-container
image: integration-test-container
executionMode:
kubernetesCluster: {}
La stanza executionMode
è facoltativa e, se la ometti, Skaffold esegue il
container di verifica nell'ambiente di esecuzione di Cloud Deploy.
Riprova a effettuare la verifica
Quando un job di verifica non va a buon fine, puoi riprovare a eseguire 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 passa da FAILED
a
IN_PROGRESS
.
Puoi riprovare a eseguire 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'VERIFY
ambiente di esecuzione, che puoi utilizzare per i test:
ANTHOS_MEMBERSHIP
Per i target di tipo
ANTHOS
, il nome della risorsa completamente specificato dell'appartenenza ad Anthos.CLOUD_RUN_LOCATION
Per i target di tipo
RUN
, la regione in cui è stato eseguito il deployment del servizio Cloud Run.CLOUD_RUN_PROJECT
Per i target di tipo
RUN
, il progetto in cui è stato creato il servizio Cloud Run.CLOUD_RUN_SERVICE
Per i target di tipo
RUN
, il nome della risorsa specificato per intero del servizio Cloud Run di cui è stato eseguito il deployment, ad esempioprojects/p/locations/us-central1/services/dev
.CLOUD_RUN_SERVICE_URLS
Per i target di tipo
RUN
, l'URL o gli URL (elencati separati 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 console Google Cloud.CLOUD_RUN_REVISION
Per i target di tipo
RUN
, la revisione specifica del servizio Cloud Run.GKE_CLUSTER
Per i target di tipo
GKE
, il nome della risorsa completamente specificato del cluster Google Kubernetes Engine, ad esempioprojects/p/locations/us-central1/clusters/dev
.TARGET_TYPE
Il tipo di runtime specifico della destinazione.
GKE
,ANTHOS
oRUN
.CLOUD_DEPLOY_LOCATION
La regione in cui è in esecuzione l'ambiente di esecuzione.
CLOUD_DEPLOY_DELIVERY_PIPELINE
La pipeline di importazione dell'ID in cui è in esecuzione l'ambiente di esecuzione.
CLOUD_DEPLOY_TARGET
L'ID della destinazione in cui è in esecuzione l'ambiente di esecuzione.
CLOUD_DEPLOY_PROJECT
Il numero del progetto Google Cloud in cui è in esecuzione l'ambiente di esecuzione.
CLOUD_DEPLOY_RELEASE
L'ID della release in cui verrà eseguita la verifica.
CLOUD_DEPLOY_ROLLOUT
L'ID dell'implementazione che contiene i job da verificare.
CLOUD_DEPLOY_JOB_RUN
L'ID dell'esecuzione del job che rappresenta l'esecuzione corrente del job.
CLOUD_DEPLOY_PHASE
La fase nell'implementazione che contiene il job da verificare.
Esegui il deployment dei parametri come variabili di ambiente
Oltre alle variabili di ambiente elencate in questa sezione, Cloud Deploy può passare ai container personalizzati tutti i parametri di deployment che hai impostato.