Como implantar aplicativos do Cloud Run com o Cloud Deploy

Como implantar um aplicativo do Cloud Run com o Cloud Deploy

Sobre este codelab

subjectÚltimo dez. 9, 2022 atualizado
account_circleEscrito por Andrey Shakirov

1. Visão geral

Neste laboratório, você vai implantar um aplicativo .Net no Cloud Run usando o Cloud Deploy. Você vai criar uma imagem de contêiner com o Cloud Build sem usar o Dockerfile. Você vai configurar um pipeline com três ambientes de destino com o Cloud Deploy e seguir as etapas para promover a versão nos ambientes. Por fim, você vai aprovar a versão para ser implantada no ambiente de produção.

916a54f51af5ee54.png

O que é o Cloud Build?

Com o Cloud Build, você pode criar softwares rapidamente em todas as linguagens de programação.

O que é o Cloud Deploy?

O Cloud Deploy é um serviço de entrega contínua totalmente gerenciado. Com o Cloud Deploy, você pode criar pipelines de implantação para GKE, Anthos e Cloud Run.

O que é o Cloud Run?

Com o Cloud Run, você pode implantar aplicativos conteinerizados escalonáveis, escritos em qualquer linguagem (incluindo Go, Python, Java, Node.js, .NET e Ruby) em uma plataforma totalmente gerenciada.

O que é o Skaffold?

O Skaffold é uma ferramenta de linha de comando que permite o desenvolvimento contínuo de aplicativos nativos do Kubernetes. O Cloud Deploy usa o Skaffold para operações de renderização e implantação.

O que você vai aprender

Você vai aprender a:

  • Criar um pipeline do Cloud Deploy
  • Criar uma imagem de contêiner para o aplicativo .NET com o Cloud Build sem usar o Dockerfile
  • Implantar o aplicativo no Cloud Run com o Cloud Deploy
  • Promover versões do Cloud Deploy

Pré-requisitos

  • Para fazer este laboratório, é preciso saber usar o console do Cloud e ambientes shell.

2. Configuração e requisitos

Configuração do projeto do Cloud

  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. É uma string de caracteres não usada pelas APIs do Google É possível atualizar o local a qualquer momento.
  • O ID do projeto precisa ser exclusivo em todos os projetos do Google Cloud e não pode ser mudado após a definição. O console do Cloud gera automaticamente uma string exclusiva. Em geral, não importa o que seja. Na maioria dos codelabs, é necessário fazer referência ao ID do projeto, normalmente identificado como PROJECT_ID. Se você não gostar do ID gerado, crie outro aleatório. Se preferir, teste o seu e confira se ele está disponível. Ele não pode ser mudado após essa etapa e permanece durante o projeto.
  • Para sua informação, há um terceiro valor, um Número do projeto, que algumas APIs usam. Saiba mais sobre esses três valores na documentação.
  1. Em seguida, ative 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 evitar cobranças além deste tutorial, exclua os recursos criados ou exclua o projeto inteiro. Novos usuários do Google Cloud estão qualificados para o programa de US$ 300 de avaliação sem custos.

Configuração do ambiente

Ative o Cloud Shell clicando no ícone à direita da barra de pesquisa.

eb0157a992f16fa3.png

No Cloud Shell, execute o seguinte comando para definir as variáveis de ambiente do projeto:

export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID \
--format='value(projectNumber)')
export REGION=us-central1

Ative APIs:

gcloud services enable \
  run
.googleapis.com \
  cloudbuild
.googleapis.com \
  clouddeploy
.googleapis.com \
  artifactregistry
.googleapis.com

Crie um repositório do Artifact Registry para armazenar imagens de contêiner do aplicativo:

gcloud artifacts repositories create containers-repo \
 
--repository-format=docker \
 
--location=${REGION} \
 
--description="Containers repository"

3. Analisar arquivos de configuração

29c2533441779de0.png

Clone o código-fonte do aplicativo:

git clone https://github.com/gitrey/deploy-cloudrun-app-with-clouddeploy.git
cd deploy
-cloudrun-app-with-clouddeploy

Revise a configuração do pipeline do Cloud Deploy:

clouddeploy.yaml

apiVersion: deploy.cloud.google.com/v1
kind
: DeliveryPipeline
metadata
:
 name
: cloud-run-pipeline
description
: application deployment pipeline
serialPipeline
:
 stages
:
 
- targetId: dev-env
   profiles
: [dev]
 
- targetId: qa-env
   profiles
: [qa]
 
- targetId: prod-env
   profiles
: [prod]
---

apiVersion
: deploy.cloud.google.com/v1
kind
: Target
metadata
:
 name
: dev-env
description
: Cloud Run development service
run
:
 location
: projects/_PROJECT_ID/locations/us-west1
---

apiVersion
: deploy.cloud.google.com/v1
kind
: Target
metadata
:
 name
: qa-env
description
: Cloud Run QA service
run
:
 location
: projects/_PROJECT_ID/locations/us-central1
---

apiVersion
: deploy.cloud.google.com/v1
kind
: Target
metadata
:
 name
: prod-env
description
: Cloud Run PROD service
run
:
 location
: projects/_PROJECT_ID/locations/us-south1

Revise o arquivo skaffold.yaml que define três ambientes e usa o Cloud Run como serviço de destino.

skaffold.yaml

apiVersion: skaffold/v3alpha1
kind
: Config
metadata
:
  name
: cloud-run-app
profiles
:
- name: dev
  manifests
:
    rawYaml
:
   
- deploy-dev.yaml
- name: qa
  manifests
:
    rawYaml
:
   
- deploy-qa.yaml
- name: prod
  manifests
:
    rawYaml
:
   
- deploy-prod.yaml
deploy
:
  cloudrun
: {}

Revise os arquivos de configuração do serviço.

deploy-dev.yaml

kind: Service
metadata
:
  name
: app-dev
spec
:
 
template:
    spec
:
      containers
:
     
- image: app
        resources
:
          limits
:
            cpu
: 1000m
            memory
: 128Mi

deploy-qa.yaml

kind: Service
metadata
:
  name
: app-dev
spec
:
 
template:
    spec
:
      containers
:
     
- image: app

deploy-prod.yaml

apiVersion: serving.knative.dev/v1
kind
: Service
metadata
:
  name
: app-prod
spec
:
 
template:
    spec
:
      containers
:
     
- image: app

Revise o arquivo cloudbuild.yaml com etapas para criar uma imagem de contêiner e criar a versão do Cloud Deploy:

cloudbuild.yaml

steps:
- name: 'gcr.io/k8s-skaffold/pack'
  entrypoint
: 'pack'
  args
: ['build',
         
'--builder=gcr.io/buildpacks/builder',
         
'--publish', '${_REGION}-docker.pkg.dev/${PROJECT_ID}/containers-repo/app:$BUILD_ID']
  id
: Build and package .net app
- name: gcr.io/google.com/cloudsdktool/cloud-sdk:slim
  args
:
     
[
       
"deploy", "releases", "create", "release-$_RELEASE_TIMESTAMP",
       
"--delivery-pipeline", "cloud-run-pipeline",
       
"--region", "${_REGION}",
       
"--images", "app=${_REGION}-docker.pkg.dev/${PROJECT_ID}/containers-repo/app:$BUILD_ID"
     
]
  entrypoint
: gcloud

4. Criar pipeline do Cloud Deploy

Substitua o valor _PROJECT_ID no clouddeploy.yaml:

sed -i "s/_PROJECT_ID/$PROJECT_ID/g" clouddeploy.yaml

Criar o pipeline do Cloud Deploy:

gcloud deploy apply \
 
--file=clouddeploy.yaml \
 
--region=${REGION} \
 
--project=${PROJECT_ID}

Revise o pipeline criado no Cloud Deploy.

5. Criar a imagem do contêiner e criar uma versão

Adicione as permissões de operador do Cloud Deploy à conta de serviço do Cloud Build:

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
   
--member=serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \
   
--role=roles/clouddeploy.operator

gcloud projects add
-iam-policy-binding ${PROJECT_ID} \
   
--member=serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \
   
--role=roles/iam.serviceAccountUser

Crie a imagem do contêiner e a versão do Cloud Deploy:

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

gcloud builds submit
\
 
--config cloudbuild-plus.yaml \
 
--substitutions=_REGION=${REGION},_RELEASE_TIMESTAMP=${RELEASE_TIMESTAMP}

Revise a versão criada no Cloud Deploy. Aguarde a conclusão da implantação no ambiente de desenvolvimento.

6. Promover a versão para ambientes de controle de qualidade e de produção

Use o Console do Cloud ou o Cloud Shell para promover a versão ao próximo destino(qa-env).

Promova a versão com o Cloud Shell e execute o comando gcloud para promover a versão.

gcloud beta deploy releases promote \
   
--release="release-${RELEASE_TIMESTAMP}" \
   
--delivery-pipeline=cloud-run-pipeline \
   
--region=${REGION} \
   
--quiet

Aguarde a conclusão da implantação no ambiente de controle de qualidade. Promova a versão para o próximo destino(prod-env).

gcloud beta deploy releases promote \
   
--release="release-${RELEASE_TIMESTAMP}" \
   
--delivery-pipeline=cloud-run-pipeline \
   
--region=${REGION} \
   
--quiet

Abra o Cloud Deploy no Console do Cloud e aprove a versão para implantação de produção.

4c838b60770e9691.png

Analise o estado do pipeline do Cloud Deploy e as métricas DORA disponíveis (contador de implantações, frequência de implantações e taxa de falha na implantação).

Métrica

Descrição

Número de implantações

O número total de implantações bem-sucedidas e com falha no destino final no pipeline de entrega.

Frequência de implantação

Com que frequência o pipeline de entrega faz implantações no destino final do pipeline de entrega.Uma das quatro métricas principais definidas pelo programa DevOps Research and Assessment (DORA).

Taxa de falha na implantação

A porcentagem de falhas nos lançamentos no destino final no pipeline de entrega.

Revise os aplicativos implantados no Cloud Run:

d6372b5350f10875.png

7. Parabéns!

Parabéns, você concluiu o codelab.

O que aprendemos:

  • Como criar um pipeline do Cloud Deploy
  • Como criar uma imagem de contêiner para o aplicativo .NET com o Cloud Build
  • Como implantar um aplicativo no Cloud Run com o Cloud Deploy
  • Como promover a versão do Cloud Deploy

Limpar

Para evitar cobranças na sua conta do Google Cloud pelos recursos usados no tutorial, exclua o projeto ou mantenha o projeto e exclua cada um dos recursos.

Excluir o projeto

O jeito mais fácil de evitar cobranças é excluindo o projeto que você criou para este tutorial.