Desarrollar y desplegar aplicaciones en contenedores mediante una canalización de CI/CD

Last reviewed 2022-11-18 UTC

En esta guía de implementación 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 desplegar aplicaciones en Google Kubernetes Engine (GKE).

En esta guía se explica cómo crear la arquitectura que se describe en el artículo Flujo de procesamiento de despliegue para desarrollar y distribuir aplicaciones contenerizadas.

Esta guía de implementación está dirigida tanto a desarrolladores de software como a operadores, y desempeñas los siguientes roles a medida que la completas:

  • Primero, actúa como operador para configurar la canalización de CI/CD. Los componentes principales de esta canalización son Cloud Build, Artifact Registry y Cloud Deploy.
  • Después, actuarás como desarrollador para cambiar una aplicación mediante 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 desplegar una aplicación en producción.

En esta guía de implementación se da por supuesto que sabes cómo ejecutar comandos gcloudGoogle Cloud y cómo implementar contenedores de aplicaciones en GKE.

Arquitectura

En el siguiente diagrama se muestran los recursos que se utilizan en esta guía de implementación:

Desarrollar y desplegar un sistema con Cloud Code, Cloud Build, Artifact Registry, Cloud Deploy y GKE

Para obtener información sobre los componentes que se usan en esta arquitectura, consulta Pipeline de implementación para desarrollar y distribuir aplicaciones en contenedores.

Objetivos

Como operador, debes hacer lo siguiente:

  • Configura el flujo de procesamiento de CI y el flujo de procesamiento de CD. Esta configuración incluye lo siguiente:
    • Configura los permisos necesarios.
    • Crea los clústeres de GKE para los entornos de staging 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 un flujo de procesamiento de entrega y destinos de Cloud Deploy. Los destinos son los entornos de preproducción y producción.
  • Inicia el proceso de CI/CD para implementar en el entorno de preproducción y, a continuación, en el de producción.

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

  • Clona el repositorio para trabajar con un entorno de desarrollo preconfigurado.
  • Haz un cambio en la aplicación en tu espacio de trabajo para desarrolladores.
  • Crea y prueba el cambio. Las pruebas incluyen una prueba de validación para la gobernanza.
  • Ver y validar el cambio en un clúster de desarrollo. Este clúster se ejecuta en minikube.
  • Confirma el cambio en el repositorio principal.

Costes

En este documento, se utilizan los siguientes componentes facturables de Google Cloud:

Para generar una estimación de costes basada en el uso previsto, utiliza la calculadora de precios.

Los usuarios nuevos Google Cloud pueden disfrutar de una prueba gratuita.

Cuando termines las tareas que se describen en este documento, puedes evitar que se te siga facturando eliminando los recursos que has creado. Para obtener más información, consulta la sección Limpiar.

Antes de empezar

  1. 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 (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  2. Verify that billing is enabled for your Google Cloud project.

  3. Enable the Artifact Registry, Cloud Build, Cloud Deploy, Cloud Source Repositories, Google Kubernetes Engine, Resource Manager, and Service Networking APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  4. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    Prepara tu entorno

    En esta sección, actuarás como operador de la aplicación y harás lo siguiente:

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

    Configurar permisos

    En esta sección, se conceden los permisos necesarios para configurar la pipeline de CI/CD.

    1. Si estás trabajando en una nueva instancia de Cloud Shell Editor, especifica el proyecto que quieres usar en esta guía de implementación:

      gcloud config set project PROJECT_ID
      

      Sustituye PROJECT_ID por el ID del proyecto que has seleccionado o creado para esta guía de implementación.

      Si se muestra un cuadro de diálogo, haz clic en Autorizar.

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

      Es posible que esta cuenta de servicio ya tenga los permisos necesarios. Con este paso, se aseguran los permisos necesarios para los proyectos en los que se inhabilitan las concesiones automáticas de roles 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"
      
    3. Concede a la cuenta de servicio de Cloud Build el privilegio para invocar implementaciones con Cloud Deploy y para actualizar la canalización de distribución 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"
      

      Para obtener más información sobre este rol de gestión de identidades y accesos, consulta el rol clouddeploy.operator.

    4. Concede al servicio de Cloud Build y Cloud Deploy el privilegio de desplegar 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"
      

      Para obtener más información sobre este rol de gestión de identidades y accesos, consulta el rol container.admin.

    5. Concede a la cuenta de servicio de Cloud Build los permisos necesarios para invocar operaciones de 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 Cloud Deploy, utiliza una cuenta de servicio de Compute Engine para crear una versión, por lo que se necesita este permiso.

      Para obtener más información sobre este rol de gestión de identidades y accesos, consulta el rol iam.serviceAccountUser.

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

    Crear los clústeres de GKE

    En esta sección, creará los entornos de staging y producción, que son clústeres de GKE. No es necesario que configures el clúster de desarrollo aquí, ya que usa minikube.

    1. Crea los clústeres de GKE de staging 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
      

      El clúster de staging es donde pruebas los cambios en tu código. Una vez que hayas verificado que la implementación en el entorno de pruebas no ha afectado negativamente a la aplicación, puedes implementarla en el entorno de producción.

    2. Ejecuta el siguiente comando y asegúrate de que el resultado tenga STATUS: RUNNING tanto en el clúster de staging como en el de producción:

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

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

      Estas credenciales se usan para interactuar con los clústeres de GKE, por ejemplo, para comprobar que una aplicación se está ejecutando correctamente.

    Ya has creado los clústeres de GKE para los entornos de preproducción y producción.

    Abre el IDE y clona el repositorio.

    Para clonar el repositorio y ver la aplicación en tu entorno de desarrollo, haz lo siguiente:

    1. Clona el repositorio de GitHub en Cloud Shell.

      Abrir en Cloud Shell

    2. Haz clic en Confirmar.

      Se abre el editor de Cloud Shell y se clona el repositorio de ejemplo.

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

    3. Especifica el proyecto que vas a usar en esta guía de implementación:

      gcloud config set project PROJECT_ID
      

      Si se muestra un cuadro de diálogo, haz clic en Autorizar.

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

    Este repositorio de origen incluye los archivos de Cloud Build y Cloud Deploy necesarios para el flujo de procesamiento de CI/CD.

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

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

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

      gcloud source repos create cicd-sample
      
    2. Asegúrate de que las configuraciones de Cloud Deploy estén orientadas 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 de código fuente en Cloud Source Repositories y otro 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/CD.

    Configurar el flujo de procesamiento de CI/CD

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

    1. Crea un segmento de Cloud Storage para que Cloud Build almacene el archivo artifacts.json (que registra los artefactos generados por Skaffold para cada compilación):

      gcloud storage buckets create gs://$(gcloud config get-value project)-gceme-artifacts/
      

      Almacenar el archivo artifacts.json de cada compilación en un lugar centralizado es una buena práctica, ya que proporciona trazabilidad, lo que facilita la resolución de problemas.

    2. Revisa el archivo cloudbuild.yaml, que define el activador de Cloud Build y ya está configurado en el repositorio de origen que has clonado.

      Este archivo define el activador que se invoca cada vez que se inserta contenido en la rama principal del repositorio de código fuente.

      Los siguientes pasos de la canalización de CI/CD se definen en el archivo cloudbuild.yaml:

      • 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 segmento 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 en el servicio Cloud Deploy:

        • deploy/pipeline.yaml, que es el flujo de procesamiento de entrega
        • deploy/staging.yaml y deploy/prod.yaml, que son los archivos de destino.

        Cuando se registran los archivos, Cloud Deploy crea la canalización y los destinos si aún no existen, o los vuelve a crear si ha cambiado la configuración. Los objetivos son los entornos de preproducción y producción.

      • Cloud Deploy crea una versión del flujo de procesamiento de entrega.

        Esta versión hace referencia al contenedor de la aplicación que se ha compilado y probado en el proceso de integración continua.

      • Cloud Deploy despliega la versión en el entorno de staging.

      Cloud Deploy gestiona el flujo de procesamiento de entrega y los destinos, que están desacoplados del código fuente. Este desacoplamiento significa que no es necesario actualizar la canalización de entrega ni los archivos de destino cuando se hace un cambio en el código fuente de la aplicación.

    3. Crea 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 indica a Cloud Build que monitorice el repositorio de origen y que use el archivo cloudbuild.yaml para reaccionar a los cambios que se produzcan en el repositorio. Este activador se invoca cada vez que se hace un push a la rama principal.

    4. Ve a la página Cloud Build de la Google Cloud consola.

      Ir a Cloud Build

      Verás que no hay compilaciones para tu aplicación.

    Ya has configurado las canalizaciones de CI y CD, y has creado un activador en la rama principal del repositorio.

    Hacer un cambio en tu aplicación en tu espacio de trabajo de desarrollador

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

    Mientras desarrollas tu aplicación, haces y verificas cambios iterativos en la aplicación mediante Cloud Code como espacio de trabajo de desarrollo:

    • Hacer un cambio en la aplicación.
    • Compila y prueba el nuevo código.
    • Despliega la aplicación en el clúster de minikube y verifica los cambios visibles para los usuarios.
    • 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.

    Compilar, probar y ejecutar la aplicación

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

    Usa la misma instancia del editor de Cloud Shell que has usado en la sección anterior. Si has cerrado el editor, abre Cloud Shell Editor en el navegador. Para ello, ve a ide.cloud.google.com.

    1. En la terminal, inicia minikube:

      minikube start
      

      minikube configura un clúster local de Kubernetes en Cloud Shell. Este proceso de configuración tarda unos minutos en completarse. Una vez completado, el proceso de minikube se ejecuta en segundo plano en la instancia de Cloud Shell.

    2. En el panel de la parte inferior del editor de Cloud Shell, selecciona Cloud Code.

    3. En el panel fino que aparece entre la terminal y el editor, selecciona Ejecutar en Kubernetes.

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

      Este comando compila el código fuente y ejecuta pruebas. Este proceso puede tardar unos minutos. Las pruebas incluyen pruebas unitarias y un paso de validación preconfigurado que comprueba las reglas definidas para el entorno de implementación. De esta forma, se te avisará de los problemas de implementación incluso mientras sigues trabajando en tu entorno de desarrollo.

      En la pestaña Output (Salida) se muestra el progreso de Skaffold a medida que compila y despliega tu aplicación.

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

      Cuando finalicen la compilación y las pruebas, en la pestaña Salida se mostrará el mensaje Update succeeded y dos URLs.

      Mientras compilas y pruebas tu aplicación, Cloud Code transmite los registros y las URLs a la pestaña Salida. A medida que hagas cambios y realices pruebas en tu entorno de desarrollo, podrás ver la versión de la aplicación de tu entorno de desarrollo y verificar que funciona correctamente.

      El resultado también indica Watching for changes..., lo que significa que el modo reloj está habilitado. Mientras Cloud Code está en modo de monitorización, el servicio detecta cualquier cambio guardado en tu repositorio y vuelve a compilar y desplegar la aplicación automáticamente con los cambios más recientes.

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

    5. En la descripción emergente que aparece, selecciona Abrir vista previa web.

      En segundo plano, Cloud Code reenvía automáticamente el tráfico al servicio cicd-sample que se ejecuta en minikube.

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

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

      En el navegador, mantén esta página abierta para poder ver la aplicación mientras haces cambios en tu entorno local.

    Ya has compilado y probado tu aplicación en el entorno de desarrollo. Has implementado la aplicación en el clúster de desarrollo que se ejecuta en minikube y has visto el comportamiento de la aplicación de cara al usuario.

    Hacer un cambio

    En esta sección, se hace un cambio en la aplicación y se ve el cambio mientras la aplicación se ejecuta en el clúster de desarrollo.

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

    2. Busca la cadena Sample App Info y cámbiala por sample app info, para que el título ahora use letras minúsculas.

      El archivo se guarda automáticamente, 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 Salida se muestra Update initiated. Este proceso de volver a desplegar tarda unos minutos en ejecutarse.

      Esta función de volver a implementar automáticamente está disponible para cualquier aplicación que se ejecute en un clúster de Kubernetes.

    3. Cuando se haya completado la compilación, ve al navegador en el que tengas abierta la aplicación y actualiza la página.

      Cuando actualices la página, verás que el texto ahora está en minúsculas.

    Esta configuración te permite recargar automáticamente cualquier arquitectura con cualquier componente. Cuando usas Cloud Code y minikube, todo lo que se ejecuta en Kubernetes tiene esta función de recarga de código en caliente.

    Puedes depurar aplicaciones desplegadas en un clúster de Kubernetes en Cloud Code. Estos pasos no se explican en esta guía de implementación, pero puedes consultar los detalles en el artículo Depurar una aplicación de Kubernetes.

    Confirmar el código

    Ahora que has hecho un cambio en la aplicación, puedes confirmar el código.

    1. Configura tu identidad de Git:

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

      Haz los cambios siguientes:

      • YOU@EXAMPLE.COM: la dirección de correo conectada a tu cuenta de GitHub.
      • NAME: el nombre asociado a tu cuenta de GitHub.
    2. En el terminal, confirma el código:

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

      No es necesario que ejecutes el comando git push aquí. Eso lo veremos más adelante.

    Ahora, en el entorno de desarrollo, has hecho un cambio en la aplicación, has compilado y probado el cambio, y has verificado el comportamiento de estos cambios de cara al usuario. Las pruebas del entorno de desarrollo incluyen comprobaciones de gobernanza, que te permiten solucionar problemas que causan problemas en el entorno de producción.

    En esta guía de implementación, cuando confirmas el código en el repositorio principal, no se realiza una revisión del código. Sin embargo, la revisión del código o la aprobación de los cambios es un proceso recomendado para el desarrollo de software.

    Para obtener más información sobre las prácticas recomendadas para aprobar cambios, consulta el artículo Optimización del proceso de aprobación de cambios.

    Desplegar un cambio en producción

    En esta sección, actuarás como operador de la aplicación y harás lo siguiente:

    • Activa el flujo de procesamiento de CI/CD, que despliega la versión en el entorno de preproducción.
    • Promueve y aprueba la versión para que pase a producción.

    Inicia el flujo de procesamiento de CI/CD y despliega en el entorno de preproducción

    En esta sección, iniciarás el flujo de procesamiento de CI/CD invocando el 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 has hecho en cicd-sample.

    2. Vuelve al panel de control de Cloud Build y verás que se ha creado una compilación.

    3. En el registro de compilación de la derecha, haz clic en Running: cicd-sample - cicd-sample-main (Ejecutando: cicd-sample - cicd-sample-main) y busca el texto azul que indica el inicio y el final de cada paso.

      El paso 0 muestra el resultado de las instrucciones 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) se han completado correctamente, por lo que ahora se ejecutan las tareas de implementación del paso 1 (la parte de CD de la canalización).

      Este paso finaliza con el siguiente mensaje:

      Created Cloud Deploy rollout ROLLOUT_NAME in target staging

    4. Abre la página de flujos de procesamiento de entrega de Cloud Deploy y haz clic en el flujo de procesamiento cicd-sample delivery.

      La aplicación se ha desplegado en el entorno de preproducción, pero no en el de producción.

    5. Verifica que la aplicación funciona correctamente en el entorno de preproducción:

      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 nueva pestaña de terminal.

      2. Envía una solicitud a localhost para incrementar 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 cómo aumenta el valor del contador cada vez.

        Mientras ves la aplicación, observa que el texto que has cambiado está en la versión de la aplicación que has implementado en el entorno de pruebas.

      3. Cierra la segunda pestaña.

      4. En la primera pestaña, pulsa Control+C para detener el proxy.

    Ahora has invocado el activador de Cloud Build para iniciar el proceso de integración continua, que incluye compilar la aplicación, desplegarla en el entorno de staging y ejecutar pruebas para verificar que la aplicación funciona en el entorno de staging.

    El proceso de integración continua se completa correctamente cuando el código se compila y las pruebas se superan en el entorno de staging. Si el proceso de integración continua se completa correctamente, se inicia el sistema de entrega continua en Cloud Deploy.

    Promocionar la versión a producción

    En esta sección, pasarás la versión de la fase de staging a la de producción. El destino de producción viene preconfigurado para requerir aprobación, por lo que debes aprobarlo manualmente.

    En tu propia canalización de CI/CD, puedes usar una estrategia de implementación que lance la implementación gradualmente antes de realizar una implementación completa en producción. Si lanzas la implementación de forma gradual, te resultará más fácil detectar problemas y, si es necesario, restaurar una versión anterior.

    Para promocionar la versión a producción, sigue estos pasos:

    1. Abre la vista general de los flujos de trabajo de entrega de Cloud Deploy y selecciona el flujo de trabajo cicd-sample.

    2. Promueve el despliegue de la fase de staging a la de producción. Para ello, haz lo siguiente:

      1. En el diagrama de la canalización situado en la parte superior de la página, haga clic en el botón azul Promover del cuadro de la fase de preparación.

      2. En la ventana que se abre, haz clic en el botón Promocionar, situado en la parte inferior.

      La implementación aún no se está ejecutando en producción. Está esperando la aprobación manual necesaria.

    3. Aprobar manualmente el despliegue:

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

      2. En la ventana que se abre, haz clic en el botón Revisar.

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

      4. Vuelve a la descripción general de los flujos de procesamiento de entrega de Cloud Deploy y selecciona el flujo de procesamiento cicd-sample.

    4. Una vez que la visualización de la canalización muestre el recuadro de producción en verde (lo que significa que el lanzamiento se ha realizado correctamente), comprueba que la aplicación funciona en producción configurando 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 nueva pestaña de 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 cómo aumenta el valor del contador cada vez.

      3. Cierra esta segunda pestaña de terminal.

      4. En la primera pestaña, pulsa Control+C para detener el proxy.

    Ahora ha promocionado y aprobado el despliegue de producción. La aplicación con el cambio que has hecho recientemente ya está en producción.

    Limpieza

    Para evitar que los recursos utilizados en esta guía de implementación se cobren en tu cuenta de Google Cloud, elimina el proyecto que contiene los recursos o conserva el proyecto y elimina los recursos.

    Opción 1: Eliminar el proyecto

    1. In the Google Cloud console, go to the Manage resources page.

      Go to Manage resources

    2. In the project list, select the project that you want to delete, and then click Delete.
    3. In the dialog, type the project ID, and then click Shut down to delete the project.

    Opción 2: Eliminar los recursos concretos

    1. Elimina la canalización de Cloud Deploy:

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

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

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

      gcloud source repos delete cicd-sample
      
    5. Elimina los segmentos de Cloud Storage:

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

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

    Siguientes pasos