¿Cuál es la nomenclatura oficial?

CI/ CD (Continuous Integration – Continue Distribution)

La CI/CD es un método para distribuir aplicaciones a los clientes con frecuencia mediante el uso de la automatización en las etapas del desarrollo de aplicaciones. Los principales conceptos que se atribuyen a la CI/CD son integración continua, la distribución continua y la implementación continua.

La CI/CD e una solución para los problemas que puede generar la integración del código nuevo a los equipos de desarrollo y de operaciones (también conocido como “Integration Hell”)

En concreto, la CI/CD incorpora la automatización continua y el control permanente en todo el ciclo de vida de las aplicaciones, desde las etapas de integración y prueba hasta las de distribución e implementación. Este conjunto de prácticas se conoce como “canales de CI/CD”, y cuenta con el soporte de DevOps.

CD - Continuous Distribution

La “CD” en CI/CD se refiere a la distribución o la implementación continuas, los cuales son conceptos relacionados que suelen usarse indistintamente. Ambos conceptos se refieren a la automatización de las etapas posteriores, del canal, pero a veces se usan por separado para explicar la cantidad de automatización que se está incorporando.

Por lo general, la distribución continua se refiere a los cambios que implementa un desarrollador en una aplicación, a los que se les realizan pruebas de errores automáticas y que se cargan en un repositorio (como GitHub o un registro de contenedor), para que luego el equipo de operaciones pueda implementarlos en un entorno de producción en vivo. Es una solución al problema de la poca visibilidad y comunicación entre los equipos comerciales y de desarrollo. Con ese fin, el propósito de la distribución continua es garantizar que la implementación del código nuevo se lleva a cabo con el mínimo esfuerzo.

Conceptos básicos - Integración

Dimensiones y prácticas

Integración continua (Continuous Integration): Práctica de desarrollo que requiere que los desarrolladores integren el código en un repositorio compartido al menos una vez por día para ser verificado de forma automatizada, permitiendo que los equipos identifiquen y localicen problemas de integración de manera temprana.

Entrega continua: Metodología que se enfoca en asegurar que desarrollos estén listos para liberación en cualquier momento del ciclo de desarrollo dadas las condiciones de calidad y estabilidad necesarias.

Despliegue continuo (Continuous Distribution/Deployment): Práctica que habilita el despliegue automático a cualquier ambiente, de cada desarrollo, que pasando un conjunto de pruebas, potencialmente este pase a producción.

Operaciones continuas: Conjunto de procesos que permite la creación y aprovisionamiento rápido de ambientes a lo largo del ciclo de desarrollo y producción enfatizando las operaciones como un servicio.

Monitoreo continuo: Permite que los equipos reciban información en tiempo real sobre el estado de las aplicaciones y servicios tanto a través de toda la cadena desde testing hasta producción.

Integración de los procesos

CI - Continuous Integration

La integración continua es una práctica de desarrollo de software mediante la cual los desarrolladores combinan los cambios en el código en un repositorio central de forma periódica, esto perite que se ejecuten versiones y pruebas automáticas.

La integración continua se refiere en su mayoría a la fase de creación o integración del proceso de publicación de software y conlleva un componente de automatización (ej. CI o servicio de versiones) y un componente cultural (ej. aprender a integrar con frecuencia).

Los objetivos clave de la integración continua consiste en encontrar y arreglar errores con mayor rapidez, mejorar la calidad del software y reducir el tiempo que se tarda en validad y publicar nuevas actualizaciones de software (Time to Market)

¿Porque es necesaria la integración continuar?

Antes era común que los desarrolladores de un equipo trabajasen aislados durante un largo periodo de tiempo y solo intentasen combinar los cambios en la versión maestra una vez que habían completado el trabajo (Merge Day). Como consecuencia, la combinación de los cambios en el código resultaba difícil y ardua, además de dar lugar a la acumulación de errores durante mucho tiempo que no se corregían. Estos factores hacían que resultase más difícil proporcionar las actualizaciones a los clientes con rapidez.

¿En qué consiste la integración continua?

Con la CI, los desarrolladores envían los cambios de forma periódica a un repositorio compartido con un sistema de control de versiones como Git. Antes de cada envío, los desarrolladores pueden elegir ejecutar pruebas de unidad local en el código como medida de verificación adicional antes de la integración. Un servicio de integración continua crea y ejecuta automáticamente pruebas de unidad en los nuevos cambios realizados en el código para identificar inmediatamente cualquier error.

¿Cuál es el objetivo de la Integración Continua en desarrollos modernos?

El objetivo del desarrollo de las aplicaciones modernas es contar con múltiples desarrolladores que trabajen de forma simultánea en distintas funciones de la misma aplicación. Sin embargo, si una empresa fusiona todo el código fuente diversificado en un solo día (conocido como el “Merge Day”), las tareas resultantes pueden ser tediosas y manuales, y pueden tomar mucho tiempo. Esto sucede porque, cuando un desarrollador que trabaja de forma aislada implementa un cambio en una aplicación, existe la posibilidad de que este cambio entre en conflicto con aquellos cambios implementados simultáneamente por otros desarrolladores. Este problema puede agravarse aún mas si cada desarrollador personaliza su propio entorno de desarrollo integrado (IDE) local, en lugar de que el equipo acuerde un IDE basado en la nube, Esto significa probar todo, desde las clases y el funcionamiento hasta los distintos módulos que conforman toda la aplicación. Si una prueba automática detecta un conflicto entre el código nuevo y el actual.

Fuente:
https://www.redhat.com/es/solutions/cloud-native-development

¿Cómo definimos todos juntos la Integración Continua?

Primero, significa probar todo, desde las clases y el funcionamiento hasta los distintos módulos que conforman toda la aplicación. Si una prueba automática detecta un conflicto entre el código nuevo y el actual, la CI facilita la resolución de esos errores con frecuencia y rapidez.

Entregar continuamente (Pila de Devops, Agile y Scrum)

El proceso de Automatizar - Entregar - Implementar

Después de la automatización de los diseños y las pruebas de unidad e integración de la CI, la distribución continua automatiza la liberación de ese código validado hacia un repositorio. Por eso, para que el proceso de distribución continua sea eficaz, es importante que la CI ya esté incorporada a su canal de desarrollo. El objetivo de la distribución continua es tener una base de código que pueda implementarse en un entorno de producción en cualquier momento.

En la distribución continua, cada etapa (desde la fusión de los cambios en el código hasta la distribución de los diseños listos para la producción) implica la automatización de las pruebas y de la liberación de código. Al final de este proceso, el equipo de operaciones puede implementar una aplicación para que llegue a la etapa de producción de forma rápida y sencilla.

Integrando continuamente en la práctica de DevOps (Quién hace qué)

Herramientas más utilizadas

Ejemplo de integración continua (CI) Pipeline

Pipeline de despliegue continuo (CD)