Executar hooks antes e depois da implantação
Neste guia de início rápido, mostramos como executar um hook de implantação, um programa arbitrário para executar antes ou depois da implantação usando o Cloud Deploy.
Neste guia de início rápido, você fará o seguinte:
Crie um cluster do GKE ou um serviço do Cloud Run.
Também é possível usar clusters anexados do GKE para isso, mas este guia de início rápido usa apenas o GKE e o Cloud Run.
Defina o pipeline de entrega e o destino de implantação do Cloud Deploy.
A configuração do pipeline de entrega inclui as definições de hook de implantação, como
tasks.Esse pipeline inclui apenas um estágio e usa apenas uma meta.
Crie uma configuração do Skaffold e um manifesto do Kubernetes ou uma definição de serviço do Cloud Run.
No arquivo de configuração do Skaffold, você identifica os manifestos que quer implantar com o Cloud Deploy.
Crie uma versão, que é implantada automaticamente no destino.
Um dos hooks é executado antes da implantação do aplicativo, e o outro é executado depois.
Confira os resultados dos hooks pré e pós-implantação nos registros do Cloud Build usando a página Detalhes do lançamento do Cloud Deploy no console doGoogle Cloud .
Antes de começar
- Faça login na sua conta do Google Cloud . Se você começou a usar o Google Cloud, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Ative as APIs Cloud Deploy, Cloud Build, GKE, Cloud Run e Cloud Storage.
Funções necessárias para ativar APIs
Para ativar as APIs, é necessário ter o papel do IAM de administrador de uso do serviço (
roles/serviceusage.serviceUsageAdmin), que contém a permissãoserviceusage.services.enable. Saiba como conceder papéis. -
Instale a CLI do Google Cloud.
-
Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.
-
Para inicializar a gcloud CLI, execute o seguinte comando:
gcloud init -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Ative as APIs Cloud Deploy, Cloud Build, GKE, Cloud Run e Cloud Storage.
Funções necessárias para ativar APIs
Para ativar as APIs, é necessário ter o papel do IAM de administrador de uso do serviço (
roles/serviceusage.serviceUsageAdmin), que contém a permissãoserviceusage.services.enable. Saiba como conceder papéis. -
Instale a CLI do Google Cloud.
-
Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.
-
Para inicializar a gcloud CLI, execute o seguinte comando:
gcloud init - Verifique se a conta de serviço padrão do Compute Engine tem permissões suficientes.
A conta de serviço já pode ter as permissões necessárias. Essas etapas estão incluídas para projetos que desativam as concessões automáticas de papéis para contas de serviço padrão.
- Primeiro, adicione o papel
clouddeploy.jobRunner:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --role="roles/clouddeploy.jobRunner" - Adicione a função de desenvolvedor para seu ambiente de execução específico.
- Para o GKE:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --role="roles/container.developer" - Para o Cloud Run:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --role="roles/run.developer" -
Adicione o papel
iam.serviceAccountUser, que inclui a permissãoactAspara implantação no ambiente de execução:gcloud iam service-accounts add-iam-policy-binding $(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --role="roles/iam.serviceAccountUser" \ --project=PROJECT_ID
Se você já tiver a CLI instalada, verifique se está executando a versão mais recente:
gcloud components update
Criar o ambiente de execução
Se você estiver implantando no Cloud Run, pule este comando.
Para o GKE, crie um cluster: deploy-hooks-cluster, com
configurações padrão. O endpoint de API Kubernetes do cluster precisa ser acessível pela rede da Internet pública. Por padrão, os clusters do GKE podem ser acessados externamente.
gcloud container clusters create-auto deploy-hooks-cluster \
--project=PROJECT_ID \
--region=us-central1
Criar o pipeline e o destino de entrega
É possível definir o pipeline e o destino em um arquivo ou em arquivos separados. Neste guia de início rápido, você cria um único arquivo.
Abra uma janela do terminal.
Crie um novo diretório e navegue até ele.
GKE
mkdir deploy-hooks-gke-quickstart cd deploy-hooks-gke-quickstartCloud Run
mkdir deploy-hooks-run-quickstart cd deploy-hooks-run-quickstartCrie o pipeline de entrega e a definição de destino:
GKE
No diretório
deploy-hooks-gke-quickstart, crie um novo arquivo:clouddeploy.yaml, com o seguinte conteúdo:apiVersion: deploy.cloud.google.com/v1 kind: DeliveryPipeline metadata: name: deploy-hooks-demo-app-gke-1 description: main application pipeline serialPipeline: stages: - targetId: hooks-staging profiles: [] strategy: standard: predeploy: tasks: - type: container image: ubuntu command: ["/bin/sh"] args: ["-c", 'echo "this is a predeploy action"' ] postdeploy: tasks: - type: container image: ubuntu command: ["/bin/sh"] args: ["-c", 'echo "this is a postdeploy action"' ] --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: hooks-staging description: hooks staging cluster gke: cluster: projects/PROJECT_ID/locations/us-central1/clusters/deploy-hooks-clusterCloud Run
No diretório
deploy-hooks-run-quickstart, crie um novo arquivo:clouddeploy.yaml, com o seguinte conteúdo:apiVersion: deploy.cloud.google.com/v1 kind: DeliveryPipeline metadata: name: deploy-hooks-demo-app-run-1 description: main application pipeline serialPipeline: stages: - targetId: hooks-staging profiles: [] strategy: standard: predeploy: tasks: - type: container image: ubuntu command: ["/bin/sh"] args: ["-c", 'echo "this is a predeploy action"' ] postdeploy: tasks: - type: container image: ubuntu command: ["/bin/sh"] args: ["-c", 'echo "this is a postdeploy action"' ] --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: hooks-staging description: staging Run service run: location: projects/PROJECT_ID/locations/us-central1Registre o pipeline e os destinos com o serviço Cloud Deploy:
gcloud deploy apply --file=clouddeploy.yaml --region=us-central1 --project=PROJECT_ID
Agora você tem um pipeline de entrega com um destino pronto para implantar seu aplicativo e executar os jobs de pré-implantação e pós-implantação.
Confirme o pipeline e os destinos:
No console Google Cloud , navegue até a página Pipelines de entrega do Cloud Deploy para conferir a lista dos seus pipelines de entrega disponíveis.
Abrir a página "Pipelines de entrega"
O pipeline de entrega que você acabou de criar é mostrado, com um destino listado na coluna Destinos.

Criar o arquivo de configuração do Skaffold e o manifesto do aplicativo
O Cloud Deploy usa o Skaffold para identificar os manifestos usados para implantar o app de exemplo no seu destino.
Crie um arquivo chamado
skaffold.yamlcom o seguinte conteúdo:GKE
apiVersion: skaffold/v4beta7 kind: Config manifests: rawYaml: - k8s-pod.yaml deploy: kubectl: {}Cloud Run
apiVersion: skaffold/v4beta7 kind: Config manifests: rawYaml: - service.yaml deploy: cloudrun: {}Consulte a referência do
skaffold.yamlpara mais informações sobre esse arquivo de configuração.Crie a definição do aplicativo: uma definição de serviço para o Cloud Run ou um manifesto do Kubernetes para o GKE.
GKE
Crie um arquivo chamado
k8s-pod.yamlcom o seguinte conteúdo:apiVersion: v1 kind: Pod metadata: name: my-hooks-pod spec: containers: - name: nginx image: my-app-imageEsse arquivo é um manifesto básico do Kubernetes, que é aplicado ao cluster para implantar o aplicativo. A imagem do contêiner a ser implantada é definida aqui como um marcador de posição,
my-app-image, que é substituído pela imagem específica quando você cria o lançamento.Cloud Run
Crie um arquivo chamado
service.yamlcom o seguinte conteúdo:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: my-hooks-run-service spec: template: spec: containers: - image: my-app-imageEsse arquivo é uma definição simples de serviço do Cloud Run, que é usada para implantar o aplicativo. A imagem do contêiner a ser implantada é definida aqui como um marcador de posição,
my-app-image, que é substituído pela imagem específica quando você cria o lançamento.
Criar uma versão
Uma versão é o recurso central do Cloud Deploy que representa as mudanças que estão sendo implantadas. O pipeline de entrega define o ciclo de vida dessa versão. Consulte Arquitetura de serviço do Cloud Deploy para mais detalhes sobre esse ciclo de vida.
GKE
Execute o seguinte comando no diretório deploy-hooks-gke-quickstart para criar um recurso release que representa a imagem do contêiner a ser implantada:
gcloud deploy releases create test-release-001 \
--project=PROJECT_ID \
--region=us-central1 \
--delivery-pipeline=deploy-hooks-demo-app-gke-1 \
--images=my-app-image=gcr.io/google-containers/nginx@sha256:f49a843c290594dcf4d193535d1f4ba8af7d56cea2cf79d1e9554f077f1e7aaa
Observe a flag --images=, que você usa para substituir o marcador de posição (my-app-image) no manifesto pela imagem específica qualificada pelo SHA. O Google recomenda que você
crie modelos de manifestos dessa forma e use nomes de imagens qualificados por SHA
na criação do lançamento.
Cloud Run
Execute o seguinte comando no diretório deploy-hooks-run-quickstart para criar um recurso release que representa a imagem do contêiner a ser implantada:
gcloud deploy releases create test-release-001 \
--project=PROJECT_ID \
--region=us-central1 \
--delivery-pipeline=deploy-hooks-demo-app-run-1 \
--images=my-app-image=us-docker.pkg.dev/cloudrun/container/hello@sha256:95ade4b17adcd07623b0a0c68359e344fe54e65d0cb01b989e24c39f2fcd296a
Observe a
flag --images=,
que você usa para substituir o marcador de posição (my-app-image) na
definição de serviço
pela imagem específica qualificada por SHA. O Google recomenda que você crie modelos para as definições de serviço e job dessa forma e use nomes de imagens qualificados por SHA na criação do lançamento.
Assim como em todas as versões (a menos que incluam --disable-initial-rollout),
o Cloud Deploy também cria automaticamente um recurso de
implantação. O aplicativo é
implantado automaticamente no único destino configurado para esse pipeline de
entrega.
Além disso, o job de pré-implantação é executado antes da implantação do aplicativo, e o job de pós-implantação é executado depois.
Conferir os resultados no console do Google Cloud
Após alguns minutos, a versão será implantada no ambiente de execução de destino.
Os hooks de pré e pós-implantação que configuramos (para fins de exemplo) imprimem strings nos registros do Cloud Build. Podemos conferir esses registros para confirmar que os hooks funcionaram conforme esperado.
No console Google Cloud , navegue até a página Pipelines de entrega do Cloud Deploy para visualizar seu pipeline de entrega ("deploy-hooks-demo-app-gke-1" ou "deploy-hooks-demo-app-run-1").
Clique no nome do pipeline de entrega ("deploy-hooks-demo-app-gke-1" ou "deploy-hooks-demo-app-run-1").
A visualização do pipeline mostra o status de implantação do app. Como há apenas um estágio no pipeline, a visualização mostra apenas um nó.

E sua versão é listada na guia Versões em Detalhes do pipeline de entrega.
Clique na guia Rollouts, em Detalhes do pipeline de entrega.
Clique no nome do lançamento para conferir os detalhes.

Predeploy e Postdeploy são listados como jobs.
Clique em Pré-implantação.
O registro de execução do job é exibido.
Role a lista de entradas de registro para baixo até encontrar
predeploy-echoe clique nele.
Observe o
textPayload. Essa string é o que foi configurado nopredeploy-actiondo seu pipeline de entrega.Clique no job Postdeploy e encontre a entrada de registro
postdeploy-echo.
Limpar
Para evitar cobranças na conta do Google Cloud pelos recursos usados nesta página, siga as etapas abaixo.
Exclua o cluster do GKE ou o serviço do Cloud Run:
GKE
gcloud container clusters delete deploy-hooks-cluster --region=us-central1 --project=PROJECT_IDCloud Run
gcloud run services delete my-hooks-run-service --region=us-central1 --project=PROJECT_IDExclua o pipeline de entrega, o destino, a versão e o lançamento:
gcloud deploy delete --file=clouddeploy.yaml --force --region=us-central1 --project=PROJECT_IDExclua os buckets do Cloud Storage criados pelo Cloud Deploy.
Uma termina com
_clouddeploy, e a outra é[region].deploy-artifacts.[project].appspot.com.
Pronto, você concluiu as etapas deste início rápido.