verifique sua implantação

Neste documento, descrevemos como verificar uma implantação do Google Cloud Deploy.

Configure o Google Cloud Deploy e o Skaffold para verificar se um aplicativo implantado em qualquer destino está funcionando corretamente. A verificação é feita usando sua própria imagem de teste, e você configura o Google Cloud Deploy e o Skaffold para executar esses testes após a conclusão da implantação.

Por padrão, a verificação é implantada no ambiente de execução do Google Cloud Deploy, mas também é possível configurá-la para ser executada no mesmo cluster em que o aplicativo está sendo executado.

Como funciona a verificação de implantação?

  1. Você configura o Skaffold para verificação.

    Essa configuração identifica a imagem ou as imagens de contêiner a serem usadas para executar testes, e os comandos específicos (script, por exemplo) para serem executados a partir dessa imagem.

  2. Você configura um ou mais destinos no pipeline de entrega para a verificação da implantação.

    Essa configuração ativa a verificação de cargas de trabalho implantadas nesse destino.

  3. Depois que um lançamento é implantado (skaffold apply), o Google Cloud Deploy executa o comando skaffold verify no ambiente de execução do Google Cloud Deploy.

    Para implantações no Google Kubernetes Engine e no Anthos, é possível, opcionalmente, executar o contêiner de verificação no mesmo cluster em que o contêiner de aplicativo está em execução.

  4. O Skaffold invoca os testes especificados na estrofe verify de seu skaffold.yaml para serem executados no aplicativo implantado.

  5. Sucesso ou falha dos testes executados indica sucesso ou falha da verificação.

    • O sucesso da verificação é determinado pelo código de saída do contêiner executado.

      0 indica sucesso. Um código de saída diferente de zero indica falha. Para gerar o resultado de verificação desejado, verifique se o contêiner é encerrado com o código de saída apropriado. Se mais de um contêiner for executado como parte da verificação, todos eles precisarão ser concluídos.

    • Se a verificação falhar, o lançamento também falhará.

    • Se uma implantação falhar durante a verificação, veja isso inspecionando o lançamento:

      Detalhes no Console do Google Cloud para o lançamento, incluindo o status da verificação

  6. É possível ignorar ou repetir uma verificação com falha.

    Também é possível encerrar um job de verificação em andamento.

Componentes usados para verificação

O recurso rollout inclui os seguintes objetos, que são compatíveis com a verificação da implantação:

  • Fase

    A coleção de operações (jobs) em uma implantação agrupada de maneira lógica, como uma implantação ou uma verificação.

  • Job

    A operação específica a ser executada em um lançamento, como implantação ou verificação.

  • Execução do job

    Filho do recurso de lançamento, a execução do job é uma instância de um job, por exemplo, uma tentativa de implantação.

Para mais informações sobre os recursos do Google Cloud Deploy, consulte Arquitetura de serviço do Google Cloud Deploy.

Notificações geradas pela verificação de implantação

O Google Cloud Deploy gera mensagens do Pub/Sub e as publica para os seguintes eventos:

  • Execução, criação, atualização e exclusão de jobs

    Essas notificações são publicadas no tópico clouddeploy-resources e contêm os seguintes atributos:

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

Veja a seguir um exemplo de mensagem do Pub/Sub para a criação de um job, publicada no tópico 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"
    }
  },
  • Início, execução e falha na execução do job

    Essas notificações são publicadas no tópico clouddeploy-operations e contêm os seguintes atributos:

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

Veja a seguir uma mensagem de exemplo do Pub/Sub para uma execução de job com falha, publicada no tópico 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"
    }
  },

Configurar o Google Cloud Deploy para verificação de implantação

Ativar a verificação de implantação para um destino do Google Cloud Deploy consiste em adicionar uma propriedade verify: true a um determinado destino (ou destinos) em uma progressão de pipeline de entrega, como mostrado neste exemplo:

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

Nesta configuração, a verificação de implantação está ativada no destino dev, mas não no destino prod. verify: false é equivalente a omitir a propriedade verify ou toda a estrofe strategy.

A operação de verificação é executada no próprio ambiente de execução. Esse ambiente de execução pode ser configurado para VERIFY da mesma forma que para RENDER e DEPLOY.

Configurar o Skaffold para verificação de implantação

A ativação da verificação de implantação para um destino requer uma estrofe de verify no arquivo de configuração skaffold.yaml da sua implantação. Essa configuração pode ser para um perfil específico do Skaffold, se você estiver usando perfis separados por destino.

Essa estrofe de verify identifica um contêiner a ser executado para a verificação, por exemplo, um teste de integração.

Veja a seguir um exemplo de skaffold.yaml que inclui uma estrofe de 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"]

Este exemplo simples mostra uma estrofe verify que identifica um contêiner a ser usado e um script de teste a ser executado nesse contêiner. $ENDPOINT_URL neste exemplo é apenas um marcador para o URL do aplicativo e não é uma variável de ambiente do Google Cloud Deploy disponível.

Executar o contêiner de verificação no cluster do aplicativo

Por padrão, a verificação da implantação é executada no ambiente de execução do Google Cloud Deploy. Também é possível configurar o Skaffold para executar o contêiner de verificação no mesmo cluster em que o aplicativo está sendo executado. Quando você configura a verificação no cluster em skaffold.yaml e ativa a verificação em um destino, a verificação é executada automaticamente no cluster desse destino.

Esse recurso está disponível apenas para implantações no GKE e no Anthos, não no Cloud Run. As implantações no Cloud Run só podem executar a verificação no ambiente de execução do Google Cloud Deploy.

A verificação no cluster requer o Skaffold versão 2.3 ou posterior.

Para executar o contêiner de verificação no cluster, inclua uma estrofe executionMode.kubernetesCluster no arquivo de configuração skaffold.yaml, dentro da estrofe verify do contêiner de verificação específico:

verify:
- name:
  container:
    name:
    image:
    command:
    args:
  executionMode:
    kubernetesCluster:

Veja a seguir um exemplo de estrofe de verificação que inclui executionMode para invocar o contêiner de verificação no cluster do aplicativo:

verify:
- name: integration-test-container
  container:
    name: integration-test-container
    image: integration-test-container
  executionMode:
    kubernetesCluster: {}

A estrofe executionMode é opcional e, se você omiti-la, o Skaffold executará o contêiner de verificação no ambiente de execução do Google Cloud Deploy.

Tentar verificar novamente

Quando um job de verificação falha, você pode tentar a verificação novamente, criando uma nova execução 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

Tentar novamente a verificação muda o estado do lançamento de FAILED para IN_PROGRESS.

Só é possível repetir uma verificação para um lançamento cujo job de verificação falhou.

Variáveis de ambiente disponíveis

O Google Cloud Deploy fornece e preenche as seguintes variáveis de ambiente no ambiente de execução VERIFY, que você pode usar para seus testes:

  • ANTHOS_MEMBERSHIP

    Para destinos do tipo ANTHOS, o nome do recurso totalmente especificado da assinatura do Anthos.

  • CLOUD_RUN_LOCATION

    Para destinos do tipo RUN, a região em que o serviço do Cloud Run está implantado.

  • CLOUD_RUN_PROJECT

    Para destinos do tipo RUN, o projeto em que o serviço do Cloud Run foi criado.

  • CLOUD_RUN_SERVICE

    Para destinos do tipo RUN, o nome do serviço do Cloud Run implantado.

  • CLOUD_RUN_SERVICE_URLS

    Para destinos do tipo RUN, o URL ou URLs (lista separada por vírgulas) que os usuários finais usarão para acessar seu serviço. Você pode encontrá-los nos detalhes do serviço do Cloud Run para o serviço no console do Google Cloud.

  • CLOUD_RUN_REVISION

    Para destinos do tipo RUN, a revisão específica do serviço do Cloud Run.

  • GKE_CLUSTER

    Para destinos do tipo GKE, o nome do recurso totalmente especificado do cluster do Google Kubernetes Engine, por exemplo, projects/p/locations/us-central1/clusters/dev.

  • TARGET_TYPE

    O tipo de ambiente de execução específico do destino. GKE, ANTHOS ou RUN.