Canalización de CI/CD para desarrollar y entregar apps alojadas en contenedores

Last reviewed 2022-11-18 UTC

En este documento, se describe un conjunto integrado de herramientas de Google Cloud a fin de configurar un sistema para el desarrollo, la integración continua (CI) y la entrega continua (CD) que puedes usar a fin de desarrollar e implementar aplicaciones en Google Kubernetes Engine (GKE). Este documento de arquitectura de referencia está dirigido a desarrolladores y operadores de software. 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.

Arquitectura

En el siguiente diagrama, se muestran los recursos que se usan en esta arquitectura:

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

Esta arquitectura incluye los siguientes componentes:

  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 Cloud Deploy para implementar el contenedor en el entorno de etapa de pruebas. En este ejemplo, 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 Cloud Deploy para promover el contenedor de la etapa de pruebas a la de producción.
  3. Cloud Deploy para administrar la implementación, la parte de “CD” de la canalización. En esta parte de la canalización, 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.
    • 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 esta arquitectura, el entorno de producción es un clúster de Google Kubernetes Engine.

En esta arquitectura, la configuración se comparte entre los entornos de desarrollo, de etapa de pruebas y de producción a través de Skaffold, una herramienta de línea de comandos que facilita el desarrollo continuo para las aplicaciones nativas de Kubernetes.

En Google Cloud, se almacena el código fuente de la aplicación en GitHub.

En esta arquitectura, 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.

Casos de uso

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.

Implementación

Para implementar esta arquitectura, consulta Desarrolla e implementa apps alojadas en contenedores mediante una canalización de CI/CD.

¿Qué sigue?