Este documento descreve como verificar uma implantação do Cloud Deploy.
É possível configurar o 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 Cloud Deploy e o Skaffold para executar esses testes após a conclusão da implantação.
Por padrão, a verificação de implantação é executada no ambiente de execução do Cloud Deploy, mas também é possível configurá-la para execução no mesmo cluster em que o aplicativo está sendo executado.
Como funciona a verificação de implantação?
Você configura o Skaffold para verificação.
Essa configuração identifica a imagem ou as imagens do contêiner a serem usadas para executar testes e os comandos específicos (script, por exemplo) a serem executados nessa imagem.
Você configura um ou mais destinos no pipeline de entrega para a verificação de implantação.
Essa configuração ativa a verificação para cargas de trabalho implantadas nesse destino.
Depois que um lançamento é implantado (
skaffold apply
), o Cloud Deploy executa o comandoskaffold verify
no ambiente de execução do Cloud Deploy.Para implantações no Google Kubernetes Engine e no GKE Enterprise, é possível executar o contêiner de verificação no mesmo cluster em que o contêiner do aplicativo está sendo executado.
O Skaffold invoca o teste ou os testes especificados na estrofe
verify
doskaffold.yaml
para serem executados no aplicativo implantado.O sucesso ou a falha dos testes executados indica o sucesso ou a 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 sai com o código de saída apropriado. Se mais de um contêiner for executado como parte da verificação, todos eles precisam ter sucesso para que a verificação seja bem-sucedida.Se a verificação falhar, o lançamento também falhará.
Se uma implantação falhar durante a verificação, você poderá conferir isso inspecionando o lançamento:
Você pode ignorar ou tentar novamente 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 oferecem suporte à verificação de implantação:
Fase
A coleção de operações (jobs) em um lançamento que são agrupadas logicamente, por exemplo, uma implantação ou uma implantação e verificação.
Job
A operação específica a ser realizada em um lançamento, como implantação ou verificação.
Execução do job
Uma instância do recurso de lançamento, a execução de job é uma instância de um job, por exemplo, uma tentativa de implantação.
Para saber mais sobre os recursos do Cloud Deploy, consulte Arquitetura de serviço do Cloud Deploy.
Notificações geradas pela verificação de implantação
O Cloud Deploy gera e publica mensagens do Pub/Sub para os seguintes eventos:
Criação, atualização e exclusão de execuçã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
Confira a seguir um exemplo de mensagem do Pub/Sub para a criação de uma execução de 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, sucesso 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
ouVerify
)
Confira a seguir um exemplo de mensagem 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 Cloud Deploy para a verificação de implantação
Ativar a verificação de implantação para um destino do Cloud Deploy consiste
em adicionar uma propriedade verify: true
a um ou mais destinos em uma progressão do pipeline de entrega, 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 verificação de implantação é 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 a verificação de implantação
Ativar a verificação de implantação para um destino requer uma estrofe verify
no
arquivo de configuração skaffold.yaml
da implantação. Essa configuração
pode ser para um perfil específico do Skaffold, se você estiver usando perfis separados por
destino.
Esta estrofe verify
identifica um contêiner para executar a verificação,
por exemplo, um teste de integração.
Confira abaixo um exemplo de skaffold.yaml
que inclui uma estrofe 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 sala verify
identificando um contêiner para usar e um script de teste para executar nesse contêiner.
O #ENDPOINT_URL
neste exemplo é apenas um marcador de posição para o URL dos seus aplicativos e não é uma variável de ambiente disponível do Cloud Deploy.
Executar o contêiner de verificação no cluster de aplicativos
Por padrão, a verificação de implantação é executada no ambiente de execução do 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.
Essa capacidade está disponível apenas para implantações no GKE e no GKE Enterprise, não no Cloud Run. As implantações no Cloud Run só podem executar a verificação no ambiente de execução do Cloud Deploy.
A verificação no cluster requer a versão 2.3 ou mais recente do Skaffold.
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
para o contêiner de verificação específico:
verify:
- name:
container:
name:
image:
command:
args:
executionMode:
kubernetesCluster:
Confira a seguir um exemplo de estrofe de verificação que inclui executionMode
para
invocar o contêiner de verificação no cluster de aplicativos:
verify:
- name: integration-test-container
container:
name: integration-test-container
image: integration-test-container
executionMode:
kubernetesCluster: {}
A estrofe executionMode
é opcional. Se você a omitir, o Skaffold vai executar o contêiner de verificação no ambiente de execução do Cloud Deploy.
Tentar novamente a verificação
Quando um job de verificação falha, você pode tentar 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
A nova tentativa de verificação muda o estado do lançamento de FAILED
para
IN_PROGRESS
.
Só é possível repetir a verificação de um lançamento que falhou.
Variáveis de ambiente disponíveis
O Cloud Deploy fornece e preenche as seguintes variáveis de ambiente no ambiente de execução VERIFY
, que podem ser usadas nos testes:
ANTHOS_MEMBERSHIP
Para destinos do tipo
ANTHOS
, o nome do recurso totalmente especificado da associação do Anthos.CLOUD_RUN_LOCATION
Para destinos do tipo
RUN
, a região em que o serviço do Cloud Run é 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 recurso totalmente especificado do serviço do Cloud Run implantado, por exemplo,projects/p/locations/us-central1/services/dev
.CLOUD_RUN_SERVICE_URLS
Para destinos do tipo
RUN
, os URLs (lista separada por vírgulas) que os usuários finais vão usar para acessar seu serviço. Eles estão disponíveis nos detalhes do serviço do Cloud Run no console do Google Cloud.CLOUD_RUN_REVISION
Para metas do tipo
RUN
, a revisão específica do serviço do Cloud Run.GKE_CLUSTER
Para destinos do tipo
GKE
, o nome de recurso totalmente especificado do cluster do Google Kubernetes Engine, por exemplo,projects/p/locations/us-central1/clusters/dev
.TARGET_TYPE
O tipo de execução específico do destino.
GKE
,ANTHOS
ouRUN
.CLOUD_DEPLOY_LOCATION
A região em que o ambiente de execução está em execução.
CLOUD_DEPLOY_DELIVERY_PIPELINE
O pipeline de entrega de ID em execução no ambiente de execução.
CLOUD_DEPLOY_TARGET
O ID do destino em que o ambiente de execução está sendo executado.
CLOUD_DEPLOY_PROJECT
O número do projeto do Google Cloud em que o ambiente de execução está sendo executado.
CLOUD_DEPLOY_RELEASE
O ID da versão em que a verificação será executada.
CLOUD_DEPLOY_ROLLOUT
O ID do lançamento que contém os jobs para verificação.
CLOUD_DEPLOY_JOB_RUN
O ID da execução do job que representa a execução atual do job.
CLOUD_DEPLOY_PHASE
A fase no lançamento que contém o job a ser verificado.
Implantar parâmetros como variáveis de ambiente
Além das variáveis de ambiente listadas nesta seção, o Cloud Deploy pode transmitir aos contêineres personalizados todos os parâmetros de implantação definidos.