Automatiza tus implementaciones

Last reviewed 2023-07-17 UTC

En este documento del framework de arquitectura de Google Cloud, se proporcionan prácticas recomendadas para automatizar tus compilaciones, implementaciones y pruebas.

La automatización te ayuda a estandarizar tus implementaciones, pruebas y compilaciones con la eliminación de los errores causados por las personas en procesos repetidos, como las actualizaciones de código. En esta sección, se describe cómo usar varias verificaciones y protecciones a medida que automatizas. Un proceso estandarizado controlado por máquinas ayuda a garantizar que tus implementaciones se apliquen de forma segura. También proporciona un mecanismo para restablecer las implementaciones anteriores según sea necesario sin afectar de manera significativa la experiencia del usuario.

Almacena tu código en repositorios de código central

Almacena tu código en repositorios de código central que incluyan un sistema de control de versión con etiquetado y la capacidad de revertir cambios de código. El control de versiones te permite organizar archivos y controlar el acceso, las actualizaciones y la eliminación en equipos y organizaciones.

Para diferentes etapas del desarrollo, etiqueta los repositorios y controla su versión según sea necesario. Por ejemplo, las etiquetas podrían ser test, dev y prod.

En Google Cloud, puedes almacenar tu código en Cloud Source Repositories y, además, controlar su versión e integrarlos en otros productos de Google Cloud. Si compilas aplicaciones alojadas en contenedores, usa Artifact Registry, un registro administrado para contenedores.

Para obtener más detalles sobre el control de versión, consulta Control de versión. Para obtener detalles sobre la implementación del desarrollo basado en troncales con tus repositorios, consulta Desarrollo basado en troncales.

Use la integración y la implementación continuas (CI/CD)

Automatiza tus implementaciones con un enfoque de integración continua e implementación continua (CI/CD). Un enfoque de CI/CD es una combinación de canalizaciones que configuras y procesos que tu equipo de desarrollo sigue.

Un enfoque de CI/CD aumenta la velocidad de implementación, ya que hace que el equipo de desarrollo de software sea más productivo. Este enfoque permite que los desarrolladores realicen cambios más pequeños y más frecuentes que se prueban de forma exhaustiva mientras reducen el tiempo necesario para implementar esos cambios.

Como parte de tu enfoque de CI/CD, automatiza todos los pasos que forman parte de la compilación, la prueba y la implementación de tu código. Por ejemplo:

  • Siempre que se confirme un código nuevo en el repositorio, haz que la confirmación invoque de forma automática la canalización de compilación y prueba.
  • Automatiza las pruebas de integración
  • Automatiza tu implementación para que los cambios se implementen después de que la compilación cumpla con los criterios de prueba específicos.

En Google Cloud, puedes usar Cloud Build y Cloud Deploy para las canalizaciones de CI/CD.

Usa Cloud Build para ayudar a definir las dependencias y versiones que puedes usar para el empaquetado y la compilación de un paquete de aplicación. Crea una versión de tu configuración de compilación para asegurarte de que todas las compilaciones sean coherentes de que puedas revertir a una configuración anterior si es necesario.

Usa Cloud Deploy para implementar las aplicaciones en entornos específicos en Google Cloud y administrar las canalizaciones de implementación.

Para obtener más detalles sobre la implementación de CI/CD, consulta Integración continua y Automatización de la implementación.

Aprovisiona y administra tu infraestructura con infraestructura como código

La infraestructura como código es el uso de un modelo descriptivo para administrar la infraestructura, como las VM, y las configuraciones, como las reglas de firewall. La infraestructura como código te permite hacer lo siguiente:

  • Crea tus recursos de nube automáticamente, incluidos los entornos de implementación o de prueba para tu canalización de CI/CD.
  • Tratar los cambios en la infraestructura como tratas los cambios en las aplicaciones. Por ejemplo, asegurarte de que los cambios en la configuración se revisen, se prueben y se puedan auditar.
  • Tener una sola versión de la verdad para tu infraestructura de nube.
  • Replicar tus entornos de nube según sea necesario.
  • Si es necesario, revertir a una configuración anterior.

Este concepto de infraestructura como código también se aplica a los proyectos en Google Cloud. Puedes usar este enfoque para definir recursos como la conectividad de VPC compartida o el acceso a Identity and Access Management (IAM) en tus proyectos. Para ver un ejemplo de este enfoque, consulta el módulo de Terraform de fábrica de proyectos de Google Cloud.

Las herramientas de terceros, como Terraform, te ayudan a crear automáticamente tu infraestructura en Google Cloud. Para obtener más información, consulta Administra la infraestructura como código con Terraform, Cloud Build y GitOps.

Considera usar las funciones de Google Cloud, como retenciones del proyecto, Políticas de retención de Cloud Storage y bloqueos de buckets de Cloud Storage para proteger los recursos críticos y evitar que se borren de forma accidental o maliciosa.

Incorpora pruebas durante el ciclo de vida de la entrega de software

Las pruebas son fundamentales para iniciar el software de forma correcta. Las pruebas continuas ayudan a los equipos a crear software de alta calidad más rápido y mejorar la estabilidad del software.

Tipos de pruebas:

  • Pruebas de unidades. Las pruebas de unidades son breves y te ayudan a realizar implementaciones rápidas. Trata las pruebas de unidades como parte de la base de código e inclúyelas como parte del proceso de compilación.
  • Pruebas de integración. Las pruebas de integración son importantes, en especial para las cargas de trabajo diseñadas para el escalamiento y que dependen de más de un servicio. Estas pruebas pueden volverse complejas cuando pruebas la integración con servicios interconectados.
  • Pruebas del sistema. Las pruebas del sistema consumen mucho tiempo y son complejas, pero te ayudan a identificar casos extremos y solucionar problemas antes de la implementación.
  • Otras pruebas. Hay otras pruebas que debes ejecutar, incluidas las pruebas estáticas, de carga, de seguridad, de validación de políticas y otras. Ejecuta estas pruebas antes de implementar tu aplicación en producción.

Para incorporar pruebas, haz lo siguiente:

  • Realizar todos los tipos de pruebas de forma continua durante todo el ciclo de vida de la entrega de software.
  • Automatiza estas pruebas y, luego, inclúyelas en la canalización de CI/CD. Haz que la canalización falle si falla alguna de las pruebas.
  • Actualiza y agrega pruebas nuevas de forma continua para mejorar y mantener el estado operativo de tu implementación.

Para los entornos de prueba:

  • Usa proyectos de Google Cloud separados para cada entorno de prueba que tengas. Para cada aplicación, usa un entorno de proyecto separado. Esta separación proporciona una demarcación clara entre los recursos del entorno de producción y los de tus entornos inferiores. Esta separación ayuda a garantizar que cualquier cambio en un entorno no afecte de forma accidental a otros entornos.
  • Automatiza la creación de entornos de prueba. Una forma de hacerlo es usar la infraestructura como código.
  • Usa un entorno de producción sintético para probar cambios. Este proporciona un entorno similar al de producción para probar la aplicación y realizar varios tipos de pruebas en las cargas de trabajo, incluidas las pruebas de extremo a extremo y las de rendimiento.

Para obtener más información de la implementación de pruebas continuas, consulta Automatización de pruebas.

Lanza las implementaciones de forma gradual

Elige tu estrategia de implementación en función de parámetros importantes, como la interrupción mínima para los usuarios finales, las actualizaciones progresivas, las estrategias de reversión y las estrategias de prueba A/B. Para cada carga de trabajo, evalúa estos requisitos y elige una estrategia de implementación a partir de técnicas comprobadas, como actualizaciones progresivas, implementaciones azul-verde e implementaciones de versiones canary.

Solo permite que los procesos de CI/CD realicen y envíen cambios en tu entorno de producción.

Considera usar una infraestructura inmutable. Una infraestructura inmutable es una infraestructura que no se modifica ni se actualiza. Cuando necesites implementar un código nuevo o cambiar cualquier otra configuración en tu entorno, reemplaza todo el entorno (por ejemplo, una colección de VM o Pods) por el entorno nuevo. Las implementaciones azul-verde son un ejemplo de una infraestructura inmutable.

Te recomendamos que realices pruebas de versiones canary y observes si hay errores en tu sistema a medida que implementas cambios. Este tipo de observación es más fácil si tienes un sistema de supervisión y alertas sólido. Para realizar pruebas A/B o pruebas canary, puedes usar los grupos de instancias administrados de Google Cloud. Luego, puedes realizar un lanzamiento lento o un restablecimiento si es necesario.

Considera usar Cloud Deploy para automatizar las implementaciones y administrar la canalización de estas. También puedes usar muchas herramientas de terceros, como Spinnaker y Tekton, en Google Cloud para implementaciones automatizadas y crear canalizaciones de implementación.

Restablece las versiones anteriores sin problemas

Define tu estrategia de restablecimiento como parte de tu estrategia de implementación. Asegúrate de poder revertir una implementación o una configuración de infraestructura a una versión anterior del código fuente. Restablecer una implementación anterior estable es un paso importante en la administración de los incidentes de confiabilidad y seguridad.

También asegúrate de poder restablecer el entorno al estado que tenía antes de que comenzara el proceso de implementación. Esto puede incluir lo siguiente:

  • La capacidad de revertir cualquier cambio en el código en tu aplicación.
  • La capacidad de revertir cualquier cambio de configuración realizado en el entorno.
  • Usar una infraestructura inmutable y garantizar que las implementaciones no cambien el entorno. Estas prácticas facilitan la reversión de cambios de configuración.

Supervisa tus canalizaciones de CI/CD

Para que tu proceso automatizado de compilación, prueba e implementación siga ejecutándose sin problemas, supervisa las canalizaciones de CI/CD. Configura alertas que indiquen cuando falle cualquier elemento en cualquier canalización. Cada paso de tu canalización debe escribir instrucciones de registro adecuadas para que tu equipo pueda realizar un análisis de causa raíz si una canalización falla.

En Google Cloud, todos los servicios de CI/CD se integran en Google Cloud Observability. Por ejemplo:

Para obtener detalles sobre la supervisión y el registro, consulta Configura la supervisión, las alertas y los registros.

Implementa aplicaciones de manera segura

Revisa la sección Implementa aplicaciones de manera segura en la categoría seguridad, cumplimiento y privacidad del framework de arquitectura.

Establece lineamientos de administración para los lanzamientos de versiones

Para ayudar a tus ingenieros a evitar cometer errores y habilitar la entrega de software de alta velocidad, asegúrate de que tus lineamientos de administración para lanzar nuevas versiones de software estén documentados con claridad.

Los ingenieros de actualización supervisan cómo se compila y se entrega el software. El sistema de ingeniería de versiones se rige por cuatro prácticas:

  • Modo de autoservicio. Establece lineamientos para ayudar a los ingenieros de software a evitar errores comunes. En general, estos lineamientos se codifican en procesos automatizados.

  • Actualizaciones frecuentes. Una velocidad alta facilita la solución de problemas. Las actualizaciones frecuentes se basan en pruebas de unidades automatizadas.

  • Compilaciones herméticas. Garantiza la coherencia con tus herramientas de compilación. Crea versiones de los compiladores que usaste para compilar versiones ahora y hace un mes.

  • Aplicación de la política. Todos los cambios necesitan revisión de código, lo que incluye un conjunto de lineamientos y políticas para aplicar la seguridad. Cuando se aplican políticas, se mejora la revisión de código, la solución de problemas y las pruebas de un nuevo lanzamiento.

¿Qué sigue?