¿Qué es la integración continua?
La integración continua (Continuous Integration o CI) tiene como objetivo principal comprobar que cada actualización del código fuente no genere problemas en una aplicación que se está desarrollando. En un marco de trabajo en el que varios desarrolladores suben actualizaciones constantes de código fuente, fusionando el trabajo entre ellos, la integración continua permite que se compruebe en cada commit, si el nuevo ejecutable generado con los nuevos aportes, sigue funcionando correctamente con todos los test creados anteriormente. De esta forma se detectan los posibles errores en una fase muy temprana, identificando fácilmente cuales son los cambios recientes y la corrección se hace mucho más sencilla.
Además permite tener en cualquier momento un ejecutable de la aplicación estable, con la última versión de código, probado con garantías, con los test pasados y disponible para una demo.
Uno de los software más usados en integración continua es Jenkins (antes llamado Hudson). Jenkins te permite construir y testear proyectos software continuamente. Está atento a cada commit que hacen los integrantes del equipo de desarrollo, y cuando detecta uno, genera una nueva versión de la aplicación y pasa todos los test. En caso de que en algún proceso falle, envía un correo al integrante del equipo que ha generado el error con su commit y otro al administrador.
La configuración típica de un ecosistema de integración contínua es una máquina distinta por proyecto de software. Así si en un proyecto tenemos backend, cliente web, cliente android y cliente iOS, tendremos un total de 4 máquinas (pueden ser virtuales) las cuales harán todo el proceso para cada uno de los proyectos. También se pueden secuenciar las construcciones y verificaciones, por ejemplo en el caso anterior, iría primero el backend, y en el caso de que se genere correctamente, continuaríamos con las nuevas construcciones de los clientes, ya que en estos existen test de integración con el backend.
Adicionalmente se pueden instalar plugins que permitan ver de forma visual y en tiempo real el estado de los distintos proyectos software. Este plugin se puede usar por ejemplo para motivar al equipo de trabajo, poniéndolo en un monitor a la vista de todos, y con el código de colores del semáforo para visualizar que software funciona correctamente, y cual ha tenido fallos en la última versión. Esto motiva (y pica) al equipo a tener siempre la última versión libre de fallos para poder ver su proyecto en verde en la pantalla 🙂
Para iOS podemos seguir este tutorial (parte 1, parte 2), que te permite instalar un Jenkins en un equipo Mac directamente, y poder usar integración continua. Todos los procesos se hacen a través de la consola, salvo los test de aceptación que se abren en un simulador automáticamente (hay que usar un framework para esto, yo uso KIF): Compilar automáticamente el nuevo código subido al control de código fuente, pasar los test unitarios, integración y aceptación, obtener un informe del resultado de los test, crear un nuevo IPA para su distribución con los certificados correctos, incluso subir este a TestFlight. Ojo con los test de aceptación, usan el simulador del iPhone, por lo que no podremos pasarlos en un equipo en el que se esté desarrollando, ya que interrumpiría al desarrollador. Es aconsejable en este caso usar un equipo Mac independiente para usarlo para la integración continua con Jenkins.
En conclusión, hay que tener en cuenta que su instalación es un proceso complejo, con muchas configuraciones para cada proyecto que englobe el sistema que queremos integrar, y con cierta dificultad si no lo has hecho nunca antes. Pero utilizar integración continua es un buen sistema para tener en todo momento una versión de tu producto preparada para ser usada, poderla enseñar a los clientes y libre de fallos. Si además la combinamos con metodologías ágiles (por ejemplo SCRUM), seguro que nuestro proyecto llega a buen puerto y con gran calidad.



