Visão geral
O Google Cloud Deploy é um serviço gerenciado que automatiza a entrega de aplicativos para uma série de ambientes de destino em uma sequência de promoções definida. Quando você quiser implantar seu aplicativo atualizado, será necessário criar uma versão, cujo ciclo de vida é gerenciado por um pipeline de entrega.
Neste laboratório, você vai criar um pipeline de entrega usando o Google Cloud Deploy. Depois você vai criar uma versão de um aplicativo básico e promovê-lo em uma série de destinos do Google Kubernetes Engine (GKE).
O exemplo de aplicativo é um app da Web simples que detecta uma porta, fornece um código de resposta HTTP e adiciona uma entrada de registro.
Objetivos
Neste laboratório, você aprenderá a fazer o seguinte:
- Implantar uma imagem de contêiner no Google Cloud Artifact Registry usando o Skaffold
- Criar um pipeline de entrega do Google Cloud Deploy
- Criar uma versão para o pipeline de entrega
- Promover o aplicativo usando os destinos no pipeline de entrega
Configuração do laboratório
Acesse o Qwiklabs
Para cada laboratório, você recebe um novo projeto do Google Cloud e um conjunto de recursos por um determinado período sem custo financeiro.
-
Clique no botão Começar o laboratório. Se for preciso pagar, você verá um pop-up para selecionar a forma de pagamento.
No painel Detalhes do laboratório à esquerda, você vai encontrar o seguinte:
- O botão Abrir console do Google Cloud
- O tempo restante
- As credenciais temporárias que você vai usar neste laboratório
- Outras informações, se forem necessárias
-
Se você estiver usando o navegador Chrome, clique em Abrir console do Google Cloud ou clique com o botão direito do mouse e selecione Abrir link em uma janela anônima.
O laboratório ativa os recursos e depois abre a página Fazer login em outra guia.
Dica: coloque as guias em janelas separadas lado a lado.
Observação: se aparecer a caixa de diálogo Escolher uma conta, clique em Usar outra conta.
-
Se necessário, copie o Nome de usuário abaixo e cole na caixa de diálogo Fazer login.
{{{user_0.username | "Nome de usuário"}}}
Você também encontra o Nome de usuário no painel Detalhes do laboratório.
-
Clique em Seguinte.
-
Copie a Senha abaixo e cole na caixa de diálogo de boas-vindas.
{{{user_0.password | "Senha"}}}
Você também encontra a Senha no painel Detalhes do laboratório.
-
Clique em Seguinte.
Importante: você precisa usar as credenciais fornecidas no laboratório, e não as da sua conta do Google Cloud.
Observação: se você usar sua própria conta do Google Cloud neste laboratório, é possível que receba cobranças adicionais.
-
Acesse as próximas páginas:
- Aceite os Termos e Condições.
- Não adicione opções de recuperação nem autenticação de dois fatores (porque essa é uma conta temporária).
- Não se inscreva em testes gratuitos.
Depois de alguns instantes, o console do Google Cloud será aberto nesta guia.
Observação: para acessar uma lista de produtos e serviços do Google Cloud, clique no Menu de navegação no canto superior esquerdo ou digite o nome do serviço ou produto no campo Pesquisar.
Depois que você concluir as etapas iniciais de login, o painel do projeto será exibido.
Ative o Google Cloud Shell
O Google Cloud Shell é uma máquina virtual com ferramentas de desenvolvimento. Ele tem um diretório principal permanente de 5 GB e é executado no Google Cloud.
O Cloud Shell oferece acesso de linha de comando aos recursos do Google Cloud.
-
No console do Cloud, clique no botão "Abrir o Cloud Shell" na barra de ferramentas superior direita.

-
Clique em Continuar.
O provisionamento e a conexão do ambiente podem demorar um pouco. Quando você estiver conectado, já estará autenticado, e o projeto estará definido com seu PROJECT_ID. Exemplo:

A gcloud é a ferramenta de linha de comando do Google Cloud. Ela vem pré-instalada no Cloud Shell e aceita preenchimento com tabulação.
- Para listar o nome da conta ativa, use este comando:
gcloud auth list
Saída:
Credentialed accounts:
- @.com (active)
Exemplo de saída:
Credentialed accounts:
- google1623327_student@qwiklabs.net
- Para listar o ID do projeto, use este comando:
gcloud config list project
Saída:
[core]
project =
Exemplo de saída:
[core]
project = qwiklabs-gcp-44776a13dea667a6
Observação:
a documentação completa da gcloud está disponível no
guia com informações gerais sobre a gcloud CLI
.
Tarefa 1: criar três clusters do GKE
Nesta tarefa, você vai criar os três clusters do GKE que serão os destinos do pipeline de entrega.
Três clusters do GKE serão criados, indicando os três destinos do pipeline de entrega:
- Defina as variáveis de ambiente que serão usadas por vários comandos:
export PROJECT_ID=$(gcloud config get-value project)
export REGION={{{ project_0.default_region | "REGION" }}}
gcloud config set compute/region $REGION
- Ative a API Google Kubernetes Engine:
gcloud services enable \
container.googleapis.com \
clouddeploy.googleapis.com
- Configure o preenchimento com tabulação da kubectl no Cloud Shell:
source <(kubectl completion bash)
- Crie os três clusters do GKE:
gcloud container clusters create-auto test --async
gcloud container clusters create-auto staging --async
gcloud container clusters create-auto prod --async
Observação: o --async também sinaliza os clusters para provisionamento no segundo plano, enquanto o usuário pode continuar configurando outros elementos do pipeline.
- Confira o status dos três clusters:
gcloud container clusters list --format="csv(name,status)"
Observação: como estamos usando a flag --async, esse comando é uma forma de saber o status da implantação dos clusters.
Saída
name,status
prod,PROVISIONING
staging,PROVISIONING
test,RUNNING
Criar clusters pode demorar alguns minutos. Você não precisa esperar que os clusters estejam prontos. Continue o laboratório.
Clique em Verificar meu progresso para conferir o objetivo.
Crie três clusters do GKE
Tarefa 2: preparar a imagem de contêiner do aplicativo da Web
Nesta tarefa, você vai criar um repositório no Artifact Registry para guardar as imagens de contêiner do aplicativo da Web.
- Ative a API Artifact Registry:
gcloud services enable artifactregistry.googleapis.com
- Crie o repositório do app da Web para guardar imagens de contêiner:
gcloud artifacts repositories create web-app \
--description="Image registry for sample web app" \
--repository-format=docker \
--location=$REGION
Clique em Verificar meu progresso para conferir o objetivo.
Crie o repositório do app da Web
Tarefa 3: criar e implantar as imagens de contêiner no Artifact Registry
Você vai clonar o repositório git que contém o aplicativo da Web e implantar as imagens de contêiner dele no Artifact Registry.
Preparar a configuração do aplicativo
- Clone o repositório para o laboratório no seu diretório principal:
cd ~/
git clone https://github.com/GoogleCloudPlatform/cloud-deploy-tutorials.git
cd cloud-deploy-tutorials
git checkout c3cae80 --quiet
cd tutorials/base
- Crie a configuração
skaffold.yaml
:
envsubst < clouddeploy-config/skaffold.yaml.template > web/skaffold.yaml
cat web/skaffold.yaml
Observação: o comando envsubst é um comando de encontrar e substituir.
O diretório da Web agora contém o arquivo de configuração skaffold.yaml
, que fornece instruções para o Skaffold criar uma imagem de contêiner para seu aplicativo. Essa configuração descreve os itens a seguir.
A seção "Criar" configura:
- As duas imagens de contêiner que serão criadas (artefatos)
- O projeto do Google Cloud Build usado para criar as imagens
A seção deploy
configura os manifestos do Kubernetes necessários na implantação da carga de trabalho em um cluster.
A configuração portForward
é usada para definir o serviço do Kubernetes para a implantação.
Saída
apiVersion: skaffold/v2beta7
kind: Config
build:
artifacts:
- image: leeroy-web
context: leeroy-web
- image: leeroy-app
context: leeroy-app
googleCloudBuild:
projectId: {{project-id}}
deploy:
kubectl:
manifests:
- leeroy-web/kubernetes/*
- leeroy-app/kubernetes/*
portForward:
- resourceType: deployment
resourceName: leeroy-web
port: 8080
localPort: 9000
Observação: para visualizar os arquivos, use vi, emacs, nano ou o editor de código do Cloud Shell clicando no ícone Abrir editor no Cloud Shell.
Criar o aplicativo da Web
A ferramenta Skaffold vai lidar com o envio da base de código para o Cloud Build.
- Ative a API Cloud Build:
gcloud services enable cloudbuild.googleapis.com
- Execute o comando skaffold para criar o aplicativo e implantar a imagem de contêiner no repositório do Artifact Registry criado anteriormente:
cd web
skaffold build --interactive=false \
--default-repo $REGION-docker.pkg.dev/$PROJECT_ID/web-app \
--file-output artifacts.json
cd ..
- Depois de concluir a criação do Skaffold, verifique as imagens de contêiner no Artifact Registry:
gcloud artifacts docker images list \
$REGION-docker.pkg.dev/$PROJECT_ID/web-app \
--include-tags \
--format yaml
O parâmetro --format
yaml retorna a saída como YAML para facilitar a leitura. O resultado será semelhante a este:
Saída
---
createTime: '2024-09-11T02:07:54.995807Z'
package: us-central1-docker.pkg.dev/{{project-id}}/web-app/leeroy-app
tags: '9181623'
updateTime: '2024-09-11T02:07:54.995807Z'
version: sha256:6af6a0a72d13dd6597c0fc0191f697e2da2c3892d1bf8e87a3df8d96612e1495
---
createTime: '2024-09-11T02:07:53.629263Z'
package: us-central1-docker.pkg.dev/{{project-id}}/web-app/leeroy-web
tags: '9181623'
updateTime: '2024-09-11T02:07:53.629263Z'
version: sha256:a0179673d1876f205875b223557c83162e56e91c5e3313f5e99465a224adb6c9
Por padrão, o Skaffold define a tag de uma imagem como a tag git relacionada, se disponível. É possível encontrar informações semelhantes no arquivo artifacts.json
que foi criado pelo comando skaffold.
O Skaffold gera o arquivo web/artifacts.json
com detalhes das imagens implantadas:
cat web/artifacts.json | jq
Saída
{
"builds": [
{
"imageName": "leeroy-web",
"tag": "us-central1-docker.pkg.dev/{{project-id}}/web-app/leeroy-web:9181623@sha256:a0179673d1876f205875b223557c83162e56e91c5e3313f5e99465a224adb6c9"
},
{
"imageName": "leeroy-app",
"tag": "us-central1-docker.pkg.dev/{{project-id}}/web-app/leeroy-app:9181623@sha256:6af6a0a72d13dd6597c0fc0191f697e2da2c3892d1bf8e87a3df8d96612e1495"
}
]
Clique em Verificar meu progresso para conferir o objetivo.
Crie e implante as imagens de contêiner no Artifact Registry
Tarefa 4: criar o pipeline de entrega
Nesta tarefa, você vai configurar o pipeline de entrega. Ele vai promover apps do teste ao preparo e do preparo à produção.
- Ative a API Google Cloud Deploy:
gcloud services enable clouddeploy.googleapis.com
- Crie o recurso de pipeline de entrega usando o arquivo
delivery-pipeline.yaml
:
gcloud config set deploy/region $REGION
cp clouddeploy-config/delivery-pipeline.yaml.template clouddeploy-config/delivery-pipeline.yaml
gcloud deploy apply --file=clouddeploy-config/delivery-pipeline.yaml
- Verifique se o pipeline de entrega foi criado:
gcloud deploy delivery-pipelines describe web-app
O pipeline de entrega será semelhante à seguinte saída:
Saída
Unable to get target test
Unable to get target staging
Unable to get target prod
Delivery Pipeline:
createTime: '2024-09-11T14:03:18.294884547Z'
description: web-app delivery pipeline
etag: 2539eacd7f5c256d
name: projects/{{project-id}}/locations/us-central1/deliveryPipelines/web-app
serialPipeline:
stages:
- targetId: test
- targetId: staging
- targetId: prod
uid: eb0601aa03ac4b088d74c6a5f13f36ae
updateTime: '2024-09-11T14:03:18.680753520Z'
Targets: []
Observe as três primeiras linhas da saída. No momento, o pipeline de entrega faz referência a três ambientes de destino que ainda não foram criados. Na próxima tarefa, você vai criar esses destinos.
Clique em Verificar meu progresso para conferir o objetivo.
Crie o pipeline de entrega
Tarefa 5: configurar os destinos da implantação
Três destinos do pipeline de entrega serão criados, um para cada cluster do GKE.
Verificar se os clusters estão prontos
Os três clusters do GKE já devem estar em execução, mas é importante verificar.
- Execute o seguinte para receber o status dos clusters:
gcloud container clusters list --format="csv(name,status)"
Os três clusters devem estar no estado "RUNNING", conforme indicado na saída abaixo. Se ainda não estiverem marcados como "RUNNING", tente novamente o comando acima até que o status seja alterado.
Saída
name,status
prod,RUNNING
staging,RUNNING
test,RUNNING
Depois que todos os clusters estiverem com o status "RUNNING", continue o laboratório.
Criar um contexto para cada cluster
Use os comandos abaixo para gerar credenciais para cada cluster e crie um contexto kubectl
fácil de usar para fazer referência ao cluster depois:
CONTEXTS=("test" "staging" "prod")
for CONTEXT in ${CONTEXTS[@]}
do
gcloud container clusters get-credentials ${CONTEXT} --region ${REGION}
kubectl config rename-context gke_${PROJECT_ID}_${REGION}_${CONTEXT} ${CONTEXT}
done
Criar um namespace em cada cluster
Use os comandos abaixo para criar um namespace do Kubernetes (web-app) em cada um dos três clusters:
for CONTEXT in ${CONTEXTS[@]}
do
kubectl --context ${CONTEXT} apply -f kubernetes-config/web-app-namespace.yaml
done
O aplicativo será implantado no namespace (web-app).
Criar os destinos do pipeline de entrega
- Envie uma definição de destino para cada destino:
for CONTEXT in ${CONTEXTS[@]}
do
envsubst < clouddeploy-config/target-$CONTEXT.yaml.template > clouddeploy-config/target-$CONTEXT.yaml
gcloud deploy apply --file clouddeploy-config/target-$CONTEXT.yaml
done
Os destinos são descritos em um arquivo yaml. Cada destino configura as informações relevantes do cluster para o destino. As configurações de destino de teste e preparo são basicamente as mesmas.
- Exiba os detalhes para o destino de teste:
cat clouddeploy-config/target-test.yaml
Saída
apiVersion: deploy.cloud.google.com/v1beta1
kind: Target
metadata:
name: test
description: test cluster
gke:
cluster: projects/{{project-id}}/locations/us-central1/clusters/test
O destino de produção é um pouco diferente, já que exige aprovação (confira a configuração requireApproval
na saída) antes que uma versão possa ser promovida para o cluster.
- Exiba os detalhes para o destino de produção:
cat clouddeploy-config/target-prod.yaml
Saída
apiVersion: deploy.cloud.google.com/v1beta1
kind: Target
metadata:
name: prod
description: prod cluster
requireApproval: true
gke:
cluster: projects/{{project-id}}/locations/us-central1/clusters/prod
- Verifique se os três destinos (teste, preparo, produção) foram criados:
gcloud deploy targets list
Todos os destinos do Google Cloud Deploy do pipeline de entrega foram criados.
Clique em Verificar meu progresso para conferir o objetivo.
Configure os destinos da implantação
Tarefa 6: criar uma versão
Nesta tarefa, você vai criar uma versão do aplicativo.
Uma versão do Google Cloud Deploy é uma versão específica de uma ou mais imagens de contêiner associadas a um pipeline de entrega específico. Depois de criada, a versão pode ser promovida por vários destinos (a sequência de promoções). Além disso, a criação de uma versão renderiza o aplicativo usando o skaffold e salva a saída como uma referência pontual usada durante a versão.
Como esta é a primeira versão do seu aplicativo, ele será nomeado web-app-001
.
- Execute o comando a seguir para criar a versão:
gcloud deploy releases create web-app-001 \
--delivery-pipeline web-app \
--build-artifacts web/artifacts.json \
--source web/
O parâmetro --build-artifacts
faz referência ao arquivo artifacts.json
criado pelo skaffold anteriormente. O --source parameter
faz referência ao diretório de origem do aplicativo, onde é possível encontrar o skaffold.yaml.
Quando uma versão é criada, ela também é lançada automaticamente para o primeiro destino no pipeline, a menos que uma aprovação seja necessária. Isso será abordado em uma etapa posterior deste laboratório.
- Para confirmar que o destino de teste tem o aplicativo implantado, execute o comando a seguir:
gcloud deploy rollouts list \
--delivery-pipeline web-app \
--release web-app-001
Saída
---
approvalState: DOES_NOT_NEED_APPROVAL
createTime: '2024-09-11T14:05:21.961604Z'
deployEndTime: '2024-09-11T14:06:35.278604Z'
deployStartTime: '2024-09-11T14:06:22.420091744Z'
deployingBuild: projects/{{project-id}}/locations/us-central1/builds/4815b788-ec5e-4185-9141-a5b57c71b001
enqueueTime: '2024-09-11T14:06:21.760830Z'
etag: 5cb7b6c342b5f29b
name: projects/{{project-id}}/locations/us-central1/deliveryPipelines/web-app/releases/web-app-001/rollouts/web-app-001-to-test-0001
state: SUCCEEDED
targetId: test
uid: cccd9525d3a0414fa60b2771036841d9
O primeiro lançamento de uma versão vai levar vários minutos, porque o Google Cloud Deploy renderiza os manifestos para todos os destinos quando a versão é criada. O cluster do GKE também pode levar alguns minutos para fornecer os recursos necessários para a implantação.
Se você não vir state: SUCCEEDED
na saída do comando anterior, aguarde e execute o comando periodicamente até a conclusão do lançamento.
- Para confirmar que seu aplicativo foi implantado no cluster do GKE de teste, execute os seguintes comandos:
kubectx test
kubectl get all -n web-app
Saída
NAME READY STATUS RESTARTS AGE
pod/leeroy-app-5547cf9d9b-rgc2l 1/1 Running 0 3m27s
pod/leeroy-web-6768b49c46-w7vt9 1/1 Running 0 3m27s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/leeroy-app ClusterIP None <none> 50051/TCP 3m28s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/leeroy-app 1/1 1 1 3m28s
deployment.apps/leeroy-web 1/1 1 1 3m28s
NAME DESIRED CURRENT READY AGE
replicaset.apps/leeroy-app-5547cf9d9b 1 1 1 3m28s
replicaset.apps/leeroy-web-6768b49c46 1 1 1 3m28s
Observação: o comando kubectx permite alternar entre contextos com facilidade.
Clique em Verificar meu progresso para conferir o objetivo.
Crie uma versão
Tarefa 7: promover o aplicativo para o preparo
Nesta tarefa, você vai promover o aplicativo do destino de teste para o destino de preparo.
- Promova o aplicativo para o destino de preparo:
gcloud deploy releases promote \
--delivery-pipeline web-app \
--release web-app-001
Você precisa continuar antes de iniciar a promoção.
- Pressione ENTER para aceitar o padrão (Y = sim).
- Para confirmar que o destino de preparo tem o aplicativo implantado, execute o comando a seguir:
gcloud deploy rollouts list \
--delivery-pipeline web-app \
--release web-app-001
Verificar a saída
Procure a seção marcada targetId: staging
. Se você não vir state: SUCCEEDED
na saída do comando anterior, aguarde e execute o comando periodicamente até a conclusão do lançamento.
Saída
---
approvalState: DOES_NOT_NEED_APPROVAL
createTime: '2024-09-11T02:19:32.539468Z'
deployEndTime: '2024-09-11T02:19:45.970949Z'
deployStartTime: '2024-09-11T02:19:33.111948770Z'
deployingBuild: projects/743805075658/locations/us-central1/builds/2316517c-3a2f-4cd3-80ad-6d133b653746
etag: 1109b802ff586df5
name: projects/{{project-id}}/locations/us-central1/deliveryPipelines/web-app/releases/web-app-001/rollouts/web-app-001-to-staging-0001
state: SUCCEEDED
targetId: staging
uid: 80a35a5f044844708d2050f8c556e07e
Clique em Verificar meu progresso para conferir o objetivo.
Promova o aplicativo para o preparo
Tarefa 8: promover o aplicativo para produção
Nesta tarefa, você vai promover novamente o aplicativo, além de fornecer a aprovação.
- Promova o aplicativo para o destino de produção:
gcloud deploy releases promote \
--delivery-pipeline web-app \
--release web-app-001
Você precisa continuar antes de iniciar a promoção.
- Pressione ENTER para aceitar o padrão (Y = sim).
- Para verificar o status do destino de produção, execute o comando a seguir:
gcloud deploy rollouts list \
--delivery-pipeline web-app \
--release web-app-001
Na saída, observe que o approvalState
é NEEDS_APPROVAL
e o estado é PENDING_APPROVAL
.
Saída
---
approvalState: NEEDS_APPROVAL
createTime: '2024-09-11T14:12:07.466989Z'
etag: 6e9303e5a1b04084
name: projects/{{project-id}}/locations/us-central1/deliveryPipelines/web-app/releases/web-app-001/rollouts/web-app-001-to-prod-0001
state: PENDING_APPROVAL
targetId: prod
uid: a5c7d6007fee4d80904d49142581aaa7
- Aprove o lançamento com o código a seguir:
gcloud deploy rollouts approve web-app-001-to-prod-0001 \
--delivery-pipeline web-app \
--release web-app-001
Você vai precisar aprovar o lançamento antes de iniciar a promoção.
- Pressione ENTER para aceitar o padrão (Y = sim).
- Para confirmar que o destino de produção tem o aplicativo implantado, execute o comando a seguir:
gcloud deploy rollouts list \
--delivery-pipeline web-app \
--release web-app-001
Conforme os lançamentos anteriores, localize a entrada do destino (targetId: prod
) e verifique se o lançamento foi concluído (state: SUCCEEDED
). Execute o comando periodicamente até a conclusão do lançamento.
- Use
kubectl
para verificar o status do aplicativo implantado:
kubectx prod
kubectl get all -n web-app
Clique em Verificar meu progresso para conferir o objetivo.
Promova o aplicativo para produção
Parabéns!
Agora você pode usar o Cloud Deploy para criar pipelines de entrega contínua!
Copyright 2025 Google LLC. Todos os direitos reservados. Google e o logotipo do Google são marcas registradas da Google LLC. Todos os outros nomes de empresas e produtos podem ser marcas registradas das empresas a que estão associados.