Para que disponga de más contexto acerca del término "CI", es importante indicar que "CI" es la abreviatura en inglés de "Integración Continua". La definición de CI es la siguiente: se trata de la práctica de hacer que todos los que trabajan en el mismo proyecto fusionen regularmente sus cambios con la base de código en un repositorio central. Como en los proyectos suele trabajar más de un desarrollador, es importante combinar las piezas del trabajo en una ubicación central. Lo ideal sería automatizar este proceso y llevarlo a cabo varias veces al día. El objetivo de la integración continua es mantener un enfoque fiable para compilar y liberar software promoviendo la colaboración, la automatización y los ciclos cortos de feedback.
La práctica de la integración continua comienza con la confirmación de los cambios en un sistema de control de versiones/fuentes con regularidad, para que todos construyan sobre la misma base. Cada confirmación desencadena una compilación y una serie de pruebas automatizadas para verificar el comportamiento y asegurar que el cambio no ha estropeado nada. Aunque la integración continua es beneficiosa por sí misma, también es el primer paso hacia la implementación de un proceso de CI/CD.
Al adoptar una definición clara de la CI e implementar la práctica en su proceso de desarrollo, los equipos pueden agilizar su flujo de trabajo y mejorar la calidad de su software.
Los ingredientes clave de la integración continua son los siguientes:
Para que todos construyan sobre la misma base, es necesario que trabajen desde el mismo repositorio y que compartan sus cambios con los demás con frecuencia. Una buena regla general es que todo el mundo envíe sus cambios a master/trunk al menos una vez al día.
Una vez que se ha confirmado un cambio, el siguiente paso es compilar la solución y someterla a una serie de pruebas automatizadas para verificar el comportamiento. La automatización de este proceso es una parte integral de la integración continua; compilar y testear manualmente conlleva tiempo y favorece los errores, y hace que el objetivo de integrar los cambios diariamente sea poco práctico. Las herramientas de compilación y los marcos de pruebas que se utilizan dependen del lenguaje en el que se trabaja.
Una vez que los scripts y las pruebas están en marcha, es necesario mantener el proceso. Eso significa añadir pruebas automatizadas como parte de cualquier nueva función, hacer frente a los fallos y supervisar el rendimiento del proceso.
Añadir un servidor de CI que se encargue de supervisar el repositorio, desencadenar los builds, ejecutar las pruebas automatizadas y cotejar los resultados ayuda a unir todas estas piezas, ahorrando tiempo en la escritura de la lógica de automatización personalizada, y proporciona información adicional, como métricas de cobertura de código y el historial de builds.
Aunque estas herramientas y procesos son importantes a la hora de implementar la integración continua, para obtener lo mejor de la integración continua se necesita que las personas adopten esta práctica. Como equipo de desarrollo, tiene que adaptar sus procesos para que incluyan la confirmación en el máster con regularidad, añadiendo pruebas automatizadas a cualquier nueva funcionalidad y priorizando la reparación de la compilación si algo va mal. Trabajar con el equipo de control de calidad para priorizar, diseñar y mantener las pruebas automatizadas, y colaborar con el personal de infraestructura para suministrar máquinas en las que ejecutar las compilaciones y pruebas, ayudará a derribar la compartimentación organizativa.
Aunque la integración continua ofrece ventajas no solo para los desarrolladores sino para la organización en su conjunto, eso no significa que siempre sea recibida con los brazos abiertos.
Para muchas empresas de desarrollo, DevOps representa un gran cambio en la forma de trabajar y desafía los procesos existentes. Se necesita una buena comunicación para coordinar el esfuerzo entre los equipos e inculcar una cultura de colaboración.
Si ya se siguen metodologías Agile, el cambio suele ser un poco más fácil, ya que la importancia de escuchar el feedback para asegurarse de que se compila lo correcto, y la noción de los equipos autoorganizados, ya deberían haber ganado terreno.
Si no es el caso, reconocer que se trata de un cambio importante, implicar a los empleados, empezar poco a poco y demostrar los beneficios a medida que se avanza puede ayudar a convencer a los compañeros de equipo.
La integración continua también se enfrenta a retos más prácticos. Si trabaja en una aplicación grande y monolítica, los tiempos de compilación pueden ser lentos, y si los entornos de prueba son escasos, puede ser un reto paralelizar las ejecuciones de prueba.
Tener visibilidad de su proceso de integración continua y utilizar métricas para identificar los cuellos de botella puede ayudar a cuantificar los costes y beneficios de invertir en cambios de arquitectura, infraestructura adicional y cobertura de pruebas automatizadas.
Con la ayuda de la integración continua, los equipos pueden acelerar su ciclo de lanzamiento de software sin sacrificar la calidad. El objetivo principal de la integración continua es mitigar los riesgos potenciales que puedan surgir durante la implementación y acortar el bucle de feedback.
Entre las principales ventajas de la integración continua se incluyen las siguientes:
La integración, entrega e implementación continuas ayudan a las empresas a reducir costes y a reducir considerablemente el ciclo de entrega de software. Cuando se hacen bien, son indispensables para hacer más eficiente el proceso de compilación, prueba y lanzamiento de software. Algunas buenas prácticas de la CI/CD son las siguientes:
Crear un proceso de CI/CD estable y fiable es imposible sin las herramientas de CI/CD adecuadas. Ayudan a coordinar las distintas partes del proceso, desde el inicio de la integración hasta la activación de las pruebas automatizadas y la implementación del código a producción. Tanto si su equipo utiliza una herramienta integrada de CI/CD que admite todas las etapas del proceso de CI/CD, como TeamCity, como si confía en diferentes instrumentos para diferentes propósitos, las herramientas que elija deben admitir toda la pila tecnológica con la que trabaja su equipo. También deben poder integrarse con el resto del software que utilice para trabajar, y ser lo suficientemente personalizables y flexibles como para soportar cualquier nivel de complejidad del flujo de trabajo.
En lugar de contrastar los beneficios de la CI frente a la CD, es más útil considerar cómo estas diferentes partes del proceso de desarrollo trabajan juntas para ayudarle a entregar un software sin errores a los usuarios finales.
La integración continua es el proceso de fusión de los cambios de código en una rama principal. La entrega continua se basa en los cimientos de la automatización de las pruebas y la compilación establecidos en la fase de integración continua. La implementación continua es la etapa final del proceso de CI/CD, en la que la nueva versión del software se entrega a los usuarios finales una vez que se han cumplido todos los requisitos.
Adoptar la integración continua ayuda a acelerar el proceso de desarrollo al tiempo que mejora la calidad del código. La automatización de estos pasos le permite trabajar de forma más eficiente y centrarse en añadir valor a sus usuarios. Pero la integración continua es solo el principio del proceso de CI/CD. La siguiente etapa, la entrega continua, aplica los principios de DevOps a la siguiente parte del proceso de lanzamiento.