Valide a implementação

Este documento descreve como validar uma implementação do Cloud Deploy.

Pode configurar o Cloud Deploy e o Skaffold para verificar se uma aplicação que implementou em qualquer destino está a funcionar corretamente. A validação é feita através da sua própria imagem de teste e configura o Cloud Deploy e o Skaffold para executar esses testes após a conclusão da implementação.

Por predefinição, a validação da implementação é executada no ambiente de execução do Cloud Deploy, mas também pode configurá-la para ser executada no mesmo cluster onde a aplicação está a ser executada.

Como funciona a validação da implementação?

  1. Configura o Skaffold para validação.

    Esta configuração identifica a imagem ou as imagens do contentor a usar para executar testes e os comandos específicos (por exemplo, um script) a executar a partir dessa imagem do contentor.

  2. Configura um ou mais alvos no pipeline de entrega para validação da implementação.

    Esta configuração ativa a validação para cargas de trabalho implementadas nesse destino.

  3. Após a implementação de uma implementação (skaffold apply), o Cloud Deploy executa o comando skaffold verify no ambiente de execução do Cloud Deploy.

    Para implementações no Google Kubernetes Engine e no GKE Enterprise, pode, opcionalmente, executar o contentor de validação no mesmo cluster onde o contentor da aplicação está a ser executado.

  4. O Skaffold invoca o teste ou os testes especificados na secção verify do seu skaffold.yaml para execução na aplicação implementada.

  5. O êxito ou a falha dos testes executados indica o êxito ou a falha da validação.

    • O êxito da validação é determinado pelo código de saída do contentor executado.

      0 indica sucesso. Um código de saída diferente de zero indica uma falha. Para gerar o resultado de validação pretendido, certifique-se de que o contentor termina com o código de saída adequado. Se mais do que um contentor for executado como parte da validação, todos têm de ser bem-sucedidos para que a validação seja bem-sucedida.

    • Se a validação falhar, a implementação também falha.

    • Se uma implementação falhar durante a validação, pode ver isso inspecionando a implementação:

      Detalhes na consola Google Cloud para a implementação, incluindo o estado da validação

  6. Pode ignorar ou tentar novamente uma validação falhada.

    Também pode terminar uma tarefa de validação em curso.

Componentes usados para a validação

O recurso rollout inclui os seguintes objetos, que suportam a validação da implementação:

  • Fase

    A coleção de operações (tarefas) numa implementação que estão logicamente agrupadas, por exemplo, uma implementação ou uma implementação e validação.

  • Emprego

    A operação específica a ser realizada numa implementação, como implementar ou validar.

  • Execução de tarefa

    Um elemento secundário do recurso de implementação, a execução da tarefa é uma instância de uma tarefa, por exemplo, uma tentativa de implementação.

Para saber mais sobre os recursos do Cloud Deploy, consulte o artigo Arquitetura do serviço Cloud Deploy

Notificações geradas pela validação da implementação

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

  • Criação, atualização e eliminação de execuções de tarefas

    Estas 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

Segue-se um exemplo de uma mensagem Pub/Sub para uma execução de tarefa de criação, 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, êxito e falha da execução da tarefa

    Estas 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)

Segue-se um exemplo de uma mensagem Pub/Sub para uma execução de tarefa 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"
    }
  },

Configure o Cloud Deploy para a validação da implementação

A ativação da validação da implementação para um destino do Cloud Deploy consiste em adicionar uma propriedade verify: true a um determinado destino (ou destinos) numa progressão do pipeline de fornecimento, conforme 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 validação da implementação está ativada no destino dev, mas não no destino prod. verify: false é equivalente a omitir a propriedade verify ou a secção strategy completa.

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

Configure o Skaffold para a validação da implementação

A ativação da validação da implementação para um alvo requer uma secção verify no ficheiro de configuração skaffold.yaml da sua implementação. Esta configuração pode ser para um perfil específico do Skaffold, se estiver a usar perfis separados por destino.

Esta secção verify identifica um contentor a executar para fazer a validação, por exemplo, um teste de integração.

Segue-se um exemplo de um skaffold.yaml que inclui uma secção 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"]

Este exemplo simples mostra uma verify secção que identifica um contentor a usar e um script de teste a executar nesse contentor. #ENDPOINT_URL neste exemplo é apenas um marcador de posição para o URL das suas aplicações e não é uma variável de ambiente do Cloud Deploy disponível.

Execute o contentor de validação no cluster da aplicação

Por predefinição, a validação da implementação é executada no ambiente de execução do Cloud Deploy. Também pode configurar o Skaffold para executar o contentor de validação no mesmo cluster onde a sua aplicação está a ser executada. Quando configura a validação no cluster no skaffold.yaml e ativa a validação num destino, a validação é executada automaticamente no cluster desse destino.

Esta capacidade está disponível apenas para implementações no GKE e no GKE Enterprise, e não para o Cloud Run. As implementações no Cloud Run só podem executar a validação no ambiente de execução do Cloud Deploy.

A validação no cluster requer a versão 2.3 ou superior do Skaffold.

Para executar o contentor de validação no cluster, inclua uma secção executionMode.kubernetesCluster no ficheiro de configuração skaffold.yaml, dentro da secção verify para o contentor de validação específico:

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

Segue-se um exemplo de uma cláusula verify que inclui executionMode para invocar o contentor de validação no cluster da aplicação:

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

A secção executionMode é opcional e, se a omitir, o Skaffold executa o contentor de validação no ambiente de execução do Cloud Deploy.

Repita a validação

Quando uma tarefa de validação falha, pode tentar novamente a validação, criando uma nova execução da tarefa:

gcloud deploy rollouts retry-job ROLLOUT_NAME \
             --job-id=JOB_ID \
             --phase-id=PHASE_ID \
             --delivery-pipeline=PIPELINE_NAME \
             --release=RELEASE_NAME \
             --region=REGION

A repetição da validação altera o estado da implementação de FAILED para IN_PROGRESS.

Só pode tentar novamente uma validação para uma implementação cuja tarefa de validação tenha falhado.

Variáveis de ambiente disponíveis

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

  • ANTHOS_MEMBERSHIP

    Para alvos do tipo ANTHOS, o nome do recurso totalmente especificado da associação do Anthos.

  • CLOUD_RUN_LOCATION

    Para alvos do tipo RUN, a região na qual o serviço do Cloud Run está implementado.

  • CLOUD_RUN_PROJECT

    Para alvos do tipo RUN, o projeto no qual o serviço do Cloud Run foi criado.

  • CLOUD_RUN_SERVICE

    Para alvos do tipo RUN, o nome do recurso totalmente especificado do serviço do Cloud Run implementado, por exemplo, projects/p/locations/us-central1/services/dev.

  • CLOUD_RUN_SERVICE_URLS

    Para alvos do tipo RUN, o URL ou os URLs (lista separada por vírgulas) que os utilizadores finais vão usar para aceder ao seu serviço. Pode encontrá-los nos detalhes do serviço do Cloud Run para o seu serviço, naGoogle Cloud consola.

  • CLOUD_RUN_REVISION

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

  • GKE_CLUSTER

    Para alvos 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 tempo de execução específico do alvo. GKE, ANTHOS ou RUN.

  • CLOUD_DEPLOY_LOCATION

    A região na qual o ambiente de execução está a ser executado.

  • CLOUD_DEPLOY_DELIVERY_PIPELINE

    O pipeline de entrega de IDs no qual o ambiente de execução está a ser executado.

  • CLOUD_DEPLOY_TARGET

    O ID do destino no qual o ambiente de execução está a ser executado.

  • CLOUD_DEPLOY_PROJECT

    O número do projeto do Google Cloud projeto no qual o ambiente de execução está a ser executado.

  • CLOUD_DEPLOY_PROJECT_ID

    O Google Cloud ID do projeto que contém os recursos do Cloud Deploy.

  • CLOUD_DEPLOY_RELEASE

    O ID do lançamento no qual a verificação será executada.

  • CLOUD_DEPLOY_ROLLOUT

    O ID da implementação que contém as tarefas de validação.

  • CLOUD_DEPLOY_JOB_RUN

    O ID da execução do trabalho que representa a execução atual do trabalho.

  • CLOUD_DEPLOY_PHASE

    A fase na implementação que contém a tarefa de verificação.

Implemente parâmetros como variáveis de ambiente

Além das variáveis de ambiente indicadas nesta secção, o Cloud Deploy pode transmitir aos seus contentores personalizados quaisquer parâmetros de implementação que tenha definido.

Saiba mais.