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?
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.
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.
Após a implementação de uma implementação (
skaffold apply
), o Cloud Deploy executa o comandoskaffold 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.
O Skaffold invoca o teste ou os testes especificados na secção
verify
do seuskaffold.yaml
para execução na aplicação implementada.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:
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
ouVerify
)
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
ouRUN
.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.