Aprende a implantar integración continua desde cero (III): Consideraciones finales para implantar integración continua

Siguiendo el post anterior ( Aprende a implantar integración continua desde cero (III): Consejos y pasos para implantar integración continua), esta semana terminamos con los últimos consejos de cara a implantar integración continua.

5. Automatización del build

Aquí ya entraríamos en automatizar la compilación. Lo que te recomiendo es que consigas que con un único comando puedas compilar y generar los artefactos de toda la aplicación.
Esto te facilitará mucho las cosas a la hora de programar el servidor de integración continua, sobre todo Jenkins.
Para automatizar el build, puedes emplear scripts, herramientas como Ant o Maven…Lo que quieras.
Si utilizas Maven, te recomiendo que te plantees instalar un gestor de repositorios de artefactos como Nexus o Artifactory ( ¿Y para qué sirve Nexus o Artifactory? Entiende qué son los gestores de repositorios de Maven en menos de 10 min.).
Otro consejo que te doy es que intentes que la compilación no tarde demasiado.  Ve optimizando el proceso de compilación a lo largo del tiempo.
La compilación es el primer paso dentro de la integración continua, antes de ejecutar pruebas, por lo que si en ese punto tardamos mucho tiempo, todo el proceso se demorará mucho y no conseguiremos feedback rápido sobre qué falla en la aplicación.

6. Definir cuál va a ser el pipeline de integración continua

Antes de instalar el servidor de integración continua, piensa qué pasos, o por qué fases deberá ir pasando el código.
Define un pipeline de integración continua (una serie de fases, pasos), que luego programaremos en el servidor.
Para mí, en este punto es muy importante definir una estrategia, un plan de pruebas.
En este caso distinguiría entre las pruebas básicas que deben pasarse cada vez que se hace una subida al control de versiones, un smoke test para dar feedback rápido al desarrollador de si las cosas están medianamente bien y otra serie de pasos más avanzados con pruebas más a fondo (Smoke test: Detecta lo más pronto posible si los elementos críticos de la aplicación no funcionan.).
Algunos ejemplos:
– Ante una subida de código a la rama master, el servidor de integración continua descargará el código, lo compilará y:
ejecutará pruebas unitarias.
o desplegará el código a un entorno de integración y ejecutará pruebas de sistema.
– Luego pasará al entorno de test para otras pruebas manuales.
– O ejecutará pruebas de aceptación.
Establece el plan de pruebas, las comprobaciones que creas útiles y necesarias para tu aplicación.
Para ello ten en cuenta los distintos tipos de pruebas que hay y para qué sirve cada tipo de prueba (¿Pruebas de integración, funcionales, de carga…? ¡Qué jaleo! ¿Qué diferencias hay?).
Como ves, para llevar a cabo este punto es necesario tener claro el proceso de desarrollo de la empresa y las mejoras, y la estrategia de control de versiones.

7. Elegir e instalar servidor de integración continua

Una vez hecho todos los puntos anteriores pasaríamos a instalar y configurar el servidor de integración continua. Además de implementar el pipeline que hemos definido previamente.
Si por ejemplo usas Jenkins como servidor de integración continua, y en el paso anterior pensaste las distintas fases, etapas por las que va pasando el software, te será muy sencillo configurar el pipeline en Jenkins.
Cada etapa o fase puede ser una tarea (job) de Jenkins, que ejecutará la siguiente fase en caso de que todo sea un éxito.

8. Automatizar pruebas

Aunque ya comenté algo en el punto de definir el pipeline de integración continua, me gustaría recalcar que no creo que sea obligatorio tener todas las pruebas automatizadas  y ya listas para ejecutarlas desde el servidor de integración continua.
En su lugar, ve automatizando las pruebas del pipeline definido que consideres más primordiales primero y ve enlazándolas en el servidor cuando estén listas.
Y no te olvides de que las pruebas que automatices son código, que deberás mantener a lo largo del tiempo.

9. Automatizar despliegues

Otra cosa interesante es automatizar los despliegues, y programar el servidor de integración continua para que pueda realizarlos.
Con esto no me refiero a automatizar pasos a producción, integración continua como tal no está orientada a eso.
Por ejemplo, necesitaremos este punto si queremos desplegar el código a un entorno concreto para ejecutar una serie de pruebas automáticas, o al entorno de testing para pruebas manuales etc.
Otra cosa que debes plantearte en este punto es si los despliegues son automáticos, cómo vas a gestionar los cambios en las bases de datos, sobre todo si son relacionales, y estrategias de rollback o vuelta a versiones estables.
Para ayudarte un poco, puedes echarle un vistazo al siguiente post ¿Cómo mantengo bajo control las muchas bases de datos que hay en los entornos de desarrollo, pruebas, producción…?

10. Inspección continua

Este es uno de los puntos que dejaría para el último lugar a la hora de implantar integración continua.
Por inspección continua se entiende el ir realizando análisis de código periódicamente (por ejemplo con herramientas como SonarQube, Cómo interpretar métricas de calidad software: entendiendo el cuadro de mando de Sonar (1/3)), interpretar los resultados y plantear y llevar a cabo acciones de mejora de calidad del software.
Creo que si que es bueno ir formando al equipo en buenas prácticas de programación y aspectos de calidad.
También es bueno ir obteniendo métricas y mejorando poco a poco. Y todo esto es compatible y se podría hacer a la par que el resto de pasos para implantar integración continua.
Pero llegar al punto de que el servidor de integración continua marque como fallido builds que no sigan los estándares de calidad definidos por la empresa me parece duro, si el equipo no tiene experiencia en estos temas y se está formando.
Y sobre todo si antes no sabía nada de pruebas unitarias, integración, si se ha hecho un cambio en la estrategia de control de versiones etc.
Si por el contrario todo eso estaba ya bien definido, ve adelante con inspección continua. Lo que no veo productivo es sobresaturar al equipo.

11. Implementar entrega continua y despliegue continuo.

Si tu empresa tiene superada ya la integración continua, le va bien, tiene una estrategia de pruebas y un pipeline de integración continua fiable, os animo a llevar a cabo entrega continua (dejar el software en un estado listo para pasar a producción) y despliegue continuo (que cada cambio en el código, después de pasar por todo el pipeline de integración continua que definimos, se suba a producción).

Terminando…

Estas son unas pequeñas ideas y consejos que espero te sirvan para implantar la integración continua en tu empresa.
El empezar por una fase u otra dentro de las etapas que he mencionado dependerá del grado en el que tu empresa aplique ya esas buenas prácticas o no.
Para mi, los puntos imprescindibles a tener o por los que empezar son:
– Concienciar y formar a la gente.
– Tener una estrategia de control de versiones.
– Tener claro el proceso de desarrollo y dividir el trabajo en trozos.
Si tu empresa ya hacía todo esto, tenía automatizado el build, los despliegues, tenía un plan de pruebas, perfecto. Implantar integración continua solo será montar el servidor de integración continua y automatizar parte del proceso de desarrollo. Te animo incluso a que de primeras implantéis inspección continua.
Si no, no pasa nada, ve mejorando poco, implantando las distintas etapas. Notaréis muchísimos beneficios.
En general, recomiendo que implantes integración continua. A pesar de que cada empresa es un mundo, y que iréis encontrando distintos obstáculos, la mejora final merece la pena.

jgarzas

Ph.D. en informática, Postdoctorado en la Carnegie Mellon (EE.UU) e Ingeniero en Informática.

Primera vez que me tocó hacer una gestión Ágil en una empresa... año 2001. Desde entonces he trabajado en, o para, más de 90. Y he formado a más de 2000 alumnos.

También soy profe de la Universidad Rey Juan Carlos.

0 comentarios en “Aprende a implantar integración continua desde cero (III): Consideraciones finales para implantar integración continua”

  1. Me ha parecido interesantísima esta serie de artículos sobre integración continua.
    A mi particularmente me ha venido muy bien para tener una visión general de esa parte del desarrollo de soft y sobre todo, de una forma de implantación.
    Gracias por la información y la formación.
    PD: Por cierto, en esta última entrega, cuando haces referencia al la entrega 2 de 3 (al principio), el enlace apunta a la entrega 3 de 3.

  2. Me parecieron excelente la serie relacionado a integracion continua.
    En una documentacion de ella que puntos se tendrian que especificar para tener completo el documento, podrian mencionarmelos por favor
    SALUDOS

  3. Hola Ana, me pareció excelente esta serie de post, me aclararon muchísimo el concepto de integración continua.
    Quería saber si has tenido o conoces como implementar IC en herramientas de BI como Qlikview?

  4. Sin duda alguna muy interesante estos posts, increiblmente he trabajado todo este tiempo con ello, sin embargo no tenia bien en claro este concepto y ahora me facilita donde no sotros podermos mejorar. Muchas Gracias!

  5. Excelente post Ana! me fue de mucha ayuda para poder entender el proceso e implementar mi servidor de integración continua :D, Muchas Gracias!

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *