Verifica il deployment

Questo documento descrive come verificare un deployment Cloud Deploy.

Puoi configurare Cloud Deploy e Skaffold per verificare che un dell'applicazione di cui hai eseguito il deployment in una qualsiasi destinazione funziona correttamente. La verifica viene eseguita utilizzando la tua immagine di test e tu configuri Cloud Deploy e Skaffold per eseguire questi test dopo il deployment finiture in cui sono finite.

Per impostazione predefinita, la verifica del deployment viene eseguita in Cloud Deploy ambiente di esecuzione, ma puoi anche configurarla per l'esecuzione sullo stesso cluster in cui è in esecuzione l'applicazione.

Come funziona la verifica del deployment?

  1. Devi configurare Skaffold per la verifica.

    Questa configurazione identifica l'immagine container o le immagini da utilizzare per l'esecuzione test e i comandi specifici (ad esempio lo script) da eseguire nell'immagine container.

  2. Configura uno o più target nella pubblicazione. per la verifica del deployment.

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

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

    Per i deployment in Google Kubernetes Engine e GKE Enterprise, puoi facoltativamente di eseguire il container di verifica sullo stesso cluster in cui il container è in esecuzione.

  4. Skaffold richiama il test o i test specificati nella stanza verify del tuo skaffold.yaml da eseguire 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.

    • Il successo della verifica è determinato dal codice di uscita del container eseguito.

      0 indica che l'operazione è riuscita. Un codice di uscita diverso da zero indica un errore. Per generare il risultato della verifica desiderato, assicurati che il container esca con il codice di uscita appropriato. Se nell'ambito della verifica vengono eseguiti più container, tutti devono andare a buon fine affinché la verifica abbia esito positivo.

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

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

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

  6. Puoi ignorare oppure prova di nuovo a una verifica con esito negativo.

    Puoi anche termina di un job di verifica in corso.

Componenti utilizzati per la verifica

La risorsa rollout include che supportano la verifica del deployment:

  • Fase

    La raccolta di operazioni (job) in un'implementazione raggruppate logicamente ad esempio un deployment o un deployment e una verifica.

  • Job

    L'operazione specifica da eseguire su un'implementazione, ad esempio deployment o verifica.

  • Esecuzione job

    Un elemento figlio della risorsa rollout, l'esecuzione del job è un'istanza di un job, un tentativo di deployment.

Per ulteriori informazioni sulle risorse di Cloud Deploy, consulta Cloud Deploy del servizio

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 del 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 l'esecuzione di un job crea, 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-operations e contengono i seguenti attributi:

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

Di seguito è riportato un esempio di messaggio Pub/Sub per un job non riuscito esecuzione, pubblicata 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 di aggiungere una proprietà verify: true a uno o più target specifici 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 nel target dev, ma non nel target di prod. verify: false equivale a omettere il carattere 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 nello stesso modo in cui può essere configurato per RENDER e DEPLOY.

Configura Skaffold per la verifica del deployment

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

La stanza verify identifica un container 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 identificando un container da utilizzare e uno script di test da eseguire in quel container. #ENDPOINT_URL in questo esempio è solo un segnaposto per le tue applicazioni URL 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 in Cloud Deploy ambiente di esecuzione. Puoi anche configurare Skaffold per l'esecuzione del container di verifica sullo stesso cluster in cui è in esecuzione l'applicazione. Quando configuri la verifica nel cluster skaffold.yaml e abilita la verifica su una destinazione, la verifica viene eseguita automaticamente nel cluster di quel target.

Questa funzionalità è disponibile per i deployment in GKE Solo GKE Enterprise, non per Cloud Run. Deployment in Cloud Run può eseguire la verifica solo nell'ambiente di esecuzione di Cloud Deploy.

La verifica nel cluster richiede Skaffold versione 2.3 o successive.

Per eseguire il container di verifica sul cluster, includi una executionMode.kubernetesCluster stanza nella tua 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 richiama 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 stanza executionMode è facoltativa e, se la ometti, Skaffold esegue la 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 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 il seguente ambiente variabili nell'ambiente di esecuzione VERIFY, che puoi utilizzare per i tuoi test:

  • ANTHOS_MEMBERSHIP

    Per le destinazioni di tipo ANTHOS, il nome risorsa completamente specificato di Anthos .

  • CLOUD_RUN_LOCATION

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

  • CLOUD_RUN_PROJECT

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

  • CLOUD_RUN_SERVICE

    Per le destinazioni di tipo RUN, il nome completo della risorsa dell'oggetto Servizio Cloud Run, ad esempio projects/p/locations/us-central1/services/dev.

  • CLOUD_RUN_SERVICE_URLS

    Per i target di tipo RUN, l'URL o gli URL (elenco separato da virgole) che terminano che gli utenti utilizzeranno per accedere al tuo servizio. Puoi trovare queste informazioni Dettagli per il tuo servizio Cloud Run, nella sezione nella console Google Cloud.

  • CLOUD_RUN_REVISION

    Per le destinazioni di tipo RUN, la revisione specifica di Cloud Run completamente gestito di Google Cloud.

  • GKE_CLUSTER

    Per le destinazioni di tipo GKE, il nome risorsa completamente specificato Cluster Google Kubernetes Engine, ad esempio projects/p/locations/us-central1/clusters/dev.

  • TARGET_TYPE

    Il tipo di runtime specifico del target. 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 nell'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 attuale del un lavoro.

  • CLOUD_DEPLOY_PHASE

    La fase dell'implementazione che contiene il job da verificare.