Cómo realizar el lanzamiento con Cloud Deploy

1. Objetivos

En este instructivo, crearás tres clústeres de GKE llamados preview, canary y prod. Luego, crea 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 Deploy que creará una 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 según lo esperado, deberás promover la versión de forma manual en el clúster de la versión 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, promoverla.

Los objetivos de este instructivo se pueden dividir en los siguientes pasos:

  • Prepara tu lugar de trabajo
  • Define los destinos de Cloud Deploy
  • Define una canalización de Cloud Deploy
  • Crea una versión
  • Asciende una implementación
  • Cómo aprobar una versión de producción

Configuración del entorno de autoaprendizaje

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • 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.
  1. 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

Preparando tu espacio de trabajo

Configuraremos el entorno aquí, necesario para ejecutar este instructivo. Cuando se complete este paso, crearemos un clúster de GKE en el que podamos ejecutar las implementaciones.

  1. Establece los valores predeterminados de la configuración de gcloud

gcloud config set project <your project>

gcloud config set deploy/region us-central1

  1. Clonar 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

  1. 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)")

  1. Habilita las APIs

gcloud services enable \

cloudresourcemanager.googleapis.com \

    `container.googleapis.com \`

    `cloudbuild.googleapis.com \`

    `containerregistry.googleapis.com \`

    `secretmanager.googleapis.com \`

    `clouddeploy.googleapis.com` 
  1. 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 objetivos de Cloud Deploy

  1. Crea un archivo en el directorio de implementación llamado preview.yaml con el siguiente comando en cloudshell:

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.
  1. Crea un archivo en el directorio de implementación llamado canary.yaml con el siguiente comando en cloudshell:

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

  1. Crea un archivo en el directorio de implementación llamado prod.yaml con el siguiente comando en cloudshell:

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 que la etiqueta requiredApproval está configurada como verdadera. Esto no permitirá el ascenso al destino de producción hasta que se otorgue la aprobación. Necesitas el rol roles/clouddeploy.approver para aprobar una versión.

  1. Crea los objetivos 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 nueva aplicación, la canalización de CI/CD suele configurarse para realizar compilaciones automáticas, implementaciones y pruebas de integración. 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 una canalización de Cloud Deploy

  1. Crea un archivo en el directorio de implementación llamado pipeline.yaml con el siguiente comando en cloudshell:

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 etapas que es una lista de todos los destinos en los que se configuró esta canalización de entrega para su implementación.

targetId identifica el destino específico que se debe usar para esta etapa de la canalización de entrega. El valor es la propiedad metadata.name de la definición del destino.

profiles es una lista de cero o más nombres de perfil de Skaffold, de skaffold.yaml. Cloud Deploy usa el perfil con la renderización de Skaffold cuando crea la versión.

  1. Aplica la 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 automatizadas de CI/CD compilarán y almacenarán recursos. Los siguientes comandos se ejecutan para compilar la aplicación con Skaffold y almacenar recursos para su implementación con Cloud Deploy. Este paso lo realizará tu proceso de CI/CD para cada compilación de la aplicación.

  1. 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 CI/CD, por lo general, cuando el código esté etiquetado para producción, iniciarás el proceso de lanzamiento mediante una llamada al comando cloud deploy release. Más adelante, una vez que la implementación se haya validado y aprobado, deberás mover la versión por los diversos 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

En este instructivo, ya creamos archivos de Cloud Deploy para comprender cómo funciona. Para la demostración, creamos los mismos archivos de Cloud Deploy y los enviamos a un repositorio de GitHub con una aplicación de muestra de Go. Usaremos Cloud Deploy para realizar el lanzamiento de 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 de vista previa.

  1. Ve a <Cloud Deploy>. en la consola de Google Cloud
  2. Haz clic en “sample-app”.

En esta pantalla, verás una representación gráfica de tu canalización.

  1. Confirma que aparece un contorno verde a la izquierda del cuadro de vista previa, lo que significa que la versión se implementó en ese entorno.
  2. De manera opcional, puedes revisar los detalles adicionales de la versión. Para ello, haz clic en el nombre de la versión en Detalles de la versión, en la sección inferior de la pantalla.
  3. Verifica que la versión haya implementado correctamente la aplicación y ejecuta el comando siguiente cloushell

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

  1. Haz clic en el ícono de vista previa en la Web ubicado en la esquina superior derecha de la pantalla.
  2. Selecciona Vista previa en el puerto 8080

Esto te llevará a una nueva página que muestra el mensaje "Hello World!".

  1. 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 (vista previa) de la canalización, puedes ascenderla 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 del lanzamiento

  1. Ve a la canalización de app de ejemplo en la consola de Google Cloud.
  2. Confirma que aparece un contorno verde a la izquierda del cuadro de Canary, lo que significa que la versión se implementó en ese entorno.
  3. Verifica que la aplicación se haya implementado correctamente creando un túnel para 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

  1. Haz clic en el ícono de vista previa en la Web ubicado en la esquina superior derecha de la pantalla.
  2. Selecciona Vista previa en el puerto 8080

Esto te llevará a una nueva página que muestra el mensaje "Hello World!".

  1. Usa ctrl+c en la terminal para finalizar la redirección de puertos.

Aprueba una versión de producción

Recuerda que cuando creamos el destino de producción a través de prod.yaml, especificamos la etiqueta requiredApproval como verdadera. Esto forzará un requisito de aprobación para la promoción en producción.

  1. Usa el siguiente comando para promover el lanzamiento Canary a producción

gcloud beta deploy releases promote \

--release=sample-app-release-${REL_TIMESTAMP} \

--delivery-pipeline=sample-app \

--quiet

  1. Ve a la canalización de app de ejemplo en la consola de Google Cloud.
  2. 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.

  1. Haz clic en el vínculo “Revisar” debajo del aviso amarillo.
  2. En la siguiente pantalla, haz clic en "Revisar". nuevamente para acceder a la pantalla de aprobación de producción
  3. De forma opcional, revisa las diferencias del manifiesto para revisar los cambios. En este caso, un archivo completamente nuevo.
  4. Haz clic en "Aprobar". botón
  5. Regresa a la página de la canalización de app de ejemplo, en la que verás la versión a 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. Para ello, sigue los pasos que se indican a continuación.

  1. Ejecuta el siguiente comando en cloudshell 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

  1. Haz clic en el ícono de vista previa en la Web ubicado en la esquina superior derecha de la pantalla.
  2. Selecciona Vista previa en el puerto 8080

Esto te llevará a una nueva página que muestra el mensaje "Hello World!".

  1. Usa ctrl+c en la terminal para finalizar la redirección de puertos.