En el desarrollo de software no trabaja una única persona, sino que es un equipo integrado por varias personas que se reparten las tareas. Cada una de ellas puede realizar cambios de códigos de manera continua. Para evitar que se cree un entorno confuso y sin trazabilidad, se ha desarrollado la integración continua o CI. Esta automatiza la integración de dichos cambios dentro de un mismo proyecto de software.
Se trata de una práctica que forma parte de DevOps, y que incluye la existencia de un repositorio central donde se llevarán a cabo todas las pruebas necesarias. Hoy veremos en detalle en qué consiste y lo pondremos en relación con otros enfoques de la ingeniería de software. Como la entrega continua y el despliegue continuo.
La integración continua es una práctica de ingeniería de software que consiste en integrar códigos nuevos que se escriben con frecuencia en todo el ciclo de desarrollo en una base común. Esta acción se debe llevar a cabo al menos una vez al día.
Desde aquí, se realizarán pruebas automáticas en todas las iteraciones. Estas se centran en identificar los posibles fallos o incidencias que puedan tener lugar. De esta manera, se pueden solucionar en fases tempranas, en las que la resolución será más sencilla. Lo que se pretende es que estos problemas no alcancen la parte final antes dl lanzamiento del proyecto.
Gracias a este funcionamiento de integración continua, se logra que el software final sea de mayor calidad, se optimiza todo el proceso de compilación y, además, se agilizan las planificaciones de entrega de cada fase.
Pero como decíamos en la introducción, la integración continua o CI es solo uno de los distintos enfoques que hay en la ingeniería de software y el control de versiones. Existen otros como la entrega continua.
En este enfoque de la ingeniería de software, conocido también por sus siglas en inglés CD (Continuous Delivery), los equipos de desarrollo producen ciclos cortos para asegurarse de que el software se puede liberar en cualquier momento y de manera confiable. Se utiliza para el desarrollo de aplicaciones y es una prolongación de la integración conjunta, ya que implementa todos los cambios detectados en esta fase en un entorno de pruebas. Más tarde, se volcarán a la producción.
Pero además de centrarse en la liberación del software, también lo hace, como la CI, en la automatización del proceso de despliegue. Es decir, de la integración, las pruebas, la entrega de las actualizaciones y la implementación en los entornos de producción. Los cambios que se efectúen pasan a ser consistentes y se pueden repetir, se reduce el riesgo de un error humano y se consigue una retroalimentación rápida del funcionamiento del software en un entorno real. Se utiliza para productos con nuevas características, corrección de fallos y mejoras de rendimiento, y también para facilitar la implementación de DevOps.
Un tercer enfoque es el despliegue continuo. En esta aproximación, los equipos de desarrollo implementan funcionalidades con frecuencia y mediante la automatización de las tareas. Gracias a ello se aumenta la fiabilidad. Puesto que sus siglas en inglés también son CD, se puede confundir con la entrega continua. El significado en este caso es Continuous Deployment y se utiliza en la metodología GitOps.
El despliegue continuo se distingue por llevar la automatización un paso más allá. No se queda en la integración y las pruebas, sino que también incluye la implementación en la producción. Por tanto, cada cambio que pasa las pruebas automatizadas se despliega automáticamente a los usuarios finales, sin intervención manual. Para que sea posible, se necesita una infraestructura robusta y prácticas de monitoreo avanzadas. Se utilizan estrategias como el despliegue gradual (canary releases) y los despliegues en azul/verde (blue/green deployments).
Los tres conceptos están muy relacionados entre sí, dado que todos son enfoques de la ingeniería de software. Pero, además de por las siglas, se pueden confundir porque a veces se solapan unos con otros o se implementan juntos para mejorar la calidad y la eficiencia en el desarrollo de software. Por eso, vamos a ver cuál es el objetivo, el proceso y el nivel de intervención humana en cada uno.
- Objetivo: busca facilitar la integración de código en el repositorio compartido entre los desarrolladores para realizar cambios con regularidad.
- Proceso: la ejecución de las compilaciones y las pruebas unitarias es automática. Permite detectar fallos en las primeras fases.
- Participación humana: encargada de corregir los errores que se identifiquen.
- Objetivo: asegurar que el código siempre esté listo para lanzarse en producción.
- Proceso: se automatizan pruebas completas que incluyen la integración y la interfaz de usuario, para maximizar la calidad del software antes del despliegue.
- Participación humana: el despliegue necesita aprobación manual, pero el proceso de preparación del código está automatizado.
- Objetivo: automatizar toda la implementación del software en producción sin intervención manual.
- Proceso: los cambios que van pasando las pruebas automatizadas, también se despliegan automáticamente a los usuarios finales.
- Participación humana: desaparece la intervención manual. Esta es la principal diferencia con la Entrega Continua.
Para poder avanzar en la transformación digital y mejorar los procesos que permiten desarrollar software de calidad, las empresas deben estar al tanto de las diferentes metodologías que existen. Pero además de los conocimientos en DevOps, también se requieren habilidades relativas al análisis de empresas, para que se puedan identificar y planificar los elementos que se deben aplicar a los productos digitales. Para adquirirlas, consulta nuestra oferta formativa.