Aportes de la Integración Continua (CI) a un proyecto y su equipo.

Guillermo Farías Pavez
lemontech-engineering
7 min readOct 2, 2020

Existen muchas publicaciones (quizás cientos) respecto a qué es la integración continua en un proyecto de sotfware, donde explican sus detalles técnicos y dan ejemplos prácticos, pero pocas explican los beneficios que aporta al equipo que está detrás de ese proyecto. Por este motivo decidí compartir, en base a mi experiencia en el sendero de la automatización, cuales son los aportes que entrega esta práctica al equipo.

Desde el inicio de los tiempos los desarrolladores han tenido que convivir con tareas de operaciones de sistemas, como levantar ambientes, actualizar servidores e instalar servicios, entre otros. Si bien el término CI, que explicaré mas abajo, no es nuevo, la evolución de nuestra área trajo la adopción de la cultura DevOps 🙌🏼 (que une la operación de sistemas con el desarrollo de software) la cual aportó mucho a la automatización de tareas y es aquí donde CI toma un rol importante 💪🏼.

Pero vayamos por partes …

¿ Qué es CI ?

En palabras de Martin Fowler, la integración continua/CI “es una práctica de desarrollo de software donde los miembros de un equipo integran sus cambios de manera frecuente”.

We’re the Millers — 2013

A modo práctico y dejando a los grandes explicar con más detalle, CI es la automatización de las tareas que ejecutamos manualmente cuando queremos integrar nuestros cambios al repositorio, por ejemplo correr test, obtener el reporte de cobertura, analizar el código en busca de errores de tipeo, entre otros.

Flujo resumido de una implementación CI

¿ y para qué sirve ?

Una respuesta digna del rincón del vago es Automatizar. Existen varios beneficios de implementarlo, pero lo más notorio y que te hará sentir orgulloso, es ver cómo se ejecutan automáticamente las tareas que antes hacías de manera manual 🏅, o quizás no las hacías 👀.

Aporte para el proyecto

Si no quedó claro durante la lectura, CI nos automatiza tareas y esto implica muchas cosas positivas para el proyecto como tal.

1. 🤖 Adiós tareas repetitivas

Existen tareas que al ejecutarlas nos decimos (a veces con lamento) “Esto se podría hacer automático”.

Todas las tareas, cual sea su nivel de complejidad que se deban ejecutar antes de lanzar un release a producción pasan a ser de integración, así que las posibilidades pueden ser infinitas.

Tareas como actualizar documentación, generar indicadores de calidad por medio de análisis de código, notificaciones a slack o por correo sobre algún resultado, vincular una incidencia en Jira, correr tareas en servidores externos o lo que sea. Si no me crees, revisa todo lo que puedes hacer con GitHub Actions.

Usa tu imaginación 🧽

2. ⭐ Mejora la calidad de las entregas

Si le sacas un buen trote a CI mejorará la calidad de las entregas, ya sea automatizando la inspección de código o bloqueando PR’s por no pasar los test. Al tener un indicador rápido de cómo va tu código podrás corregir posibles fallos antes que lleguen producción 💀.

Pongamos un ejemplo:

Imagina que por algún motivo incluiste una llave de Amazon productiva dentro de tu código, esto, además de ser una mala práctica, es un peligro de seguridad merecedora de despido (En Chile una PLR🇨🇱).

Este caso es totalmente evitable con CI. Hace poco tiempo conocí GitGuardian en mi trabajo, y al igual que muchas otras herramientas, es un proceso CI que se integran a tu proyecto y entregan análisis de tu código; en este caso de ejemplo, te advertirá que estas incluyendo una llave para que la elimines antes de quedarte sin trabajo, o tener que trabajar cuando la empresa tiene día de paseo 🍋.

3. 📄 Mejora la documentación

CI se basa en la infraestructura como código, de esta manera, tendremos acceso a los pasos que se deben realizar para ejecutar todas las tareas que se han automatizado.

Tener las tareas escritas como código entrega grandes ventajas respecto a la documentación del proyecto, tareas como construcciones de imágenes docker, compilar el proyecto, correr los test unitarios, entre otros, pueden ser material de estudio para integrantes nuevos o como base de conocimiento para otros proyectos.

4. 🔐 Aumenta la seguridad

La seguridad es un punto que no se resuelve solo automatizando tareas, más bien es un cambio cultural de cómo hacer las cosas y aplicar procesos o directrices que ayuden un proyecto ser seguro.

CI aporta bastante a este punto pero no es la solución definitiva. Herramientas de análisis pueden advertir posibles fallos de seguridad en tu código y en versiones de dependencias, pero para hacer seguro un proyecto debes ir un paso más allá que sólo analizar código.

DevSecOps Redhat

Existe la metodología DevSecOps, pero no profundizaré sobre este tema, ya que, no es el tema del post ( y no es mi fuerte ). Te dejo un artículo muy bueno de redhat que habla sobre esta metodología.

El equipo detrás del proyecto

Un software no es tan solo código, diagramas y llaves foráneas, existe un equipo de personas detrás que utilizan su tiempo (remunerado o no) en mantenerlos y en el mejor de los casos aplicar mejoras. Este tiempo invertido es un recurso valioso y muchas veces escaso, por lo que, cualquier tarea repetitiva que se automatice es un esfuerzo menos a largo plazo🎖.

Además de reducir el esfuerzo del equipo, implementar CI genera instancias enriquecedoras que aportan valor técnico, como reuniones para discutir detalles técnicos, intercambiar ideas y conceptos, discusiones sobre tecnologías, entre otros.

Entonces… aportes para el equipo

Estos puntos vienen desde una mirada personal basada en mi experiencia implementando CI en proyectos personales y laborales.

1. 🤖 Implementar cultura de testing

Si bien no es obligatorio usar CI para correr test, es una gran herramienta que podemos utilizar para mejorar y mantener la calidad de nuestro proyecto. Si desconoces qué es el testing de software te recomiendo investigar un poco, te dejo el siguiente link como lectura rápida , ya que, hablar de esto no es la finalidad de este post.

Cada vez que publiques un PR, CI hará la magia de correr tus pruebas y sabrás si tu nuevo feature se integra al proyecto sin romper el trabajo de otros … una maravilla. Además, toda herramienta de test te entrega indicadores y de esto puedes sacar mucho provecho 😉, esos lindos gráficos y porcentajes llamados KPI`s.

Yo cuando mis PR pasan los test

2. 🙂 Confianza en el software y en el equipo

Si las nuevas funcionalidades en el proyecto se integran de manera correcta y pasan los test automáticos, es seguro que aumenta la confianza en el proyecto ❤️ y por consecuencia, en el equipo.

3. 🤓 Cultura DevOps y nivelamiento de conocimientos

Implementar CI te obliga a tener conocimientos sobre operación de sistemas. Esta tarea puede que no la lleve a cabo un integrante del equipo, pero de igual manera es un momento idóneo para involucrar a todos los integrantes y nivelar conocimientos. Además, recuerda que CI se basa en la infraestructura como código, de esta manera las implementaciones quedan documentadas para ser estudiadas, como sería el caso de una receta docker que contenga el stack que necesita tu proyecto para funcionar.

4. ⏰ Tiempo, tiempo, tiempo

Menos tiempo de revisión en cambios hechos por otros integrantes, las pruebas automáticas nos entregan un indicador rápido de si debemos comenzar a revisar código.

Menos tiempo de análisis de código, si integras un analizador como sonarqube tendrás un feedback rápido de la calidad de tu trabajo.

Menos tiempo en tareas repetitivas, todas las tareas que son automatizadas significan menos esfuerzo para el equipo, en ejecución o en revisión 👏🏻.

¿ Qué hay después de CI ?

CD (continuous delivery y continuous deployment). La entrega y despliegue continuo son las prácticas posteriores a las de integración, y en su conjunto conforman un ciclo que abarca todas las etapas de la puesta en producción de software; codificación, análisis, pruebas, despliegue y monitoreo.

Este tema es igual de extenso que CI, pero al tratarse de tareas que afectan directamente la disponibilidad del software en producción, se debe tratar con mayor cautela.

Ejemplo de flujo CI/CD

El flujo anterior nos muestra cómo se integran las dos prácticas de integración 🤯 , pero hablar de CD no es el tema de este post, así que, lo dejaremos para después 😉.

En resumen, CI es una práctica que entrega aportes técnicos al proyecto y al equipo, automatiza tareas repetitivas, nos ayuda a definir y documentar tareas y procesos como código, nivela el conocimiento entre los integrantes, aumenta la confianza en el software, y por sobre todo, reduce el tiempo y el esfuerzo del equipo.

Por último, CI nos entrega los cimientos para la implementación de CD, de lo cual hablaré en el siguiente post.

--

--