Como lançar com o Cloud Deploy

1. Objetivos

Neste tutorial, você vai criar três clusters do GKE chamados "preview", "canário" e "prod". Em seguida, crie um destino do Cloud Deploy correspondente a cada cluster e um pipeline do Cloud Deploy que defina a sequência de etapas para realizar a implantação nesses destinos.

O fluxo de implantação será acionado por um pipeline do Cloud Build, que vai criar a versão do Cloud Deploy e realizar a implantação no cluster de visualização. Depois de verificar se a implantação na prévia foi concluída e está funcionando conforme o esperado, promova a versão manualmente no cluster de canário. A promoção da versão no cluster de produção vai exigir aprovação. Você vai aprovar o pipeline de produção na interface do Cloud Deploy e, por fim, promover.

Os objetivos deste tutorial podem ser divididos nas seguintes etapas:

  • Preparar seu espaço de trabalho
  • Definir destinos do Cloud Deploy
  • Definir o pipeline do Cloud Deploy
  • Criar uma versão
  • Promover uma implantação
  • Aprovar uma versão de produção

Configuração de ambiente personalizada

  1. Faça login no Console do Google Cloud e crie um novo projeto ou reutilize um existente. Crie uma conta do Gmail ou do Google Workspace, se ainda não tiver uma.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • O Nome do projeto é o nome de exibição para os participantes do projeto. Ele é uma string de caracteres que não é usada pelas APIs do Google e pode ser atualizada a qualquer momento.
  • O ID do projeto precisa ser exclusivo em todos os projetos do Google Cloud e não pode ser alterado após a definição. O Console do Cloud gera automaticamente uma string única, geralmente não importa o que seja. Na maioria dos codelabs, você precisará fazer referência ao ID do projeto, que geralmente é identificado como PROJECT_ID. Então, se você não gostar dele, gere outro ID aleatório ou crie um próprio e veja se ele está disponível. Em seguida, ele fica "congelado" depois que o projeto é criado.
  • Há um terceiro valor, um Número de projeto, que algumas APIs usam. Saiba mais sobre esses três valores na documentação.
  1. Em seguida, você precisará ativar o faturamento no Console do Cloud para usar os recursos/APIs do Cloud. A execução deste codelab não será muito cara, se tiver algum custo. Para encerrar os recursos e não gerar cobranças além deste tutorial, siga as instruções de "limpeza" encontradas no final do codelab. Novos usuários do Google Cloud estão qualificados para o programa de US$ 300 de avaliação sem custos.

2. Configuração da plataforma

Como preparar seu espaço de trabalho

Vamos configurar nosso ambiente aqui, o que é necessário para executar este tutorial. Quando essa etapa for concluída, teremos um cluster do GKE criado para executar as implantações.

  1. Definir padrões de configuração do gcloud

gcloud config set project <your project>

gcloud config set deploy/region us-central1

  1. Clone Repo

git clone https://github.com/gushob21/software-delivery-workshop

cd software-delivery-workshop/labs/cloud-deploy/

cloudshell workspace .

rm -rf deploy && mkdir deploy

  1. Definir as variáveis de ambiente

export PROJECT_ID=$(gcloud config get-value project)

export PROJECT_NUMBER=$(gcloud projects list --filter="$PROJECT_ID" --format="value(PROJECT_NUMBER)")

  1. Ativar APIs

gcloud services enable \

cloudresourcemanager.googleapis.com \

    `container.googleapis.com \`

    `cloudbuild.googleapis.com \`

    `containerregistry.googleapis.com \`

    `secretmanager.googleapis.com \`

    `clouddeploy.googleapis.com` 
  1. Criar clusters do GKE
     `gcloud container clusters create preview \`
    

--zone=us-central1-a --async

    `gcloud container clusters create canary \`

--zone=us-central1-b --async

    `gcloud container clusters create prod \`

--zone=us-central1-c

Como definir destinos do Cloud Deploy

  1. Crie um arquivo no diretório de implantação chamado preview.yaml com o seguinte comando no cloudshell:

cat <<EOF >deploy/preview.yaml

apiVersion: deploy.cloud.google.com/v1beta1

kind: Target

metadata:

name: preview

annotations: {}

labels: {}

description: Target for preview environment

gke:

cluster: projects/$PROJECT_ID/locations/us-central1-a/clusters/preview

EOF

    As you noticed, the "kind" tag is "Target". It allows us to add some metadata to the target, a description and finally the GKE cluster where the deployment is supposed to happen for this target.
  1. Crie um arquivo no diretório de implantação chamado canary.yaml com o seguinte comando no Cloud Shell:

cat <<EOF >deploy/canary.yaml

apiVersion: deploy.cloud.google.com/v1beta1

kind: Target

metadata:

name: canary

annotations: {}

labels: {}

description: Target for canary environment

gke:

cluster: projects/$PROJECT_ID/locations/us-central1-b/clusters/canary

EOF

  1. Crie um arquivo no diretório de implantação chamado prod.yaml com o seguinte comando no Cloud Shell:

cat <<EOF >deploy/prod.yaml

apiVersion: deploy.cloud.google.com/v1beta1

kind: Target

metadata:

name: prod

annotations: {}

labels: {}

description: Target for prod environment

requireApproval: true

gke:

cluster: projects/$PROJECT_ID/locations/us-central1-c/clusters/prod

EOF

Observe que a tag "requireApproval" está definida como "true". Isso não vai permitir a promoção para o destino de produção até que a aprovação seja concedida. Você precisa da função roles/clouddeploy.approver para aprovar uma versão.

  1. Criar os destinos de implantação
         `gcloud config set deploy/region us-central1` 
    

gcloud beta deploy apply --file deploy/preview.yaml

gcloud beta deploy apply --file deploy/canary.yaml

gcloud beta deploy apply --file deploy/prod.yaml

3. Criação de apps

Como parte da criação de um novo aplicativo, o pipeline de CICD geralmente é configurado para executar builds automáticos, testes de integração e implantações. As etapas a seguir são consideradas parte do processo de configuração de um novo app. Cada novo aplicativo terá um pipeline de implantação configurado.

Como definir o pipeline do Cloud Deploy

  1. Crie um arquivo no diretório de implantação chamado pipeline.yaml com o seguinte comando no Cloud Shell:

cat <<EOF >>deploy/pipeline.yaml

apiVersion: deploy.cloud.google.com/v1beta1

kind: DeliveryPipeline

metadata:

name: sample-app

labels:

`app: sample-app`

description: delivery pipeline

serialPipeline:

stages:

- targetId: preview

`profiles:`

`- preview`

- targetId: canary

`profiles:`

`- canary`

- targetId: prod

`profiles:`

`- prod`

EOF

    As you noticed, the "kind" tag is "DeliveryPipeline". It lets you define the metadata for the pipeline, a description and an order of deployment into various targets via serialPipeline tag.

A tag serialPipeline contém uma tag chamada "stages", que é uma lista de todos os destinos em que esse pipeline de entrega está configurado para implantação.

targetId identifica o destino específico a ser usado neste estágio do pipeline de entrega. O valor é a propriedade metadata.name da definição de destino.

profiles é uma lista de zero ou mais nomes de perfil do Skaffold do skaffold.yaml. O Cloud Deploy usa o perfil com a renderização do Skaffold ao criar a versão.

  1. Aplicar pipeline

gcloud beta deploy apply --file deploy/pipeline.yaml

4. Fase de desenvolvimento

À medida que os aplicativos são desenvolvidos, as cadeias de ferramentas CICD automatizadas vão criar e armazenar recursos. Os comandos abaixo são executados para criar o aplicativo usando o skaffold e armazenar recursos para implantação com o Cloud Deploy. Essa etapa é realizada pelo processo CICD para cada build de aplicativo.

  1. Criar e armazenar o aplicativo com o skaffold

skaffold build \

--file-output=artifacts.json \

--default-repo gcr.io/$PROJECT_ID \

--push=true

5. Fase de lançamento

Ao final do processo de CICD, normalmente quando o código é marcado para produção, você inicia o processo de lançamento chamando o comando cloud deploy release. Depois que a implantação for validada e aprovada, você vai mover a versão para os vários ambientes de destino promovendo e aprovando a ação por processos automatizados ou aprovações manuais.

Como criar uma versão

Criamos arquivos do Cloud Deploy neste tutorial para entender como ele funciona. Para fins de demonstração, criamos os mesmos arquivos do Cloud Deploy e os enviamos para um repositório do GitHub com um aplicativo de exemplo e vamos usar o Cloud Deploy para lançar esse aplicativo.

export REL_TIMESTAMP=$(date '+%Y%m%d-%H%M%S')

gcloud beta deploy releases create \

sample-app-release-${REL_TIMESTAMP} \

--delivery-pipeline=sample-app \

--description="Release demo" \

--build-artifacts=artifacts.json \

--annotations="release-id=rel-${REL_TIMESTAMP}"

Revisar a versão

Quando uma versão do Cloud Deploy é criada, ela é lançada automaticamente no primeiro destino, que é a prévia.

  1. Acesse <Cloud Deploy> no console do Google Cloud.
  2. Clique em "sample-app".

Nesta tela, você vai encontrar uma representação gráfica do seu pipeline.

  1. Confirme um contorno verde no lado esquerdo da caixa de visualização, o que significa que a versão foi implantada nesse ambiente.
  2. Se quiser, confira mais detalhes sobre a versão clicando no nome dela em "Detalhes da versão" na parte de baixo da tela.
  3. Para verificar se a versão implantou o aplicativo, execute o comando a seguir no cloushell.

gcloud container clusters get-credentials preview --zone us-central1-a && kubectl port-forward --namespace default $(kubectl get pod --namespace default --selector="app=cloud-deploy-tutorial" --output jsonpath='{.items[0].metadata.name}') 8080:8080

  1. Clique no ícone de visualização da Web no canto superior direito da tela.
  2. Selecione "Visualizar na porta 8080"

Isso vai levar você a uma nova página que mostra a mensagem "Hello World!"

  1. Use ctrl+c no terminal para encerrar o encaminhamento de porta.

Como promover uma versão

Agora que a versão foi implantada no primeiro destino (pré-lançamento) no pipeline, ela pode ser promovida para o próximo destino (canário). Execute o comando a seguir para iniciar o processo.

gcloud beta deploy releases promote \

--release=sample-app-release-${REL_TIMESTAMP} \

--delivery-pipeline=sample-app \

--quiet

Analisar a promoção da versão

  1. Acesse o pipeline sample-app no console do Google Cloud.
  2. Confirme um contorno verde no lado esquerdo da caixa Canary, o que significa que a versão foi implantada nesse ambiente.
  3. Crie um túnel para o aplicativo e verifique se ele foi implantado corretamente

gcloud container clusters get-credentials canary --zone us-central1-b && kubectl port-forward --namespace default $(kubectl get pod --namespace default --selector="app=cloud-deploy-tutorial" --output jsonpath='{.items[0].metadata.name}') 8080:8080

  1. Clique no ícone de visualização da Web no canto superior direito da tela.
  2. Selecione "Visualizar na porta 8080"

Isso vai levar você a uma nova página que mostra a mensagem "Hello World!"

  1. Use ctrl+c no terminal para encerrar o encaminhamento de porta.

Como aprovar uma versão de produção

Lembre-se de que, quando criamos o destino de produção pelo arquivo prod.yaml, especificamos a tag requireApproval como "true". Isso vai forçar a aprovação da promoção no produto.

  1. Promova a versão canário para a produção com o seguinte comando:

gcloud beta deploy releases promote \

--release=sample-app-release-${REL_TIMESTAMP} \

--delivery-pipeline=sample-app \

--quiet

  1. Acesse o pipeline sample-app no console do Google Cloud.
  2. Observe o indicador amarelo "1 pendente".

Essa mensagem indica que há uma versão na fila para implantação na produção, mas que precisa ser analisada e aprovada.

  1. Clique no botão "Revisar" logo abaixo do aviso amarelo.
  2. Na próxima tela, clique em "Revisar" novamente para acessar a tela de aprovação para produção.
  3. Opcionalmente, analise a diferença do manifesto para analisar as mudanças. Nesse caso, um arquivo totalmente novo.
  4. Clique no botão "Aprovar".
  5. Retorne à página do pipeline do app de exemplo, onde você vai encontrar a versão para produção em andamento.

Analisar a versão de produção

Assim como nos outros ambientes, você pode analisar a implantação quando ela for concluída usando as etapas abaixo.

  1. Execute o comando a seguir no cloudshell para criar o encaminhamento de portas.

gcloud container clusters get-credentials prod --zone us-central1-c && kubectl port-forward --namespace default $(kubectl get pod --namespace default --selector="app=cloud-deploy-tutorial" --output jsonpath='{.items[0].metadata.name}') 8080:8080

  1. Clique no ícone de visualização da Web no canto superior direito da tela.
  2. Selecione "Visualizar na porta 8080"

Isso vai levar você a uma nova página que mostra a mensagem "Hello World!"

  1. Use ctrl+c no terminal para encerrar o encaminhamento de porta.