Desarrolla y entrega apps con Cloud Code, Cloud Build, Google Cloud Deploy y GKE

Fecha de actualización: 18 de noviembre de 2022

En este instructivo, se describe cómo configurar y usar un sistema de desarrollo, integración continua (CI) y entrega continua (CD) mediante un conjunto integrado de herramientas de Google Cloud. Puedes usar este sistema para desarrollar y también implementar aplicaciones en Google Kubernetes Engine (GKE).

Este instructivo está dirigido a desarrolladores y operadores de software, y tendrás que cumplir ambos roles a medida que lo completes. Primero, actuarás como operador para configurar la canalización de CI/CD. Los componentes principales de esta canalización son Cloud Build, Artifact Registry y Google Cloud Deploy.

Luego, actuarás como desarrollador para cambiar una aplicación con Cloud Code. Cuando actúas como desarrollador, ves la experiencia integrada que proporciona esta canalización.

Por último, actúas como operador y sigues los pasos para implementar una aplicación en producción.

En este instructivo, se supone que estás familiarizado con la ejecución de comandos de gcloud en Google Cloud y con la implementación de contenedores de aplicaciones en GKE.

Las siguientes son las características clave de este sistema integrado:

  • Desarrolla y, además, implementa más rápido.

    El bucle de desarrollo es eficiente porque puedes validar los cambios en el lugar de trabajo del desarrollador. La implementación es rápida porque el sistema automatizado de CI/CD y la mayor paridad en los entornos te permiten detectar más problemas cuando implementas cambios en la producción.

  • Aprovecha el aumento de la paridad en el desarrollo, la etapa de pruebas y la producción.

    Los componentes de este sistema usan un conjunto común de herramientas de Google Cloud.

  • Reutiliza las opciones de configuración en los diferentes entornos.

    Esta reutilización se realiza con Skaffold, que permite un formato de configuración común para los diferentes entornos. También permite a los desarrolladores y operadores actualizar y usar la misma configuración.

  • Aplica la administración al principio del flujo de trabajo.

    Este sistema aplica pruebas de validación para la administración en la producción, en el sistema de CI y en el entorno de desarrollo. La aplicación de la administración en el entorno de desarrollo permite encontrar y solucionar antes los problemas.

  • Permite que las herramientas bien definidas administren la entrega de software.

    La entrega continua está completamente administrada, lo que separa las etapas de la canalización de CD de los detalles de la renderización y la implementación.

Descripción general de la arquitectura

En el siguiente diagrama, se muestran los recursos usados en este instructivo:

Desarrolla e implementa un sistema con Cloud Code, Cloud Build, Artifact Registry, Google Cloud Deploy y GKE

Los tres componentes principales de esta canalización son los siguientes:

  1. Cloud Code como un lugar de trabajo de desarrollo

    Como parte de este lugar de trabajo, puedes ver los cambios en el clúster de desarrollo, que se ejecuta en minikube. Ejecuta Cloud Code y el clúster de minikube en Cloud Shell. Cloud Shell es un entorno de desarrollo en línea al que puedes acceder desde el navegador. Tiene recursos de procesamiento, memoria, un entorno de desarrollo integrado (IDE) y también tiene instalado Cloud Code.

  2. Cloud Build para compilar y probar la aplicación, la parte de la “CI” de la canalización

    Esta parte de la canalización incluye las siguientes acciones:

    • Cloud Build supervisa los cambios en el repositorio de código fuente mediante un activador de Cloud Build.
    • Cuando se confirma un cambio en la rama principal, el activador de Cloud Build realiza las siguientes acciones:
      • Vuelve a compilar el contenedor de la aplicación.
      • Coloca artefactos de compilación en un bucket de Cloud Storage.
      • Coloca el contenedor de la aplicación en Artifact Registry.
      • Ejecuta pruebas en el contenedor.
      • Llama a Google Cloud Deploy para implementar el contenedor en el entorno de etapa de pruebas. En este instructivo, el entorno de etapa de pruebas es un clúster de Google Kubernetes Engine.
    • Si la compilación y las pruebas se realizan de forma correcta, puedes usar Google Cloud Deploy para promover el contenedor de la etapa de pruebas a la de producción.
  3. Google Cloud Deploy para administrar la implementación, la parte de “CD” de la canalización

    En esta parte de la canalización, Google Cloud Deploy hace lo siguiente:

    • Registra una canalización de entrega y destinos. Los destinos representan los clústeres de etapa de pruebas y de producción.
    • Crea un bucket de Cloud Storage y almacena la fuente de procesamiento de Skaffold y los manifiestos renderizados en ese bucket.
    • Genera una versión nueva para cada cambio de código fuente. En este instructivo, hay un cambio, por lo que hay un lanzamiento nuevo.
    • Implementa la aplicación en el entorno de producción. Para esta implementación en producción, un operador (o cualquier otra persona designada) aprueba la implementación de forma manual. En este instructivo, el entorno de producción es un clúster de Google Kubernetes Engine.

Skaffold, una herramienta de línea de comandos que facilita el desarrollo continuo para aplicaciones nativas de Kubernetes, subyacente a estos componentes, lo que permite que la configuración se comparta entre los entornos de desarrollo, etapa de pruebas y producción.

Google Cloud almacena el código fuente de la aplicación en GitHub y, como parte de este instructivo, clona ese repositorio en Cloud Source Repositories para conectarlo a la canalización de CI/CD.

En este instructivo, se usan productos de Google Cloud para la mayoría de los componentes del sistema, con Skaffold que habilita la integración del sistema. Debido a que Skaffold es de código abierto, puedes usar estos principios para crear un sistema similar mediante una combinación de componentes de Google Cloud, internos y de terceros. La modularidad de esta solución significa que puedes adoptarla de forma incremental como parte de la canalización de implementación y desarrollo.

Objetivos

Si actúas como operador, haz lo siguiente:

  • Configura la canalización de CI y CD En esta configuración, se incluye lo siguiente:
    • Configura los permisos necesarios.
    • Crea los clústeres de GKE para los entornos de etapa de pruebas y producción.
    • Crea un repositorio en Cloud Source Repositories para el código fuente.
    • Crea un repositorio en Artifact Registry para el contenedor de la aplicación.
    • Crea un activador de Cloud Build en el repositorio principal de GitHub.
    • Crea canalizaciones y destinos de entrega de Google Cloud Deploy. Los destinos son los entornos de etapa de pruebas y producción.
  • Comienza el proceso de CI/CD para implementar en la etapa de pruebas y, luego, puedes ascender a la producción.

Como desarrollador, realizas un cambio en la aplicación. Para hacerlo, sigue estos pasos:

  • Clona el repositorio para trabajar con un entorno de desarrollo preconfigurado.
  • Realiza un cambio en la aplicación dentro del lugar de trabajo para desarrolladores.
  • Compila y prueba el cambio. Las pruebas incluyen una prueba de validación para la administración.
  • Visualiza y valida el cambio en un clúster de desarrollo. Este clúster se ejecuta en minikube.
  • Confirma el cambio en el repositorio principal.

Costos

En este documento, usarás los siguientes componentes facturables de Google Cloud:

Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios. Es posible que los usuarios nuevos de Google Cloud califiquen para obtener una prueba gratuita.

Cuando finalices las tareas que se describen en este documento, puedes borrar los recursos que creaste para evitar que continúe la facturación. Para obtener más información, consulta Cómo realizar una limpieza.

Antes de comenzar

  1. En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  2. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  3. Habilita las API de Artifact Registry, Cloud Build, Google Cloud Deploy, Cloud Source Repositories, Google Kubernetes Engine, Resource Manager, and Service Networking.

    Habilita las API

  4. En la consola de Google Cloud, activa Cloud Shell.

    Activar Cloud Shell

    En la parte inferior de la consola de Google Cloud, se inicia una sesión de Cloud Shell en la que se muestra una ventana de línea de comandos. Cloud Shell es un entorno de shell con Google Cloud CLI ya instalada y con valores ya establecidos para el proyecto actual. La sesión puede tardar unos segundos en inicializarse.

Prepara el entorno

En esta sección, actuarás como el operador de la aplicación y realizarás las siguientes acciones:

  • Configura los permisos necesarios.
  • Crea los clústeres de GKE para los entornos de etapa de pruebas y producción.
  • Clona el repositorio de código fuente.
  • Crea un repositorio en Cloud Source Repositories para el código fuente.
  • Crea un repositorio en Artifact Registry para la aplicación de contenedor.

Configura los permisos

En esta sección, debes otorgar los permisos necesarios para configurar la canalización de CI/CD.

  1. Si trabajas en una instancia nueva del Editor de Cloud Shell, especifica el proyecto para usar en este instructivo:

    gcloud config set project PROJECT_ID
    

    Reemplaza PROJECT_ID por el ID del proyecto que seleccionaste o creaste para este instructivo.

    Si se muestra un diálogo, haz clic en Authorize.

  2. Otorga los permisos necesarios a las cuentas de servicio:

    1. Asegúrate de que la cuenta de servicio predeterminada de Compute Engine tenga permisos suficientes para ejecutar trabajos en Google Cloud Deploy y extraer contenedores de Artifact Registry. Cloud Build y Google Cloud Deploy usan esta cuenta de servicio predeterminada.

      Es posible que esta cuenta de servicio ya tenga los permisos necesarios. Este paso garantiza que se otorguen los permisos necesarios para los proyectos que inhabilitan las asignaciones de funciones automáticas para las cuentas de servicio predeterminadas.

      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"
      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member=serviceAccount:$(gcloud projects describe PROJECT_ID \
          --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
          --role="roles/artifactregistry.reader"
      
    2. Otorga el privilegio a la cuenta de servicio de Cloud Build para invocar implementaciones con Google Cloud Deploy y actualizar la canalización de entrega y las definiciones de destino:

      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member=serviceAccount:$(gcloud projects describe PROJECT_ID \
          --format="value(projectNumber)")@cloudbuild.gserviceaccount.com \
          --role="roles/clouddeploy.operator"
      

      Consulta la función clouddeploy.operator para obtener más detalles sobre este rol de IAM.

    3. Otorga el privilegio de cuenta de servicio de Cloud Build y Google Cloud Deploy para implementar en 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.admin"
      

      Consulta el rol container.admin para obtener más detalles sobre esta función de IAM.

    4. Otorga a la cuenta de servicio de Cloud Build los permisos necesarios para invocar las operaciones de Google Cloud Deploy:

      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member=serviceAccount:$(gcloud projects describe PROJECT_ID \
          --format="value(projectNumber)")@cloudbuild.gserviceaccount.com \
          --role="roles/iam.serviceAccountUser"
      

      Cuando Cloud Build invoca a Google Cloud Deploy, usa una cuenta de servicio de Compute Engine para crear una versión, por lo que se necesita este permiso.

      Consulta el rol iam.serviceAccountUser para obtener más detalles sobre este rol de IAM.

Ya otorgaste los permisos necesarios para la canalización de CI/CD.

Crea los clústeres de GKE

En esta sección, crearás los entornos de etapa de pruebas y de producción, que son clústeres de GKE. (No necesitas configurar el clúster de desarrollo aquí, porque usa Minikube).

  1. Crea los clústeres de GKE de etapa de pruebas y producción:

    gcloud container clusters create-auto staging \
        --region us-central1 \
        --project=$(gcloud config get-value project) \
        --async
    
    gcloud container clusters create-auto prod \
        --region us-central1 \
        --project=$(gcloud config get-value project) \
        --async
    

    En el clúster de etapa de pruebas probarás los cambios en el código. Después de verificar que la implementación en la etapa de pruebas no afectó de forma negativa a la aplicación, se implementará en producción.

  2. Ejecuta el siguiente comando y asegúrate de que el resultado tenga STATUS: RUNNING para los clústeres de etapa de pruebas y de producción:

    gcloud container clusters list
    
  3. Recupera las credenciales de los archivos kubeconfig de los clústeres de etapa de pruebas y de producción.

    Usa estas credenciales para interactuar con los clústeres de GKE, por ejemplo, a fin de verificar si una aplicación se ejecuta de forma correcta.

    gcloud container clusters get-credentials staging --region us-central1
    
    gcloud container clusters get-credentials prod --region us-central1
    

Ya creaste los clústeres de GKE para el entorno de etapa de pruebas y de producción.

Abre el IDE y clona el repositorio

Para clonar el repositorio y ver la aplicación en el entorno de desarrollo, sigue estos pasos:

  1. Clona el repositorio y ábrelo en Cloud Shell.

  2. Haz clic en Confirm.

    El Editor de Cloud Shell abre y clona el repositorio de muestra.

    Ahora puedes ver el código de la aplicación en el Editor de Cloud Shell.

  3. Especifica el proyecto que se usará para este instructivo:

    gcloud config set project PROJECT_ID
    

    Si se muestra un diálogo, haz clic en Authorize.

Ahora tienes el código fuente para la aplicación en tu entorno de desarrollo.

Este repositorio de código fuente incluye los archivos de Cloud Build y Google Cloud Deploy necesarios para la canalización de CI/CD.

Crea repositorios para el código fuente y para los contenedores

En esta sección, configurarás un repositorio en Cloud Source Repositories para el código fuente, y un repositorio en Artifact Registry para almacenar los contenedores compilados por la canalización de CI/CD.

  1. Crea un repositorio en Cloud Source Repositories para almacenar el código fuente y vincularlo con el proceso de CI/CD:

    gcloud source repos create cicd-sample
    
  2. Asegúrate de que las opciones de configuración de Google Cloud Deploy se orienten al proyecto correcto:

    sed -i s/project-id-placeholder/$(gcloud config get-value project)/g deploy/*
    git config --global credential.https://source.developers.google.com.helper gcloud.sh
    git remote add google https://source.developers.google.com/p/$(gcloud config get-value project)/r/cicd-sample
    
  3. Envía tu código fuente al repositorio:

    git push --all google
    
  4. Crea un repositorio de imágenes en Artifact Registry:

    gcloud artifacts repositories create cicd-sample-repo \
        --repository-format=Docker \
        --location us-central1
    

Ahora tienes un repositorio para el código fuente en Cloud Source Repositories y uno para el contenedor de la aplicación en Artifact Registry. El repositorio de Cloud Source Repositories te permite clonar el código fuente y conectarlo a la canalización de CI/EC.

Configura la canalización de CI/CD

En esta sección, actuarás como el operador de la aplicación y configurarás la canalización de CI/CD. La canalización usa Cloud Build para la CI y Google Cloud Deploy para la CD. Los pasos de la canalización se definen en el activador de Cloud Build.

  1. Crea un bucket de Cloud Storage para Cloud Build a fin de almacenar el archivo artifacts.json (que realiza un seguimiento de los artefactos que genera Skaffold para cada compilación):

    gsutil mb gs://$(gcloud config get-value project)-gceme-artifacts/
    

    Se recomienda almacenar el archivo artifacts.json de cada compilación en un lugar central, ya que proporciona trazabilidad, lo que facilita la solución de problemas.

  2. Revisa el archivo cloudbuild.yaml, que define el activador de Cloud Build, que ya está configurado en el repositorio de código fuente que clonaste.

    Este archivo define el activador que se invoca cada vez que hay un nuevo envío a la rama principal del repositorio de código fuente.

    Los pasos para la canalización de CI/CD se definen en este archivo:

    • Cloud Build usa Skaffold para compilar el contenedor de la aplicación.

    • Cloud Build coloca el archivo artifacts.json de la compilación en el bucket de Cloud Storage.

    • Cloud Build coloca el contenedor de la aplicación en Artifact Registry.

    • Cloud Build ejecuta pruebas en el contenedor de la aplicación.

    • El comando gcloud deploy apply registra los siguientes archivos con el servicio de implementación de Google Cloud:

      • deploy/pipeline.yaml, que es la canalización de entrega
      • deploy/staging.yaml y deploy/prod.yaml, que son los archivos de destino

        Cuando los archivos se registran, Google Cloud Deploy crea la canalización y los destinos si aún no existen, o los vuelve a crear si la configuración cambió. Los destinos son los entornos de etapa de pruebas y producción.

    • Google Cloud Deploy crea una nueva versión para la canalización de entrega.

      Esta versión hace referencia al contenedor de la aplicación que se compiló y probó en el proceso de CI.

    • Google Cloud Deploy implementa la versión en el entorno de etapa de pruebas.

    Google Cloud Deploy administra la canalización de entrega y los destinos, y se separan del código fuente. Esta separación significa que no necesitas actualizar la canalización de entrega y los archivos de destino cuando se realiza un cambio en el código fuente de la aplicación.

  3. Cree el activador de Cloud Build:

    gcloud beta builds triggers create cloud-source-repositories \
        --name="cicd-sample-main" \
        --repo="cicd-sample" \
        --branch-pattern="main" \
        --build-config="cloudbuild.yaml"
    

    Este activador le indica a Cloud Build que observe el repositorio de origen y que use el archivo cloudbuild.yaml para reaccionar a cualquier cambio en el repositorio. Este activador se invoca cada vez que hay un nuevo envío a la rama principal.

  4. Ve a Cloud Build y observa que no hay compilaciones para tu aplicación.

Ahora configuraste las canalizaciones de CI y CD, y creaste un activador en la rama principal del repositorio.

Haz un cambio en la aplicación en el lugar de trabajo para desarrolladores

En esta sección, actuarás como el desarrollador de la aplicación.

A medida que desarrollas la aplicación, realizas y verificas los cambios iterativos en la aplicación con Cloud Code como el lugar de trabajo de desarrollo:

  • Realiza un cambio en la aplicación.
  • Compila y prueba el código nuevo.
  • Implementa la aplicación en el clúster de minikube y verifica los cambios orientados al usuario.
  • Envía el cambio al repositorio principal.

Cuando se confirma este cambio en el repositorio principal, el activador de Cloud Build inicia la canalización de CI/CD.

Compila, prueba y ejecuta la aplicación

En esta sección, compilarás, probarás, implementarás y accederás a tu aplicación.

Usa la misma instancia del Editor de Cloud Shell que usaste en la sección anterior. Si cerraste el editor, abre el navegador en el editor de Cloud Shell y dirígete a ide.cloud.google.com.

  1. En la terminal, inicia minikube:

    minikube start
    

    Minikube configura un clúster local de Kubernetes en Cloud Shell. Esta configuración tarda unos minutos en ejecutarse. Una vez finalizada, el proceso de Minikube se ejecuta en segundo plano en la instancia de Cloud Shell.

  2. En el panel que se encuentra en la parte inferior del Editor de Cloud Shell, selecciona Cloud Code.

  3. En el panel delgado que aparece entre la terminal y el editor, selecciona Run on Kubernetes.

    Si ves un mensaje que dice Use current context (minikube) to run the app?, haz clic en Yes.

    Este comando compila el código fuente y ejecuta pruebas. Este proceso puede tardar unos minutos. Las pruebas incluyen pruebas de unidades y un paso de validación preconfigurado que verifica las reglas establecidas para el entorno de implementación. Esto garantiza que se te advierta sobre los problemas de implementación, incluso mientras sigues trabajando en el entorno de desarrollo.

    La pestaña Resultado muestra el progreso de Skaffold a medida que compila e implementa la aplicación.

    Mantén esta pestaña abierta durante esta sección.

    Cuando la compilación y las pruebas finalizan, la pestaña Resultado dice Update succeeded y muestra dos URLs.

    A medida que compilas y pruebas tu app, Cloud Code transmite los registros y las URL en la pestaña Resultado. A medida que realizas cambios y ejecutas pruebas en el entorno de desarrollo, puedes ver la versión de la app de tu entorno de desarrollo y verificar que funcione de forma correcta.

    El resultado también dice Watching for changes..., lo que significa que el modo de observación está habilitado. Mientras Cloud Code está en modo de observación, el servicio detecta cualquier cambio guardado en tu repositorio y vuelve a compilar y a implementar la aplicación de forma automática con los últimos cambios.

  4. En la terminal de Cloud Code, mantén el puntero sobre la primera URL en el resultado (http://localhost:8080).

  5. En la información sobre la herramienta que aparece, selecciona Abrir en la vista previa web.

    Cloud Code redirecciona automáticamente el tráfico de redirección de puertos al servicio cicd-sample que se ejecuta en Minikube en segundo plano.

  6. En tu navegador, actualiza la página.

    El número junto a Contador aumenta, lo que muestra que la aplicación responde a tu actualización.

    En tu navegador, mantén esta página abierta para que puedas ver la aplicación mientras realizas cualquier cambio en el entorno local.

Ya compilaste y probaste tu aplicación en el entorno de desarrollo. Implementaste la aplicación en el clúster de desarrollo que se ejecuta en Minikube y viste el comportamiento de la aplicación orientado al usuario.

Haga un cambio

En esta sección, realizarás un cambio en la aplicación y lo verás medida que la aplicación se ejecute en el clúster de desarrollo.

  1. En el Editor de Cloud Shell, abre el archivo index.html.

  2. Busca la string Sample App Info y cámbiala a sample app info, de manera que el título ahora use letras minúsculas.

    El archivo se guarda de forma automática, lo que activa una recompilación del contenedor de la aplicación.

    Cloud Code detecta el cambio y lo vuelve a implementar automáticamente. En la pestaña Resultado, se muestra Update initiated. Esta reimplementación tarda unos minutos en ejecutarse.

    Esta función automática de reimplementación está disponible para cualquier aplicación que se ejecute en un clúster de Kubernetes.

  3. Cuando finalice la compilación, ve al navegador en el que tienes abierta la app y actualiza la página.

    Cuando actualices, verás que el texto ahora usa letras minúsculas.

Esta configuración te permite volver a cargar de forma automática cualquier arquitectura, con cualquier componente. Cuando usas Cloud Code y Minikube, todo lo que se ejecuta en Kubernetes tiene esta función de carga nueva de código activo.

Puedes depurar aplicaciones que se implementan en un clúster de Kubernetes en Cloud Code. Estos pasos no se analizan en este instructivo, pero si deseas obtener más detalles, consulta Depura una aplicación de Kubernetes.

Confirma el código

Ahora que realizaste un cambio en la aplicación, confirma el código:

  1. Configura tu identidad de Git:

    git config --global user.email "YOU@EXAMPLE.COM"
    git config --global user.name "NAME"
    

    Reemplaza lo siguiente:

    • YOU@EXAMPLE.COM por la dirección de correo electrónico conectada a tu cuenta de GitHub
    • NAME por el nombre conectado a tu cuenta de GitHub
  2. Desde la terminal, confirma el código:

    git add .
    git commit -m "use lowercase for: sample app info"
    

    No es necesario ejecutar el comando git push aquí. Eso viene después.

Ahora realizaste un cambio en la aplicación, compilaste y probaste el cambio, y verificaste el comportamiento de estos cambios orientado al usuario en el entorno de desarrollo. En las pruebas en el entorno de desarrollo, se incluyen verificaciones de administración, que te permiten corregir errores que causan problemas en el entorno de producción.

En este instructivo, no pasas por una revisión de código cuando confirmas el código en el repositorio principal. Sin embargo, la revisión de código o la aprobación de cambios es un proceso recomendado para el desarrollo de software.

Para obtener más información sobre las prácticas recomendadas de aprobación de cambios, consulta Optimiza la aprobación de cambios.

Implementa un cambio en la producción

En esta sección, actuarás como el operador de la aplicación y realizarás las siguientes acciones:

  • Activa la canalización de CI/EC, que implementa la versión en el entorno de etapa de pruebas.
  • Promueve y aprueba el lanzamiento a producción.

Iniciar la canalización de CI/CD e implementarla en la etapa de pruebas

En esta sección, debes iniciar la canalización de CI/CD mediante la invocación del activador de Cloud Build. Este activador se invoca cada vez que se confirma un cambio en el repositorio principal. También puedes iniciar el sistema de CI con un activador manual.

  1. En el Editor de Cloud Shell, ejecuta el siguiente comando para activar una compilación:

    git push google
    

    Esta compilación incluye el cambio que realizaste en cicd-sample.

  2. Regresa al panel de Cloud Build y observa que se cree una compilación.

  3. Haz clic en Ejecuta: cicd-sample - cicd-sample-main en el registro de compilación a la derecha y busca el texto azul que denota el inicio y el final de cada paso.

    En el Paso 0, se muestra el resultado de las instrucciones de skaffold build y skaffold test del archivo cloudbuild.yaml. Las tareas de compilación y prueba del Paso 0 (la parte de CI de la canalización) pasaron, por lo que las tareas de implementación del Paso 1 (la parte de CD de la canalización) se ejecutan ahora.

    Este paso finaliza de forma correcta con el siguiente mensaje:

    Created Google Cloud Deploy rollout ROLLOUT_NAME in target staging

  4. Abre la página de canalizaciones de entrega de Google Cloud Deploy y haz clic en la canalización cicd-sample delivery.

    La aplicación se implementa en la etapa de pruebas, pero no en la de producción.

  5. Verifica que la aplicación funcione de forma correcta en la etapa de pruebas:

    kubectl proxy --port 8001 --context gke_$(gcloud config get-value project)_us-central1_staging
    

    Este comando configura un proxy de kubectl para acceder a la aplicación.

  6. Accede a la aplicación desde Cloud Shell:

    1. En el Editor de Cloud Shell, abre una pestaña nueva de la terminal.

    2. Envía una solicitud a localhost para aumentar un contador:

      curl -s http://localhost:8001/api/v1/namespaces/default/services/cicd-sample:8080/proxy/ | grep -A 1 Counter
      

      Puedes ejecutar este comando varias veces y ver el aumento del valor del contador en todo momento.

      Mientras ves la aplicación, observa que el texto que cambiaste está en la versión de la aplicación que implementaste en la etapa de pruebas.

    3. Cierra la segunda pestaña.

    4. Presiona Control+C para detener el proxy en la primera pestaña.

Ahora invocaste el activador de Cloud Build para iniciar el proceso de CI, que incluye compilar la aplicación, implementarla en el entorno de etapa de pruebas y ejecutar las pruebas a fin de verificar que la aplicación funcione en la etapa de pruebas.

El proceso de CI se realiza de forma correcta cuando las compilaciones de código y las pruebas pasan en el entorno de etapa de pruebas. El éxito del proceso de CI inicia el sistema de CD en Google Cloud Deploy.

Promueve la versión a la producción

En esta sección, promoverás el lanzamiento de la etapa de pruebas a producción. El objetivo de producción viene preconfigurado para requerir aprobación, por lo que lo aprobarás de forma manual.

Para tu propia canalización de CI/CD, te recomendamos usar una estrategia de implementación que inicie la implementación de forma gradual antes de realizar una implementación completa en producción. Si inicias la implementación de manera gradual puede facilitar la detección de problemas y, si es necesario, el restablecimiento de una versión anterior.

Para promover el lanzamiento a producción, haz lo siguiente:

  1. Abre la descripción general de las canalizaciones de entrega de Google Cloud Deploy y selecciona la canalización cicd-sample.

  2. Promueve la implementación de la etapa de pruebas a la de producción Para ello, deberás hacer lo siguiente:

    1. En el diagrama de la canalización que se encuentra en la parte superior de la página, haz clic en el botón azul Promover en el cuadro de etapa de pruebas.

    2. En la ventana que se abrirá, haz clic en el botón Promover en la parte inferior.

    La implementación aún no se está ejecutando en producción. Espera la aprobación manual requerida.

  3. Aprueba la implementación de forma manual:

    1. En la visualización de la canalización, haz clic en el botón Revisar entre los cuadros de la etapa de pruebas y de producción.

    2. En la ventana que se abrirá, haz clic en el botón Review.

    3. En la ventana siguiente, haz clic en Aprobar.

    4. Regresa a la Descripción general de las canalizaciones de entrega de Google Cloud Deploy y selecciona la canalización cicd-sample.

  4. Después de que la visualización de la canalización muestre el cuadro de producción en verde (lo que significa un lanzamiento correcto), verifica que la aplicación funcione en producción mediante la configuración de un proxy de kubectl que usarás para acceder a la aplicación:

    kubectl proxy --port 8002 --context gke_$(gcloud config get-value project)_us-central1_prod
    
  5. Accede a la aplicación desde Cloud Shell:

    1. En el Editor de Cloud Shell, abre una pestaña nueva de la terminal.

    2. Incrementa el contador:

      curl -s http://localhost:8002/api/v1/namespaces/default/services/cicd-sample:8080/proxy/ | grep -A 1 Counter
      

      Puedes ejecutar este comando varias veces y ver el aumento del valor del contador en todo momento.

    3. Cierra esta segunda pestaña de la terminal.

    4. Presiona Control+C para detener el proxy en la primera pestaña.

Ya promoviste y aprobaste la implementación de producción. La aplicación con el cambio reciente ahora se ejecuta en producción.

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.

Opción 1: Borra el proyecto

  1. En la consola de Google Cloud, ve a la página Administrar recursos.

    Ir a Administrar recursos

  2. En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
  3. En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.

Opción 2: Borra los recursos individuales

  1. Borra la canalización de Google Cloud Deploy:

    gcloud deploy delivery-pipelines delete cicd-sample --region=us-central1 --force
    
  2. Borra el activador de Cloud Build:

    gcloud beta builds triggers delete cicd-sample-main
    
  3. Borra los clústeres de etapa de pruebas y de producción:

    gcloud container clusters delete staging
    
    gcloud container clusters delete prod
    
  4. Borra el repositorio en Cloud Source Repositories:

    gcloud source repos delete cicd-sample
    
  5. Borra los buckets de Cloud Storage

    gsutil rm -r gs://$(gcloud config get-value project)-gceme-artifacts/
    
    gsutil rm -r gs://$(gcloud config get-value project)_clouddeploy/
    
  6. Borra el repositorio en Artifact Registry:

    gcloud artifacts repositories delete cicd-sample-repo \
        --location us-central1
    

¿Qué sigue?