Verifica il deployment

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 destinazione 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 sullo stesso cluster in cui è in esecuzione l'applicazione.

Come funziona la verifica del deployment?

  1. configure 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 dall'immagine container.

  2. configure una o più destinazioni nella pipeline di distribuzione per la verifica del deployment.

    Questa configurazione abilita la verifica per i carichi di lavoro di cui è stato eseguito il deployment nel target in questione.

  3. Dopo il deployment di un'implementazione (skaffold apply), Cloud Deploy esegue il comando skaffold verify nell'ambiente di esecuzione di Cloud Deploy.

    Per i deployment in Google Kubernetes Engine e GKE Enterprise, se vuoi, puoi eseguire il container di verifica nello stesso cluster in cui è in esecuzione il container dell'applicazione.

  4. Skaffold richiama il test o i test specificati nella stanza verify del tuo skaffold.yaml per l'esecuzione sull'applicazione di cui è stato eseguito il deployment.

  5. 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.

      0 indica un esito positivo. Un codice di uscita diverso da zero indica un errore. Per generare il risultato della verifica desiderato, assicurati che il container esce con il codice di uscita appropriato. Se nell'ambito della verifica viene eseguito più di un container, tutti dovranno avere esito positivo affinché la verifica abbia esito positivo.

    • Se la verifica ha esito negativo, anche l'implementazione non va a buon fine.

    • Se un deployment non va a buon fine durante la verifica, puoi controllare l'implementazione:

      Dettagli nella console Google Cloud per l'implementazione, incluso lo stato della verifica

  6. Puoi ignore o riprovare una verifica non riuscita.

    Puoi anche terminare un job di verifica in corso.

Componenti utilizzati per la verifica

La risorsa implementazione include i seguenti oggetti, che supportano la verifica del deployment:

  • Fase

    La raccolta di operazioni (job) in un'implementazione che sono raggruppate logicamente insieme, 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

    L'esecuzione del job, figlio della risorsa di implementazione, è un'istanza di un job, ad esempio un tentativo di deployment.

Per ulteriori informazioni sulle risorse di Cloud Deploy, consulta Architettura dei servizi di 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 dei job

    Queste notifiche sono pubblicate nell'argomento clouddeploy-resources e contengono i seguenti attributi:

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

Di seguito è riportato un messaggio Pub/Sub di esempio 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 e negativo dell'esecuzione del job

    Queste notifiche sono pubblicate nell'argomento clouddeploy-operations e contengono i seguenti attributi:

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

Di seguito è riportato un messaggio Pub/Sub di esempio relativo a un'esecuzione di 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'abilitazione della verifica del deployment per una destinazione Cloud Deploy consiste nell'aggiunta di una proprietà verify: true a una o più destinazioni specifiche in un avanzamento 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 nella destinazione dev, ma non nella destinazione prod. verify: false equivale a omettere la proprietà verify o l'intera stanza strategy.

L'operazione di verifica viene eseguita all'interno del proprio ambiente di esecuzione. Questo ambiente di esecuzione può essere configurato per VERIFY come può essere per RENDER e DEPLOY.

Configurare Skaffold per la verifica del deployment

L'abilitazione della verifica del deployment per una destinazione richiede una stanza verify nel file di configurazione skaffold.yaml per il deployment. Questa configurazione può riguardare un profilo Skaffold specifico, se utilizzi profili separati per target.

Questa stanza verify identifica un container da eseguire per eseguire la verifica, ad esempio un test di integrazione.

Di seguito è riportato un skaffold.yaml di esempio che include una stanza verify:

apiVersion: skaffold/v3alpha1
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 container da utilizzare e uno script di test da eseguire in quel container. #ENDPOINT_URL in questo esempio è solo un segnaposto per l'URL della tua applicazione e non è una variabile di ambiente Cloud Deploy.

Esegui il container di verifica nel cluster dell'applicazione

Per impostazione predefinita, la verifica del deployment viene eseguita nell'ambiente di esecuzione di Cloud Deploy. Puoi anche configurare Skaffold in modo che esegua il container di verifica nello stesso cluster in cui è in esecuzione l'applicazione. Quando configuri la verifica nel cluster in skaffold.yaml e abiliti la verifica su una destinazione, la verifica viene eseguita automaticamente nel cluster di quella destinazione.

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 nel cluster richiede Skaffold 2.3 o versioni successive.

Per eseguire il container di verifica nel 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 richiamare il container 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 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

Un nuovo tentativo di verifica modifica lo stato dell'implementazione da FAILED a IN_PROGRESS.

Puoi riprovare a eseguire la 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 VERIFY, che puoi utilizzare per i tuoi test:

  • ANTHOS_MEMBERSHIP

    Per i target di tipo ANTHOS, il nome completo della risorsa dell'appartenenza Anthos.

  • CLOUD_RUN_LOCATION

    Per le destinazioni di tipo RUN, la regione in cui è eseguito il deployment del servizio Cloud Run.

  • CLOUD_RUN_PROJECT

    Per le destinazioni di tipo RUN, il progetto in cui è stato creato il servizio Cloud Run.

  • CLOUD_RUN_SERVICE

    Per le destinazioni di tipo RUN, il nome del servizio Cloud Run di cui è stato eseguito il deployment.

  • CLOUD_RUN_SERVICE_URLS

    Per i target di tipo RUN, l'URL o gli URL (elenco separato da virgole) che gli utenti finali utilizzeranno per accedere al servizio. Puoi trovarli nei dettagli del servizio Cloud Run per il tuo servizio, nella console Google Cloud.

  • CLOUD_RUN_REVISION

    Per le destinazioni di tipo RUN, la revisione specifica del servizio Cloud Run.

  • GKE_CLUSTER

    Per i target di tipo GKE, il nome completo della risorsa del cluster Google Kubernetes Engine, ad esempio projects/p/locations/us-central1/clusters/dev.

  • TARGET_TYPE

    Il tipo di runtime specifico della destinazione. GKE, ANTHOS o RUN.

  • CLOUD_DEPLOY_LOCATION

    La regione in cui è in esecuzione l'ambiente di esecuzione.

  • CLOUD_DEPLOY_DELIVERY_PIPELINE

    La pipeline di distribuzione degli ID in esecuzione dall'ambiente di esecuzione.

  • CLOUD_DEPLOY_TARGET

    L'ID della destinazione in esecuzione nell'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 per la verifica.

  • CLOUD_DEPLOY_JOB_RUN

    L'ID dell'esecuzione del job che rappresenta l'esecuzione corrente del job.

  • CLOUD_DEPLOY_PHASE

    La fase dell'implementazione che contiene il job di verifica.