1. Descripción general
En este lab, implementarás una aplicación .Net en Cloud Run con Cloud Deploy. Compilarás una imagen de contenedor con Cloud Build sin usar Dockerfile. Con Cloud Deploy, configurarás una canalización con tres entornos de destino y seguirás los pasos para promocionar la versión a través de los entornos. Por último, aprobarás la versión que se implementará en el entorno de producción.
¿Qué es Cloud Build?
Con Cloud Build, puedes compilar software con rapidez en todos los lenguajes de programación.
¿Qué es Cloud Deploy?
Cloud Deploy es un servicio de entrega continua completamente administrado. Con Cloud Deploy, puedes crear canalizaciones de implementación para GKE, Anthos y Cloud Run.
¿Qué es Cloud Run?
Con Cloud Run, puedes implementar aplicaciones alojadas en contenedores escalables escritas en cualquier lenguaje (como Go, Python, Java, Node.js, .NET y Ruby) en una plataforma completamente administrada.
¿Qué es Skaffold?
Skaffold es una herramienta de línea de comandos que permite el desarrollo continuo para aplicaciones nativas de Kubernetes. Cloud Deploy usa Skaffold para las operaciones de renderización e implementación.
Qué aprenderás
En este lab, aprenderás a realizar las siguientes tareas:
- Crea una canalización de Cloud Deploy
- Crea una imagen de contenedor para la aplicación .Net con Cloud Build sin usar Dockerfile
- Implementa la aplicación en Cloud Run con Cloud Deploy
- Cómo promocionar versiones de Cloud Deploy
Requisitos previos
- Para este lab, se da por sentado que el usuario tiene conocimientos previos sobre los entornos de shell y la consola de Cloud.
2. Configuración y requisitos
Configuración del proyecto de Cloud
- Accede a Google Cloud Console y crea un proyecto nuevo o reutiliza uno existente. Si aún no tienes una cuenta de Gmail o de Google Workspace, debes crear una.
- El Nombre del proyecto es el nombre visible de los participantes de este proyecto. Es una cadena de caracteres que no se utiliza en las APIs de Google. Puedes actualizarla en cualquier momento.
- El ID del proyecto es único en todos los proyectos de Google Cloud y es inmutable (no se puede cambiar después de configurarlo). La consola de Cloud genera automáticamente una cadena única. Por lo general, no importa cuál sea. En la mayoría de los codelabs, deberás hacer referencia al ID del proyecto (suele identificarse como
PROJECT_ID
). Si no te gusta el ID que se generó, podrías generar otro aleatorio. También puedes probar uno propio y ver si está disponible. No se puede cambiar después de este paso y se mantendrá durante todo el proyecto. - Recuerda que hay un tercer valor, un número de proyecto, que usan algunas APIs. Obtén más información sobre estos tres valores en la documentación.
- A continuación, deberás habilitar la facturación en la consola de Cloud para usar las APIs o los recursos de Cloud. Ejecutar este codelab no debería costar mucho, tal vez nada. Para cerrar recursos y evitar que se generen cobros más allá de este instructivo, puedes borrar los recursos que creaste o borrar todo el proyecto. Los usuarios nuevos de Google Cloud son aptos para participar en el programa Prueba gratuita de USD 300.
Configuración del entorno
Para activar Cloud Shell, haz clic en el ícono que se encuentra a la derecha de la barra de búsqueda.
En Cloud Shell, ejecuta el siguiente comando para establecer las variables de entorno del proyecto:
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID \
--format='value(projectNumber)')
export REGION=us-central1
Habilita las API:
gcloud services enable \
run.googleapis.com \
cloudbuild.googleapis.com \
clouddeploy.googleapis.com \
artifactregistry.googleapis.com
Crea un repositorio de Artifact Registry para almacenar imágenes de contenedores de aplicaciones:
gcloud artifacts repositories create containers-repo \
--repository-format=docker \
--location=${REGION} \
--description="Containers repository"
3. Revisa los archivos de configuración
Clona el código fuente de la aplicación:
git clone https://github.com/gitrey/deploy-cloudrun-app-with-clouddeploy.git
cd deploy-cloudrun-app-with-clouddeploy
Revisa la configuración de la canalización de 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
Revisa el archivo skaffold.yaml
que define tres entornos y usa Cloud Run como servicio 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: {}
Revisa los archivos de configuración del servicio.
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
Revisa el archivo cloudbuild.yaml
con los pasos para compilar una imagen de contenedor y crear una versión de 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. Crea una canalización de Cloud Deploy
Reemplaza el valor de _PROJECT_ID en clouddeploy.yaml:
sed -i "s/_PROJECT_ID/$PROJECT_ID/g" clouddeploy.yaml
Crea la canalización de Cloud Deploy:
gcloud deploy apply \
--file=clouddeploy.yaml \
--region=${REGION} \
--project=${PROJECT_ID}
Revisa la canalización creada en Cloud Deploy.
5. Compila la imagen de contenedor y crea una versión
Agrega permisos de operador de Cloud Deploy a la cuenta de servicio de 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
Crea la imagen de contenedor y la versión de 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}
Revisa la versión creada en Cloud Deploy. Espera a que se complete la implementación en el entorno de dev.
6. Cómo promocionar la versión a los entornos de QA y PROD
Con Cloud Console o Cloud Shell, promociona la versión al siguiente destino(qa-env).
Promociona la versión con Cloud Shell y ejecuta el comando gcloud para promocionarla.
gcloud beta deploy releases promote \
--release="release-${RELEASE_TIMESTAMP}" \
--delivery-pipeline=cloud-run-pipeline \
--region=${REGION} \
--quiet
Espera a que se complete la implementación en el entorno de QA. Se promueve la versión al siguiente destino(prod-env).
gcloud beta deploy releases promote \
--release="release-${RELEASE_TIMESTAMP}" \
--delivery-pipeline=cloud-run-pipeline \
--region=${REGION} \
--quiet
Abre Cloud Deploy en la consola de Cloud y aprueba la versión para la implementación en producción.
Revisa el estado de la canalización de Cloud Deploy y las métricas de DORA disponibles ("cantidad de implementaciones", "frecuencia de implementaciones", "tasa de fallas de implementación").
Métrica | Descripción |
Cantidad de implementaciones | Es la cantidad total de implementaciones exitosas y fallidas en el destino final de tu canalización de entrega. |
Frecuencia de implementación | Es la frecuencia con la que la canalización de entrega se implementa en el objetivo final de tu canalización de entrega.Una de las cuatro métricas clave que se definen en el programa de DevOps Research and Assessment (DORA). |
Tasa de fallas de implementación | Es el porcentaje de lanzamientos con errores en el objetivo final de tu canalización de entrega. |
Revisa las aplicaciones implementadas en Cloud Run:
7. ¡Felicitaciones!
¡Felicitaciones! Completaste el codelab.
Temas abordados:
- Cómo crear una canalización de Cloud Deploy
- Cómo crear una imagen de contenedor para la aplicación .Net con Cloud Build
- Cómo implementar una aplicación en Cloud Run con Cloud Deploy
- Cómo promocionar la versión de Cloud Deploy
Limpia
Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.
Borra el proyecto
La manera más fácil de eliminar la facturación es borrar el proyecto que creaste para el instructivo.