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