Automatiza la promoción de lanzamientos y el avance de los lanzamientos en Cloud Deploy
En esta página, se muestra cómo usar Cloud Deploy para promover automáticamente un lanzamiento a un destino y avanzar un lanzamiento a su siguiente fase.
En esta guía de inicio rápido, harás lo siguiente:
Crea dos clústeres de GKE o dos servicios de Cloud Run.
Crea una configuración de Skaffold y un manifiesto de Kubernetes o una definición de servicio de Cloud Run.
Define tu canalización de entrega de Cloud Deploy y los destinos de implementación.
La canalización se implementará en dos destinos:
devystaging. El destinostagingusa una estrategia de implementación de versiones canary.Define dos reglas de automatización:
Una automatización para promover el lanzamiento al destino
stagingcuando el lanzamiento adevse realice correctamente.Una automatización para avanzar el lanzamiento a la fase
stablecuando se complete correctamente la fasecanary-25.
Crea una versión de la canalización de entrega, que se implementará de forma automática en el destino
dev.Visualiza la canalización de entrega y la versión en la Google Cloud consola de.
Debido a la promoción automatizada, esta versión se promueve automáticamente a
staging.Debido a que el destino
stagingusa una estrategia de implementación de versiones canary y esta es la primera implementación en ese entorno de ejecución, se omite la fasecanary-25. Consulta Por qué a veces se omiten las fases para comprender mejor por qué se omite la fase de versiones canary la primera vez.Debido al avance automático de la fase, el lanzamiento avanza a la fase
stable.
Antes de comenzar
- Accede a tu Google Cloud cuenta de. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Cloud Deploy, Cloud Build, GKE, Cloud Run, and Cloud Storage APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Instala Google Cloud CLI.
-
Si usas un proveedor de identidad externo (IdP), primero debes acceder a la gcloud CLI con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Cloud Deploy, Cloud Build, GKE, Cloud Run, and Cloud Storage APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Instala Google Cloud CLI.
-
Si usas un proveedor de identidad externo (IdP), primero debes acceder a la gcloud CLI con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init - Asegúrate de que la cuenta de servicio predeterminada de Compute Engine tenga los permisos necesarios.
Es posible que la cuenta de servicio ya tenga los permisos necesarios. Estos pasos se incluyen en los proyectos que inhabilitan la asignación automática de roles para las cuentas de servicio predeterminadas.
- Primero, agrega el rol
clouddeploy.jobRunner:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --role="roles/clouddeploy.jobRunner" - Agrega el rol
clouddeploy.releaser:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --role="roles/clouddeploy.releaser" - Agrega el rol de desarrollador para tu entorno de ejecución específico.
- Para GKE:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --role="roles/container.developer" - Para Cloud Run:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --role="roles/run.developer" -
Agrega el rol
iam.serviceAccountUser, que incluye el permisoactAspara que la cuenta de servicio predeterminada se implemente en el entorno de ejecución:gcloud iam service-accounts add-iam-policy-binding $(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --role="roles/iam.serviceAccountUser" \ --project=PROJECT_ID -
Agrega el rol
iam.serviceAccountUser, incluido el permisoactAspara ti, para usar la cuenta de servicio predeterminada:gcloud iam service-accounts add-iam-policy-binding $(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --member=user:YOUR_EMAIL_ADDRESS \ --role="roles/iam.serviceAccountUser" \ --project=PROJECT_IDEn este caso, YOUR_EMAIL_ADDRESS es la dirección de correo electrónico que usas para acceder a Google Cloud.
- Primero, agrega el rol
Si ya tienes instalada la CLI, asegúrate de ejecutar la versión más reciente:
gcloud components update
Crea tus entornos de ejecución
Si realizas la implementación en Cloud Run, puedes omitir este comando.
Para GKE, crea dos clústeres: automation-quickstart-cluster-dev y automation-quickstart-cluster-staging, con la configuración predeterminada. Se debe poder acceder a los extremos de la API de Kubernetes de los clústeres desde la Internet pública. Los clústeres de GKE son accesibles de forma externa de forma predeterminada.
gcloud container clusters create-auto automation-quickstart-cluster-dev \
--project=PROJECT_ID \
--region=us-central1 \
&& gcloud container clusters create-auto automation-quickstart-cluster-staging \
--project=PROJECT_ID \
--region=us-central1
Obtén el número de tu proyecto
Necesitas el número de tu proyecto para identificar la cuenta de servicio predeterminada. Esto es necesario para configurar el recurso de automatización.
Ejecuta el siguiente comando para obtener el número de tu proyecto:
gcloud projects describe PROJECT_ID --format="value(projectNumber)"Copia el número del proyecto del resultado de la línea de comandos y pégalo aquí.
No es necesario que ejecutes este comando. Si lo pegas aquí, se propagará la referencia de la cuenta de servicio en la configuración de automatización más adelante en esta guía de inicio rápido.
PROJECT_NUMBER
Prepara la configuración de Skaffold y el manifiesto de la aplicación
Cloud Deploy usa Skaffold para proporcionar los detalles sobre qué implementar y cómo hacerlo de forma correcta para tus destinos por separado por separado.
En esta guía de inicio rápido, crearás un archivo skaffold.yaml, que identifica el manifiesto de la aplicación que se usará para implementar la app de ejemplo.
Abre una ventana de terminal.
Crea un directorio nuevo y navega hasta él.
GKE
mkdir deploy-automation-gke-quickstart cd deploy-automation-gke-quickstartCloud Run
mkdir deploy-automation-run-quickstart cd deploy-automation-run-quickstartCrea un archivo llamado
skaffold.yamlcon el siguiente contenido:GKE
apiVersion: skaffold/v4beta7 kind: Config metadata: name: gke-automation manifests: rawYaml: - k8s-deployment.yaml deploy: kubectl: {}Cloud Run
apiVersion: skaffold/v4beta7 kind: Config metadata: name: run-automation profiles: - name: dev manifests: rawYaml: - run-dev.yaml - name: staging manifests: rawYaml: - run-staging.yaml deploy: cloudrun: {}Este archivo es una configuración mínima de Skaffold. En esta guía de inicio rápido, crearás el archivo. Sin embargo, también puedes hacer que Cloud Deploy cree uno por ti, para aplicaciones simples que no sean de producción.
Consulta la
skaffold.yamlreferencia para obtener más información sobre este archivo.Crea la definición de tu aplicación: un par de definiciones de servicio para Cloud Run o un manifiesto de Kubernetes para GKE.
GKE
Crea un archivo llamado
k8s-deployment.yamlcon el siguiente contenido:apiVersion: apps/v1 kind: Deployment metadata: name: my-deployment labels: app: my-app namespace: default spec: replicas: 1 selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: containers: - name: nginx image: my-app-image --- apiVersion: v1 kind: Service metadata: name: my-service namespace: default spec: selector: app: my-app ports: - protocol: TCP port: 80Este archivo es un manifiesto simple de Kubernetes que se usa para implementar la aplicación. La imagen de contenedor que se implementará se establece aquí como un marcador de posición,
my-app-image, que se reemplaza por la imagen específica cuando creas la versión.Cloud Run
Crea un archivo llamado
run-dev.yamlcon el siguiente contenido:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: my-automation-run-service-dev spec: template: spec: containers: - image: my-app-imageCrea un archivo llamado
run-staging.yamlcon el siguiente contenido:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: my-automation-run-service-staging spec: template: spec: containers: - image: my-app-image
Estos archivos son definiciones de servicio simples de Cloud Run que se usan para implementar la aplicación. La imagen de contenedor que se implementará se establece aquí como un marcador de posición,
my-app-image, que se reemplaza por la imagen específica cuando creas la versión.
Crea tu canalización de entrega, destinos y automatización
Puedes definir tu canalización de entrega y los destinos en un archivo o en archivos separados. También puedes definir una acción de automatización en un archivo separado. En esta guía de inicio rápido, se usa un archivo para la canalización, los destinos y la automatización.
Crea tu canalización de entrega, las definiciones de destino y la acción de automatización:
GKE
En el directorio
deploy-automation-gke-quickstart, crea un archivo nuevo:clouddeploy.yaml, con el siguiente contenido:apiVersion: deploy.cloud.google.com/v1 kind: DeliveryPipeline metadata: name: my-automation-demo-app-1 description: Automation demonstration pipeline serialPipeline: stages: - targetId: automation-quickstart-dev - targetId: automation-quickstart-staging profiles: [] strategy: canary: runtimeConfig: kubernetes: serviceNetworking: service: "my-service" deployment: "my-deployment" canaryDeployment: percentages: [25] verify: false --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: automation-quickstart-dev description: Dev cluster to demonstrate deploy automation gke: cluster: projects/PROJECT_ID/locations/us-central1/clusters/automation-quickstart-cluster-dev --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: automation-quickstart-staging description: Staging cluster to demonstrate deploy automation gke: cluster: projects/PROJECT_ID/locations/us-central1/clusters/automation-quickstart-cluster-staging --- apiVersion: deploy.cloud.google.com/v1 kind: Automation metadata: name: my-automation-demo-app-1/promote description: promotes a release suspended: false serviceAccount: PROJECT_NUMBER-compute@developer.gserviceaccount.com selector: targets: - id: automation-quickstart-dev rules: - promoteReleaseRule: id: "promote-release" wait: 1m destinationTargetId: "@next" --- apiVersion: deploy.cloud.google.com/v1 kind: Automation metadata: name: my-automation-demo-app-1/advance description: advances a rollout suspended: false serviceAccount: PROJECT_NUMBER-compute@developer.gserviceaccount.com selector: targets: - id: automation-quickstart-staging rules: - advanceRolloutRule: id: "advance-rollout" sourcePhases: ["canary-25"] wait: 1mCloud Run
En el directorio
deploy-automation-run-quickstart, crea un archivo nuevo:clouddeploy.yaml, con el siguiente contenido:apiVersion: deploy.cloud.google.com/v1 kind: DeliveryPipeline metadata: name: my-automation-demo-app-1 description: Automation demonstration pipeline serialPipeline: stages: - targetId: automation-quickstart-dev profiles: [dev] - targetId: automation-quickstart-staging profiles: [staging] strategy: canary: runtimeConfig: cloudRun: automaticTrafficControl: true canaryDeployment: percentages: [25] verify: false --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: automation-quickstart-dev description: Dev cluster to demonstrate deploy automation run: location: projects/PROJECT_ID/locations/us-central1 --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: automation-quickstart-staging description: Staging cluster to demonstrate deploy automation run: location: projects/PROJECT_ID/locations/us-central1 --- apiVersion: deploy.cloud.google.com/v1 kind: Automation metadata: name: my-automation-demo-app-1/promote description: Promotes a release to the next target suspended: false serviceAccount: PROJECT_NUMBER-compute@developer.gserviceaccount.com selector: targets: - id: automation-quickstart-dev rules: - promoteReleaseRule: id: "promote-release" wait: 1m destinationTargetId: "@next" --- apiVersion: deploy.cloud.google.com/v1 kind: Automation metadata: name: my-automation-demo-app-1/advance description: advances a rollout suspended: false serviceAccount: PROJECT_NUMBER-compute@developer.gserviceaccount.com selector: targets: - id: automation-quickstart-staging rules: - advanceRolloutRule: id: "advance-rollout" sourcePhases: ["canary-25"] wait: 1mRegistra tu canalización y tus destinos con el servicio de Cloud Deploy:
gcloud deploy apply --file=clouddeploy.yaml --region=us-central1 --project=PROJECT_IDAhora tienes una canalización, con un destino múltiple que comprende dos destinos de GKE o Cloud Run, lista para implementar tu aplicación.
Confirma tu canalización y tus destinos:
En la Google Cloud consola, navega a la página Canalizaciones de entrega de Cloud Deploy para ver una lista de las canalizaciones de entrega disponibles.
Abrir la página Canalizaciones de entrega
Se muestra la canalización de entrega que acabas de crear, con dos destinos enumerados en la columna Destinos.

Haz clic en el nombre de la canalización para abrir la visualización y los detalles de la canalización de entrega.
Selecciona la pestaña Automatizaciones en Detalles de la canalización de entrega.
Se muestran las dos automatizaciones que creaste.

Crea una versión
Una versión es el recurso central de Cloud Deploy que representa los cambios que se implementan. La canalización de entrega define el ciclo de vida de esa versión. Consulta Arquitectura del servicio de Cloud Deploy para obtener detalles sobre ese ciclo de vida.
GKE
Ejecuta el siguiente comando desde el directorio deploy-automation-gke-quickstart
para crear un recurso release que represente la imagen de contenedor
que se implementará:
gcloud deploy releases create test-release-001 \
--project=PROJECT_ID \
--region=us-central1 \
--delivery-pipeline=my-automation-demo-app-1 \
--images=my-app-image=gcr.io/google-containers/nginx@sha256:f49a843c290594dcf4d193535d1f4ba8af7d56cea2cf79d1e9554f077f1e7aaa
Observa la marca --images= flag, que usas para reemplazar el marcador de posición (my-app-image)
en el
manifiesto
por la imagen específica calificada por SHA. Google recomienda que uses plantillas en tus manifiestos de esta manera y que uses nombres de imágenes calificados por SHA cuando crees la versión.
Cloud Run
Ejecuta el siguiente comando desde el directorio deploy-automation-run-quickstart
para crear un recurso release que represente la imagen de contenedor
que se implementará:
gcloud deploy releases create test-release-001 \
--project=PROJECT_ID \
--region=us-central1 \
--delivery-pipeline=my-automation-demo-app-1 \
--images=my-app-image=us-docker.pkg.dev/cloudrun/container/hello@sha256:95ade4b17adcd07623b0a0c68359e344fe54e65d0cb01b989e24c39f2fcd296a
Observa la
--images= marca,
que usas para reemplazar el marcador de posición (my-app-image) en la
definición de servicio
por la imagen específica calificada por SHA. Google recomienda que uses plantillas en tus definiciones de servicio y trabajo de esta manera y que uses nombres de imágenes calificados por SHA cuando crees la versión.
De forma predeterminada, cuando creas una versión, se crea automáticamente un lanzamiento para el primer destino de tu canalización.
Debido a que esta guía de inicio rápido incluye dos automatizaciones, suceden dos cosas automáticamente:
Después de una implementación correcta en el primer destino, la versión se promueve automáticamente al segundo destino.
Hay un tiempo de espera de un minuto en la automatización de promoción.
En el segundo destino, en el que se configura una versión canary del 25%, la segunda automatización avanza el lanzamiento de
canary-25astable.Para esta primera versión, se omite la fase
canary-25, ya que no hay una versión preexistente de la app para realizar la prueba canary. El lanzamiento avanza automáticamente astable.Hay una demora de un minuto en la automatización de avance.
Cuando todo finalice, la aplicación se implementará correctamente en ambos destinos sin que tengas que hacer nada más.
Si deseas obtener más información para ejecutar una estrategia de implementación de versiones canary, puedes probar la guía de inicio rápido de versiones canary.
Visualiza los resultados en la consola de Google Cloud
Puedes ver los resultados, incluidas las ejecuciones de automatización, en la Google Cloud consola.
Navega a la página Canalizaciones de entrega de Cloud Deploy para ver tu canalización de entrega.
Haz clic en el nombre de tu canalización de entrega “my-automation-demo-app-1”.
La visualización de la canalización muestra el estado de implementación de la app. Si transcurrió el tiempo suficiente, ambos destinos se mostrarán en verde.

Y la versión aparece en la pestaña Versiones en Detalles de la canalización de entrega.
Haz clic en la pestaña Ejecuciones de automatización.
Hay dos entradas, una para cada una de las dos automatizaciones que creaste. Puedes hacer clic en cualquiera de ellas para ver los detalles de esa ejecución de automatización.

Limpia
Sigue estos pasos para evitar que se apliquen cargos a tu Google Cloud cuenta de por los recursos que usaste en esta página.
Borra los clústeres de GKE o los servicios de Cloud Run:
GKE
gcloud container clusters delete automation-quickstart-cluster-dev --region=us-central1 --project=PROJECT_ID \ && gcloud container clusters delete automation-quickstart-cluster-staging --region=us-west1 --project=PROJECT_IDCloud Run
gcloud run services delete my-automation-run-service-dev --region=us-central1 --project=PROJECT_ID \ && gcloud run services delete my-automation-run-service-staging --region=us-central1 --project=PROJECT_IDBorra la canalización de entrega, los destinos, las automatizaciones, la versión y los lanzamientos:
gcloud deploy delete --file=clouddeploy.yaml --force --region=us-central1 --project=PROJECT_IDBorra los buckets de Cloud Storage que creó Cloud Deploy.
Uno termina con
_clouddeployy el otro es[region].deploy-artifacts.[project].appspot.com.
Eso es todo, finalizaste la guía de inicio rápido.