¿Qué es integración continua?
Integración continua es un tema el cual se ha vuelto muy popular en los últimos años, principalmente, por el impulso que ha tenido por parte de grandes empresas, tales como Netflix, Uber, entre otros; Las cuales basan su desarrollo en un enfoque agilista.
Al nosotros hablar de integración continua comúnmente, también hablaremos de entrega continua y despliegue continuo.
En esta ocasión estaremos explicando cada uno de estos temas y veremos las ventajas de su implementación 😃.
Introducción
En muchas ocasiones como desarrolladores estaremos haciendo deploy de nuestras aplicaciones de forma manual; Por ejemplo, si hablamos de un sitio web, el primer paso es subir todos los cambios a nuestra rama principal, posteriormente ejecutar todas las pruebas unitarias, si las pruebas son exitosas se procede ha compilar el proyecto y subir todo los cambios ha producción, ejecutar las migraciones y listo, los clientes ya podrán hacer uso de los nuevos features en el sitios web, claro, siempre y cuando ninguno de los pasos anteriores hayan fallado. 😛
Todos estos pasos a menudo son tediosos e involucran una cierta cantidad de tiempo, tiempo en el que regularmente el desarrollador no tiene mucho que hacer 😰. Para evitar estos problemas surge la integración, entrega y despligue continuo.
Integración continua.
Continuous integration.
Verás, la integración continua es una práctica de desarrollo en la cual los desarrolladores integran su código a un repositorio central, esto de forma periódica, varias veces por día. Cada vez que un miembro del equipo realiza un commit sobre el control de versiones (git por ejemplo), el proyecto se compila y se ejecutan todas sus pruebas unitarias, todo esto de forma automática.
La integración continua hace énfasis en la ejecución automática de las pruebas unitarias. De esta forma se garantiza que los errores se detecten en una etapa temprana en el desarrollo, con lo cual se facilita la corrección de los mismos.
De igual forma, con integración continua se alienta a los desarrolladores a realizar merges de forma constante, después de completar tareas pequeñas. Esto tiene muchas ventajas, por ejemplo, el equipo de desarrollo estará siempre trabajando con una versión actualizada del proyecto, cada commit será una posible versión y por supuesto, al estar actualizando el repositorio en una forma constante evitaremos que en algún momentos salgan a relucir cientos de conflictos al realizar el merge 😓.
Al compilar y testear el proyecto por cada uno de los commits realizado a una rama en concreto (comúnmente master), se garantiza que la rama se encuentre libre de bugs (por lo menos los testeables) y que se mantenga una calidad constante.
Entrega continua.
Dontinuous Delivery.
Entrega continua no es más que una extención de integración continua. Al realizar un commit sobre la rama principal se ejecutarán (de manera automática) todos los pasos necesarios para hacer que el proyecto se libere a producción. Se compila el código, se ejecutan pruebas unitarias, se ejecutan migraciones, etc ... Todo esto en un ambiente que no es producción, es decir, entrega continua permite que nuestro proyecto esté listo para que el usuario final hago uso de él, sin embargo, despliegue a producción no se realiza. Este pequeño, y último paso (realizar el deploy) será ejecutado de forma manual, esto con la finalidad de tener un control sobre cuándo liberar el producto. Habrá ocasiones en las cuales será necesario postergar la liberación del software, ya sea por estrategias de marketing, petición del cliente, etc ...
La gran ventaja de entrega continua es que nos permite reducir la cantidad de errores al momento de realizar el deploy de la aplicación, puesto que ya todos los pasos para la liberación fueron ejecutados anteriormente.
Podemos concluir que el objetivo de entrega continua no es colocar el producto en producción, sino más bien que el software esté disponible para su puesta en producción en cualquier momento 🐋.
Para implementar entrega continua será necesario haber implementado de forma correcta integración continua.
Despligue continuo
Continous Deployment.
Si en entrega continua nos quedamos a un solo paso para que el usuario final utilice el producto, con despliegue continuo todo el ciclo de entrega se completa.
Utilizando despliegue continuo al realizar un commit sobre la rama principal, se ejecutarán todos los pasos necesarios (de forma automática) para el despliegue del proyecto a producción. Esto se traduce en que el usuario final estará utilizando un producto en constante actualización.
Para implementar despliegue continuo será necesario haber implementado de forma correcta integración continua.
Herramientas
Actualmente existe una gran cantidad de herramientas en el mercados las cuales nos permiten implementar integración y entrega continua. Entre todas estas herramientas hay una que destaca por ser muy popular, me refiero a Jenkins.
Jenkins es un servidor de integración continua, open-source, escrito en java, el cual nos permite automatizar todos los procesos de integración y entrega mediante tareas, tareas que son extremadamente fáciles de crear y programar. Con Las tareas podemos monitorear cambios sobre un control de versiones, compilar código, ejecutar pruebas, vaya, podemos realizar todos los pasos necesarios para que el software esté listo para su puesta en producción.
Algo interesante a mencionar, es que si en algún momento alguna tarea falla, Jenkins podrá notificar al equipo de desarrollo, al product Manager o cualquier persona responsable del error, de tal forma que se tomen cartas en el asunto y se llegue a una solución lo más pronto posible.
Con Jenkins podremos obtener métricas sobre el software, cantidad de pruebas exitosas, cobertura de código, documentación, tiempo de compilación, etc ...
Y cuéntanos, ¿En tu equipo de desarrollo implementan integración continua?, ¿Qué tal te parece?, ¿Lo recomendarías para proyectos grandes?
-
check_circle_outlineMódulo 1 | 9 clases
Introdución
expand_more-
done_all
Clase 1
Introducción
-
done_all
Clase 2
Integración continua
-
done_all
Clase 3
Instalación Jenkins
-
done_all
Clase 4
Primera tarea
-
done_all
Clase 5
Información de tareas
-
done_all
Clase 6
Ejecución periodicamente
-
done_all
Clase 7
Ejecución en cadena pt1
-
done_all
Clase 8
Ejecución en cadena pt2
-
done_all
Clase 9
Ejecución remota
-
-
check_circle_outlineMódulo 2 | 7 clases
Practica
expand_more