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 execução 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.
Você também pode usar um cluster do GKE Enterprise para isso, mas este apresentação rápida usa apenas o GKE e o Cloud Run.
Crie uma configuração do Skaffold e um manifesto do Kubernetes ou uma definição de serviço do Cloud Run.
O arquivo de configuração do Skaffold é onde você configura os hooks de implantação para execução. Você identifica um contêiner para executar antes da implantação e outro para executar depois.
Defina o pipeline de entrega e o destino de implantação do Cloud Deploy.
Na configuração do pipeline de entrega, você vai fazer referência aos hooks de implantação definidos em
skaffold.yaml
para executá-los.Esse pipeline inclui apenas uma etapa e usa apenas um destino.
Crie uma versão, que é implantada automaticamente no destino.
Um dos hooks é executado antes do aplicativo ser implantado, e o outro é executado depois.
Confira os resultados dos hooks antes e depois do deploy nos logs do Cloud Build usando a página Detalhes do lançamento do Cloud Deploy no console do Google Cloud.
Antes de começar
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Deploy, Cloud Build, GKE, Cloud Run, and Cloud Storage APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Deploy, Cloud Build, GKE, Cloud Run, and Cloud Storage APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
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 sã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 o 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ãoactAs
para implantar 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
as configurações padrão. O endpoint de API Kubernetes do cluster precisa ser
acessível pela rede da Internet pública. Os clusters do GKE
são acessíveis externamente por padrão.
gcloud container clusters create-auto deploy-hooks-cluster \ --project=PROJECT_ID \ --region=us-central1
Preparar a configuração do Skaffold e o manifesto do aplicativo
O Cloud Deploy usa o Skaffold para fornecer os detalhes sobre o que implantar e como implantar no destino.
Neste guia de início rápido, você cria um arquivo skaffold.yaml
, que identifica o
manifesto a ser usado para implantar o app de exemplo e também identifica os contêineres
a serem executados antes e depois da implantação (os hooks de implantação).
Abra uma janela de terminal.
Crie um novo diretório e navegue até ele.
GKE;
mkdir deploy-hooks-gke-quickstart cd deploy-hooks-gke-quickstart
Cloud Run
mkdir deploy-hooks-run-quickstart cd deploy-hooks-run-quickstart
Crie um arquivo chamado
skaffold.yaml
com o seguinte conteúdo:GKE;
apiVersion: skaffold/v4beta7 kind: Config manifests: rawYaml: - k8s-pod.yaml deploy: kubectl: {} customActions: - name: predeploy-action containers: - name: predeploy-echo image: ubuntu command: ["/bin/sh"] args: ["-c", 'echo "this is a predeploy action"' ] - name: postdeploy-action containers: - name: postdeploy-echo image: ubuntu command: ["/bin/sh"] args: ["-c", 'echo "this is a postdeploy action"' ]
Cloud Run
apiVersion: skaffold/v4beta7 kind: Config manifests: rawYaml: - service.yaml deploy: cloudrun: {} customActions: - name: predeploy-action containers: - name: predeploy-echo image: ubuntu command: ["/bin/sh"] args: ["-c", 'echo "this is a predeploy action"' ] - name: postdeploy-action containers: - name: postdeploy-echo image: ubuntu command: ["/bin/sh"] args: ["-c", 'echo "this is a postdeploy action"' ]
Esse arquivo inclui a estrofe
customActions:
. Isso define os contêineres para serem executados antes e depois da implantação, os hooks.Consulte a referência do
skaffold.yaml
para 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.yaml
com o seguinte conteúdo:apiVersion: v1 kind: Pod metadata: name: my-hooks-pod spec: containers: - name: nginx image: my-app-image
Esse 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 a versão.Cloud Run
Crie um arquivo chamado
service.yaml
com o seguinte conteúdo:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: my-hooks-run-service spec: template: spec: containers: - image: my-app-image
Esse arquivo é uma definição de serviço simples 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 a versão.
Criar o pipeline de entrega e o destino
É 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.
Crie o pipeline de entrega e a definição do 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: actions: ["predeploy-action"] postdeploy: actions: ["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-cluster
Cloud 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: actions: ["predeploy-action"] postdeploy: actions: ["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-central1
Registre o pipeline e os destinos com o serviço do 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 do 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 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 saber mais sobre esse ciclo de vida.
GKE;
Execute o seguinte comando no diretório deploy-hooks-gke-quickstart
para criar um recurso release
que represente 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 um modelo para seus manifestos dessa forma e use nomes de imagem qualificados por SHA
na criação da versão.
Cloud Run
Execute o seguinte comando no diretório deploy-hooks-run-quickstart
para criar um recurso release
que represente 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:4a856b6f1c3ce723a456ddc2adfbb794cbfba93f727e2d96fcf6540bd0d6fff4
Observe a
flag --images=
,
que você usa para substituir o marcador de posição (my-app-image
) na
definição do serviço
pela imagem específica qualificada pelo SHA. O Google recomenda que você
crie modelos para suas definições de serviço e job dessa maneira e use
nomes de imagem qualificados com SHA na criação da versão.
Como em todas as versões (a menos que incluam --disable-initial-rollout
),
o Cloud Deploy também cria automaticamente um recurso de
lançamento. 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 pós-implantação é executado depois.
Conferir os resultados no console do Google Cloud
Após alguns minutos, a versão é implantada no ambiente de execução de destino.
Os ganchos de pré-implantação e pós-implantação que configuramos (para fins de exemplo) imprimem strings nos registros do Cloud Build. É possível conferir esses registros para confirmar se os hooks funcionaram conforme o esperado.
No console do Google Cloud, navegue até a página Pipelines de entrega do Cloud Deploy para conferir o 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 uma fase 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 Implantações em Detalhes do pipeline de entrega.
Clique no nome do lançamento para conferir os detalhes.
Pré-implantação e Pós-implantação são listados como jobs.
Clique em Pré-implantar.
O registro de execução do job é exibido.
Role para baixo na lista de entradas de registro para encontrar
predeploy-echo
e clique nele.Observe o
textPayload
. Essa string é o que foi configurado nopredeploy-action
na configuração do Skaffold.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 estas etapas.
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_ID
Cloud Run
gcloud run services delete my-hooks-run-service --region=us-central1 --project=PROJECT_ID
Exclua 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_ID
Exclua 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.