Como lançar com o Cloud Deploy

1. Objetivos

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

O fluxo de implantação será acionado por um pipeline cloudbuild 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 visualização foi bem-sucedida e funcionando como esperado, você promoverá manualmente a versão no cluster 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, promovê-lo.

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

Configuraremos nosso ambiente aqui necessário para executar este tutorial. Quando essa etapa for concluída, um cluster do GKE será criado, onde poderemos executar as implantações.

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

gcloud config set project <your project>

gcloud config set deploy/region us-central1

  1. Clonar repositório

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. Crie 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 cloudshell:

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 cloudshell:

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 a tag "requireApproval", que está definida como "true". Isso não vai permitir a promoção no destino de produção até que a aprovação seja concedida. Você precisa do papel roles/clouddeploy.approver para aprovar uma versão.

  1. Crie 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 app

Como parte da criação de um novo aplicativo, o pipeline 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 cloudshell:

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 nesse 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, de skaffold.yaml. O Cloud Deploy usa o perfil com 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, os conjuntos de ferramentas automatizados de CI/CD vão criar e armazenar os recursos. Os comandos a seguir são executados para criar o aplicativo usando skaffold e armazenar recursos para implantação com o Cloud Deploy. Essa etapa seria executada pelo processo de CI/CD 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

No final do processo de CI/CD, normalmente quando o código é marcado para produção, você iniciará o processo de lançamento chamando o comando cloud deploy release. Mais tarde, depois que a implantação for validada e aprovada, você moverá a versão pelos vários ambientes de destino, promovendo e aprovando a ação por meio de processos automatizados ou aprovações manuais.

Como criar uma versão

Criamos os arquivos do Cloud Deploy neste tutorial para entender como o Cloud Deploy funciona. Para fins de demonstração, criamos os mesmos arquivos do Cloud Deploy e os enviamos a um repositório do GitHub com um aplicativo Go de amostra. Usaremos o Cloud Deploy para fazer o lançamento desse 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}"

Avaliar a versão

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

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

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

  1. Confirme um contorno verde no lado esquerdo da caixa de visualização para indicar que a versão foi implantada nesse ambiente.
  2. Se quiser, reveja detalhes adicionais sobre a versão clicando no nome dela em "Detalhes da versão", na seção inferior da tela
  3. Verifique se a versão implantou o aplicativo e execute o seguinte comando:

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 levará você a uma nova página que mostra a mensagem "Hello World!"

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

Como promover uma versão

Agora que a versão foi implantada no primeiro destino (prévia) no pipeline, é possível promovê-la 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

Revisar a promoção de lançamento

  1. Acesse o pipeline "sample-app" no console do Google Cloud.
  2. Confirme um contorno verde no lado esquerdo da caixa "Canário", indicando que a versão foi implantada nesse ambiente.
  3. Crie um túnel para verificar se o aplicativo está 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 levará você a uma nova página que mostra a mensagem "Hello World!"

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

Como aprovar uma versão de produção

Lembre-se de que, quando criamos o destino de produção pelo prod.yaml, especificamos a tagrequireApproval como verdadeiro. Isso forçará um requisito de aprovação para a promoção na produção.

  1. Promova a versão canário para 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 requer revisão e aprovação.

  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. Se quiser, confira a comparação de manifestos para analisar as mudanças. Nesse caso, um arquivo totalmente novo.
  4. Clique no botão "Aprovar" botão
  5. Volte para a página do pipeline sample-app (link em inglês) onde você vai encontrar a versão para produção em andamento.

Revisar a versão de produção

Assim como nos outros ambientes, siga as etapas abaixo para revisar a implantação quando ela for concluída.

  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 levará você a uma nova página que mostra a mensagem "Hello World!"

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