Integración continua
La integración continua es una práctica muy común en el desarrollo de software. El término apareció por ahí de 1993 en una publicación de Matthew Pittman, y a partir de ahí se comenzó a popularizar.
El nombre lo revela todo: consiste en que todos los desarrolladores de un equipo junten su trabajo de manera sistemática para garantizar que la aplicación que están programando "funcione" en todo momento. A este acto de juntar el trabajo es lo que se conoce como integración, y es continua porque, en teoría, debería realizarse con frecuencia, digamos que cada vez que un desarrollador corrija un bug, termine de programar una función o un módulo de la aplicación.
"Broken build"
Al finalizar cada integración se debe compilar la aplicación completa y ejecutar todas las pruebas necesarias. En caso de que los test no pasen, o peor aún, que la aplicación no funcione, el equipo debe entrar en un estado de "broken build" o… compilación fallida. En este estado, la meta del equipo debe enfocarse por completo en corregir el problema que causó que la compilación o las pruebas fallaran.
Si, por otro lado, la compilación es exitosa y todas las pruebas pasan correctamente, no pasa nada, el equipo de desarrolladores continua trabajando normalmente.
Con esto se asegura que se tiene una aplicación siempre lista y funcional, sin importar en qué etapa del desarrollo se encuentre. Como ya te imaginas, esto requiere un montón de disciplina tanto personal como grupal, todos deben estar comprometidos con el trabajo que se está haciendo.
Herramientas
Si bien podrías usar la integración continua sin ninguna herramienta más que nuestros entornos de desarrollo, hacer esto pues no es lo ideal. Es por eso que existen muchas herramientas que por su propia cuenta tienen mucho valor, aunque no son específicas para hacer CI, y estas son:
- Los sistemas de control de versiones, que nos ayudarán a realizar las integraciones de manera más sencilla.
- Herramientas para automatizar la compilación, es decir, que no tenga que haber nadie que le pique al botón de Build o Run en un IDE para que la aplicación se empiece a compilar.
- Herramientas de automatización de pruebas, que es más o menos lo mismo que lo de compilación, pero para ejecutar las pruebas.
Herramientas de CI
Ahora, hay algunas herramientas que nos ayudarán a implementar la integración continua de manera más sencilla, ambas son opcionales pero altamente recomendadas:
- Una forma de alertar a los usuarios sobre cualquier evento de la compilación, como si esta falló o fue exitosa. Puede ser desde un correo electrónico a todos los miembros del equipo de desarrollo
- Opcionalmente (y altamente recomendado) podemos hacer uso de un sistema de integración continua, que nos permita ejecutar las tareas de forma automática.
Críticas
Ahora, esta práctica no se salva de las críticas.
Una de las más grandes críticas se basa en el hecho de que si la integración falla, los desarrolladores deben dejar su trabajo y dedicarse a resolver cualquiera que sea el problema. Sin duda te darás cuenta de que esto representa un gran problema, porque interfiere con la concentración del equipo. Además esta puede llevarnos a un estado en que mejor decidamos no integrar nuestro trabajo, por miedo a hacer que la compilación falle.
La otra es que si no tenemos bien refinado el proceso, se pueden ocasionar cuellos de botella, si la compilación tarda mucho o si los tests tardan mucho tiempo, se puede tener a un desarrollador esperando al resultado de su integración. Ahora, ¿te imaginas si dos subieran su trabajo al mismo tiempo?
Lo que en realidad pasa
Muchas veces ocurre que se tienen todas las herramientas y todo configurado, pero en realidad no aplicas la integración continua:
La compilación falla… pero a nadie le importa y todos siguen trabajando como si nada, tal vez alguien intente resolver el problema en el código a unos días de realizar la liberación a producción.
Una alternativa es evitar que la rama principal se rompa y fallar "en secreto", es decir, que exista un intermediario entre el código funcional de la aplicación y el desarrollador. Y que en caso de que falle, se le informe únicamente a quien hizo que fallara para que él trate de resolverlo antes de detener toda la producción.
Sistemas completos
Finalmente, si deseas implementar la integración continua en tu lugar de trabajo, existen algunas herramientas que te pueden facilitar el trabajo:
- Travis CI
- Bitrise
- AppVeyor
- Codeship
- Runnable
- Ver más