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á con 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 versión preliminar se realizó correctamente y funciona como se esperaba, promocionarás manualmente la versión en el clúster Canary. La promoción de la versión en el clúster de producción requerirá aprobación. Deberás aprobar la canalización de producción en la IU de Cloud Deploy y, por último, promocionarla.
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
- Cómo promover una implementación
- Cómo aprobar 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 nuestro entorno necesario para ejecutar este instructivo. Cuando se complete este paso, habremos creado un clúster de GKE en el que podremos ejecutar las implementaciones.
- Establece los valores predeterminados de gcloud config
gcloud config set project <your project>
gcloud config set deploy/region us-central1
- Clonar repositorio
git clone https://github.com/gushob21/software-delivery-workshop
cd software-delivery-workshop/labs/cloud-deploy/
cloudshell workspace .
rm -rf deploy && mkdir deploy
- Configure 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 APIs
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 está configurada como "true". Esto no permitirá la promoción al destino de producción 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 apps
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 e implementaciones automáticas. Los siguientes pasos se consideran parte del proceso de configuración de una app nueva. Cada aplicación nueva tendrá una canalización de implementación configurada.
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 a los que se configura esta canalización de publicación para que se implemente.
targetId
identifica el objetivo específico que se usará para esta etapa de la canalización de publicación. El valor es la propiedad metadata.name de la definición del objetivo.
profiles
es una lista de cero o más nombres de perfiles de Skaffold, de skaffold.yaml. Cloud Deploy usa el perfil con renderización de Skaffold cuando crea la versión.
- Aplicar canalización
gcloud beta deploy apply --file deploy/pipeline.yaml
4. Fase de desarrollo
A medida que se desarrollen las aplicaciones, las cadenas de herramientas de CI/CD automatizadas compilarán y almacenarán los recursos. Los siguientes comandos se ejecutan para compilar la aplicación con skaffold y almacenar recursos para la implementación con Cloud Deploy. Tu proceso de CICD realizaría 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 esté etiquetado para producción, iniciarás el proceso de lanzamiento llamando al comando cloud deploy release
. Más adelante, una vez que se haya validado y aprobado la implementación, trasladarás la versión a los diversos entornos de destino mediante la promoción y aprobación de la acción a través de procesos automatizados o aprobaciones manuales.
Cómo crear una versión
Anteriormente en este instructivo, creamos archivos de Cloud Deploy para comprender cómo funciona esta herramienta. A modo de demostración, creamos los mismos archivos de Cloud Deploy y los enviamos a un repositorio de GitHub con una aplicación de Go de ejemplo. 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 versión preliminar.
- 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 que se muestra 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, puedes revisar detalles adicionales sobre la versión haciendo clic en su nombre en Detalles de la versión, en la parte inferior de la pantalla.
- Verifica que la versión haya implementado correctamente la aplicación. Para ello, 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 en la Web en la parte superior derecha de la pantalla.
- Selecciona Vista previa en el puerto 8080.
Esto te llevará a una página nueva en la que se muestra el mensaje "Hello World!".
- Usa
ctrl+c
en la terminal para finalizar la redirección de puertos.
Promueve una actualización
Ahora que tu versión se implementó en el primer destino (versión preliminar) de la canalización, puedes promocionarla al siguiente destino (versión 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 del lanzamiento
- Ve a la canalización de sample-app en la consola de Google Cloud.
- Confirma que se muestra un contorno verde en el lado izquierdo del cuadro Canary, lo que significa que la versión se implementó en ese entorno.
- Crea un túnel para verificar que la aplicación se haya implementado correctamente
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 en la Web en la parte superior derecha de la pantalla.
- Selecciona Vista previa en el puerto 8080.
Esto te llevará a una página nueva en la que se muestra el mensaje "Hello World!".
- Usa
ctrl+c
en la terminal para finalizar la redirección de puertos.
Cómo aprobar una versión de producción
Recuerda que, cuando creamos el destino de producción a través de prod.yaml, especificamos la etiqueta requireApproval como verdadera. Esto forzará un requisito de aprobación para la promoción en producción.
- 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 que requiere revisión y aprobación.
- Haz clic en el botón “Revisar” que se encuentra debajo del aviso amarillo.
- En la siguiente pantalla, vuelve a hacer clic en "Revisar" para acceder a la pantalla de aprobación para 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 canalización de sample-app, donde 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 siguiendo 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 en la Web en la parte superior derecha de la pantalla.
- Selecciona Vista previa en el puerto 8080.
Esto te llevará a una página nueva en la que se muestra el mensaje "Hello World!".
- Usa
ctrl+c
en la terminal para finalizar la redirección de puertos.