1. Objetivos
En este instructivo, crearás tres clústeres de GKE llamados preview, canary y prod. Luego, crearás un destino de Cloud Deploy correspondiente a cada clúster y una canalización de Cloud Deploy que definirá la secuencia de pasos para realizar la implementación en esos destinos.
El flujo de implementación se activará mediante una canalización de Cloud Build que creará la versión de Cloud Deploy y realizará la implementación en el clúster de vista previa. Después de verificar que la implementación en la vista previa se realizó correctamente y funciona como se espera, promoverás manualmente la versión en el clúster canary. La promoción de la versión en el clúster prod requerirá aprobación. Aprobarás la canalización de prod en la IU de Cloud Deploy y, por último, la promoverás.
Los objetivos de este instructivo se pueden dividir en los siguientes pasos:
- Prepara tu espacio de trabajo
- Define los destinos de Cloud Deploy
- Define la canalización de Cloud Deploy
- Crea una versión
- Promueve una implementación
- Aprueba una versión de producción
Configuración del entorno de autoaprendizaje
- 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 string de caracteres que no se utiliza en las API de Google y se puede actualizar en cualquier momento.
- El ID del proyecto debe ser único en todos los proyectos de Google Cloud y es inmutable (no se puede cambiar después de configurarlo). Cloud Console genera automáticamente una string única, que, por lo general, no importa cuál sea. En la mayoría de los codelabs, debes hacer referencia al ID del proyecto (suele ser
PROJECT_ID). Por lo tanto, si no te gusta, genera otro aleatorio o prueba con uno propio y comprueba si está disponible. Después de crear el proyecto, este ID se “congela” y no se puede cambiar. - Además, hay un tercer valor, el Número de proyecto, que usan algunas API. Obtén más información sobre estos tres valores en la documentación.
- A continuación, deberás habilitar la facturación en Cloud Console para usar las API o los recursos de Cloud. Ejecutar este codelab no debería costar mucho, tal vez nada. Si quieres cerrar los recursos para no se te facture más allá de este instructivo, sigue las instrucciones de “limpieza” que se encuentran al final del codelab. Los usuarios nuevos de Google Cloud son aptos para participar en el programa Prueba gratuita de USD 300.
2. Configuración de la plataforma
Prepara tu espacio de trabajo
Aquí configuraremos el entorno necesario para ejecutar este instructivo. Cuando se complete este paso, se creará un clúster de GKE en el que podremos ejecutar las implementaciones.
- Establece los valores predeterminados de la configuración de gcloud
gcloud config set project <your project>
gcloud config set deploy/region us-central1
- Clone el repositorio
git clone https://github.com/gushob21/software-delivery-workshop
cd software-delivery-workshop/labs/cloud-deploy/
cloudshell workspace .
rm -rf deploy && mkdir deploy
- Configura las variables de entorno
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects list --filter="$PROJECT_ID" --format="value(PROJECT_NUMBER)")
- Habilita las API
gcloud services enable \
cloudresourcemanager.googleapis.com \
`container.googleapis.com \`
`cloudbuild.googleapis.com \`
`containerregistry.googleapis.com \`
`secretmanager.googleapis.com \`
`clouddeploy.googleapis.com`
- Crea clústeres de 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
Define los destinos de Cloud Deploy
- Crea un archivo en el directorio de implementación llamado preview.yaml con el siguiente comando en Cloud Shell:
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.
- Crea un archivo en el directorio de implementación llamado canary.yaml con el siguiente comando en Cloud Shell:
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
- Crea un archivo en el directorio de implementación llamado prod.yaml con el siguiente comando en Cloud Shell:
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
Observa la etiqueta requireApproval, que se establece en true. Esto no permitirá la promoción al destino de prod hasta que se otorgue la aprobación. Necesitas el rol roles/clouddeploy.approver para aprobar una versión.
- Crea los destinos de implementación
`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. Creación de la app
Como parte de la creación de una aplicación nueva, la canalización de CICD suele configurarse para realizar compilaciones, pruebas de integración y, también, implementaciones automáticas. Los siguientes pasos se consideran parte del proceso de configuración de una app nueva. Cada aplicación nueva tendrá configurada una canalización de implementación.
Define la canalización de Cloud Deploy
- Crea un archivo en el directorio de implementación llamado pipeline.yaml con el siguiente comando en Cloud Shell:
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.
La etiqueta serialPipeline contiene una etiqueta llamada stages, que es una lista de todos los destinos en los que se configura esta canalización de entrega para la implementación.
targetId identifica el destino específico que se usará para esta etapa de la canalización de entrega. El valor es la propiedad metadata.name de la definición de destino.
profiles es una lista de cero o más nombres de perfiles de Skaffold, de skaffold.yaml. Cloud Deploy usa el perfil con skaffold render cuando crea la versión.
- Aplica la canalización
gcloud beta deploy apply --file deploy/pipeline.yaml
4. Fase de desarrollo
A medida que se desarrollan las aplicaciones, las cadenas de herramientas de CICD automatizadas compilan y almacenan recursos. Se ejecutan los siguientes comandos para compilar la aplicación con Skaffold y almacenar recursos para la implementación con Cloud Deploy. Tu proceso de CICD realizará este paso para cada compilación de la aplicación.
- Compila y almacena la aplicación con Skaffold
skaffold build \
--file-output=artifacts.json \
--default-repo gcr.io/$PROJECT_ID \
--push=true
5. Fase de lanzamiento
Al final del proceso de CICD, por lo general, cuando el código se etiqueta para la producción, llamarás al comando cloud deploy release para iniciar el proceso de lanzamiento. Más adelante, una vez que se haya validado y aprobado la implementación, moverás la versión a través de los distintos entornos de destino mediante la promoción y la aprobación de la acción a través de procesos automatizados o aprobaciones manuales.
Crea una versión
Anteriormente, en este instructivo, creamos archivos de Cloud Deploy para comprender cómo funciona Cloud Deploy. Para los fines de la demostración, creamos los mismos archivos de Cloud Deploy y los enviamos a un repositorio de GitHub con una aplicación de Go de muestra. Usaremos Cloud Deploy para lanzar esa aplicación.
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}"
Revisa la versión
Cuando se crea una versión de Cloud Deploy, se lanza automáticamente en el primer destino, que es la vista previa.
- Ve a <Cloud Deploy> en la consola de Google Cloud.
- Haz clic en “sample-app”.
En esta pantalla, verás una representación gráfica de tu canalización.
- Confirma un contorno verde en el lado izquierdo del cuadro de vista previa, lo que significa que la versión se implementó en ese entorno.
- De manera opcional, revisa los detalles adicionales sobre la versión haciendo clic en el nombre de la versión en Detalles de la versión, en la sección inferior de la pantalla.
- Para verificar que la versión implementó correctamente la aplicación, ejecuta el siguiente comando en Cloud Shell.
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
- Haz clic en el ícono de vista previa web en la parte superior derecha de la pantalla.
- Selecciona Vista previa en el puerto 8080.
Esto te llevará a una página nueva que muestra el mensaje “Hello World!”.
- Usa
ctrl+cen la terminal para finalizar la redirección de puertos.
Promueve una actualización
Ahora que tu versión se implementó en el primer destino (vista previa) de la canalización, puedes promoverla al siguiente destino (canary). Ejecuta el siguiente comando para comenzar el proceso.
gcloud beta deploy releases promote \
--release=sample-app-release-${REL_TIMESTAMP} \
--delivery-pipeline=sample-app \
--quiet
Revisa la promoción de la versión
- Ve a la canalización sample-app en la consola de Google Cloud.
- Confirma un contorno verde en el lado izquierdo del cuadro de Canary, lo que significa que la versión se implementó en ese entorno.
- Para verificar que la aplicación se implementó correctamente, crea un túnel hacia ella.
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
- Haz clic en el ícono de vista previa web en la parte superior derecha de la pantalla.
- Selecciona Vista previa en el puerto 8080.
Esto te llevará a una página nueva que muestra el mensaje “Hello World!”.
- Usa
ctrl+cen la terminal para finalizar la redirección de puertos.
Aprueba una versión de producción
Recuerda que, cuando creamos el destino de prod a través de prod.yaml, especificamos la etiqueta requireApproval como true. Esto forzará un requisito de aprobación para la promoción en prod.
- Promueve la versión canary a producción con el siguiente comando.
gcloud beta deploy releases promote \
--release=sample-app-release-${REL_TIMESTAMP} \
--delivery-pipeline=sample-app \
--quiet
- Ve a la canalización sample-app en la consola de Google Cloud.
- Observa el indicador amarillo que indica “1 pendiente”.
Este mensaje indica que hay una versión en cola para la implementación en producción, pero requiere revisión y aprobación.
- Haz clic en el botón “Revisar” justo debajo del aviso amarillo.
- En la siguiente pantalla, vuelve a hacer clic en “Revisar” para acceder a la pantalla de aprobación de producción.
- De manera opcional, revisa la diferencia del manifiesto para revisar los cambios. En este caso, un archivo completamente nuevo.
- Haz clic en el botón “Aprobar”.
- Regresa a la página de la canalización sample-app, en la que verás la versión en producción en curso.
Revisa la versión de producción
Al igual que con los otros entornos, puedes revisar la implementación cuando se complete con los pasos que se indican a continuación.
- Ejecuta el siguiente comando en Cloud Shell para crear la redirección de puertos.
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
- Haz clic en el ícono de vista previa web en la parte superior derecha de la pantalla.
- Selecciona Vista previa en el puerto 8080.
Esto te llevará a una página nueva que muestra el mensaje “Hello World!”.
- Usa
ctrl+cen la terminal para finalizar la redirección de puertos.