jueves, 3 de octubre de 2019

¿Qué es la integración continua/distribución continua (CI/CD)?

La CI/CD es un método para distribuir aplicaciones de forma frecuente a los clientes mediante el uso de la automatización en las etapas del desarrollo de las aplicaciones. Los principales conceptos que se atribuyen a la CI/CD son la integración continua, la distribución continua y la implementación continua. La CI/CD es una solución para los problemas que puede generar la integración del código nuevo a los equipos de desarrollo y operaciones (también conocida como "el infierno de la integración").


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 "canalizaciones de CI/CD", y cuenta con el soporte de los equipos de desarrollo y de operaciones que trabajan de forma conjunta y con agilidad.

¿Cuál es la diferencia entre CI y CD (y la otra CD)?

Las siglas CI/CD tienen significados diferentes. La "CI" en CI/CD siempre se refiere a la integración continua, que es un proceso de automatización para los desarrolladores. Si la CI tiene éxito, los cambios del código nuevo en una aplicación se diseñan, se prueban y se combinan periódicamente en un repositorio compartido. Esto soluciona el problema de que se desarrollen demasiadas divisiones de una aplicación al mismo tiempo, porque podrían entrar en conflicto entre sí.

La "CD" en CI/CD se refiere a la distribución continua o a la implementación continua, que son conceptos relacionados y que a veces se usan indistintamente. Ambos conceptos se refieren a la automatización de las etapas posteriores de la canalización, pero a veces se usan por separado para explicar la cantidad de automatización que se está realizando.

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 lleve a cabo con el mínimo esfuerzo.

La implementación continua (la otra "CD") hace referencia a la liberación automática de los cambios que implementa el desarrollador desde el repositorio hasta la producción, para que los clientes puedan usarlos. Así se resuelve el problema de sobrecargar a los equipos de operaciones con procesos manuales que retrasan la entrega de las aplicaciones. Esto se basa en los beneficios de la distribución continua y automatiza la próxima etapa de la canalización.

La CI/CD puede especificar ya sea las prácticas relacionadas de integración y distribución continuas solamente, o las tres prácticas vinculadas de integración continua, distribución continua e implementación continua. Para complicarlo un poco más, el término "distribución continua" también abarca los procesos de la implementación continua.

En realidad no vale la pena meterse en este enredo semántico. Solo recuerde que la CI/CD es un proceso que suele percibirse como una canalización y que implica incorporar un alto nivel de automatización continua y control constante al desarrollo de las aplicaciones. El significado de los términos varía por caso, y depende de la cantidad de automatización que se ha incorporado a la canalización de CI/CD. Muchas empresas comienzan con la incorporación de la CI, y luego van automatizando la distribución y la implementación como parte de las aplicaciones nativas de la nube, por ejemplo.

Integración continua

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 organización fusiona todo el código fuente diversificado en un solo día (conocido como el "día de la fusión"), las tareas resultantes pueden ser tediosas y manuales, y pueden tomar mucho tiempo. Esto sucede porque, cuando un desarrollador trabaja de forma aislada para implementar un cambio en una aplicación, existe la posibilidad de que este cambio entre en conflicto con otros cambios implementados simultáneamente por otros desarrolladores.

La integración continua (CI) ayuda a que los desarrolladores fusionen los cambios que introducen en el código para incorporarlos a una división compartida (o "rama") con más frecuencia, incluso diariamente. Una vez que se fusionan los cambios implementados por un desarrollador en una aplicación, se validan con el desarrollo automático de la aplicación y la ejecución de distintos niveles de pruebas automatizadas (generalmente, pruebas de unidad e integración) para verificar que los cambios no hayan dañado la aplicación. 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 existente, la CI facilita la resolución de esos errores con frecuencia y rapidez.

Distribución continua

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, a fin de lograr un proceso de distribución continua eficaz, es importante que la CI ya esté incorporada al flujo de desarrollo. El objetivo de la distribución continua es tener una base de código que esté siempre lista para implementarla en un entorno de producción.

En la distribución continua, cada etapa (desde la fusión de los cambios de código hasta la distribución de los diseños listos para la producción) implica la automatización de pruebas y 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.

Implementación continua

La última etapa de una canalización de CI/CD lista es la implementación continua, que es una extensión de la distribución continua. Recordemos que esta última automatiza la liberación de un diseño listo para la producción a un repositorio del código. A su vez, la implementación continua automatiza la liberación de una aplicación a producción. Debido a que no hay una entrada manual en la etapa de la canalización anterior a la producción, la implementación continua depende, en gran medida, del correcto diseño de la automatización de pruebas.

En la práctica, la implementación continua implica que el cambio implementado por un desarrollador en una aplicación pueda ponerse en marcha unos cuantos minutos después de escribirlo (en el supuesto de que haya pasado las pruebas automatizadas). Esto facilita mucho más el proceso de recibir e incorporar continuamente los comentarios de los usuarios. En conjunto, todas estas prácticas de CI/CD conectadas hacen que la implementación de una aplicación se lleve a cabo con menos riesgos, ya que es más fácil liberar cambios en las aplicaciones en fragmentos pequeños, en vez de hacerlo de una sola vez. Sin embargo, también deben realizarse muchas inversiones iniciales, ya que las pruebas automatizadas deben diseñarse para que se adapten a las distintas etapas de prueba y entrega en la canalización de la CI/CD.

No hay comentarios.:

Publicar un comentario

Entradas populares