Hudson es el sistema de integración continua que utilizamos.
La idea básica es la siguiente:
Cualquiera de nuestros sistemas está compuesto por una serie de módulos independientes, pero que tienen parte del código común (reglas de negocio, librerías de funciones, cosas así).
Cuando hacemos un cambio en cualquier parte del sistema, dentro de las zonas comunes, es posible que es cambio funcione para el proceso con el que estamos trabajando, pero que no compile correctamente en otro proceso. El ejemplo clásico: ponemos un parámetro nuevo en una función… en el proceso con el que estamos trabajando hemos hecho que compile, incluyendo el nuevo parámetro en la invocación, pero otros procesos que la utilicen siguen teniendo la llamada antigua, y romperían el código.
Un proceso de integración continua se basa en un sistema que:
- Se activa cuando hay algún cambio de cualquier tipo en el código fuente de un sistema. Por ejemplo, en nuestro caso, cuando hay un cambio en el repositorio Subversion.
- Recompila todos los procesos que utilizan el código fuente que ha cambiado.
- Si alguno de ellos presenta un fallo en la compilación, avisa al propietario del módulo, que así puede arreglar el error en el momento en el que se produce.
Si no se hace de esta forma, procesos que se toquen muy de vez en cuando presentan una situación de obsolescencia: el resto del sistema ha cambiado mucho desde que se compilaron por última vez, y es posible que cueste mucho volver a hacer ‘funcional’ el proceso.
Incluyendo la teoría de desarrollo basado en tests y el sistema de integración continua, podemos hacer que cada vez que se tenga que recompilar un nuevo proceso, se ejecuten todos los tests que se hayan definido… de esta forma podemos estar seguros de que no sólo no se ha roto la compilación por el cambio, sino que la funcionalidad tampoco ha cambiado.