Medir o no saber, esa es la cuestión


¿Cómo acelerar los tiempos de delivery en nuestros equipos?

Por Martín Ramírez, Site Reliability Engineer en etermax

Lo que no se mide, no se puede mejorar”, decía Lord Kelvin. Esta frase, que seguramente habrás escuchado en más de una ocasión, pone en evidencia la importancia de la medición. Y el proceso de CI/CD no se encuentra exento de esta premisa. 

En este post vamos a explorar cómo desde “Loki 🐊” (equipo de SRE en Cloud and Platform de etermax) implementamos métricas en nuestros pipelines. 

El objetivo estaba claro, mejorar nuestro proceso automatizado de delivery. A partir de esta premisa surge la necesidad de tener métricas que nos permitan conocer:

  • Cantidad de jobs en ejecución
  • Estado final de los jobs (success / fail / canceled)
  • Tiempo promedio
  • Y muy importante! ¿Qué stacks tecnológicos se están ejecutando?   

Actualmente soportamos servicios de backend y aplicaciones mobile (código nativo, unity y flutter) entre otros. Lo cual implica una solución flexible pero que no agregue complejidad y resulte simple de utilizar por nuestros equipos de desarrollo. Buscamos conocer los stacks actuales utilizados por cada equipo, normalizar el uso de versiones específicas, mejorar los tiempos de ejecución, planificar los stacks a utilizar en el futuro y estar siempre preparados para no quedarnos quietos.

Ahora, ¿cómo obtenemos estos datos?

Desde hace más de un año desde el segmento de Cloud and Platform, estamos impulsando la creación de Productos para facilitar la utilización de las diferentes herramientas de la compañía y poder brindar a nuestros equipos una capa de abstracción sobre la infraestructura utilizada.  

En este contexto nació eterPIPE, nuestro producto de CI/CD. 
eterPIPE abarca los diferentes workflows de CI/CD dentro de etermax, los cuales fueron divididos en 2 categorías principales para una mejor gestión:

  • Pipelines Apps: builds y deploys a las diferentes tiendas de aplicaciones.
  • Pipelines Services: builds y deploy de los servicios o necesidades de plataforma.

Desde esta visión de productos exploramos diferentes herramientas para incorporar a eterPIPE y poder medir nuestros Pipelines de Apps:

  • Métricas default provistas por GitLab
  • Gitlab Exporter
  • Desarrollar una solución propia
Métricas default provistas por GitLab

Gitlab no tiene por defecto métricas o un dashboard que nos provea la información que necesitamos y si bien los GitLab Runners exponen métricas, no brindan información específica de los jobs ejecutados. Por ejemplo, no podemos acceder a las variables de ambientes del pipeline. Por este motivo decidimos explorar otras alternativas.

Gitlab Exporter

Siguiendo la documentación de Gitlab, analizamos gitlab-ci-pipelines-exporter. Excelente herramienta pero con algunos problemas para lo que nosotros estábamos buscando. Solo permite obtener el estado de los últimos jobs ejecutados, lo que nos inhabilita a obtener un histórico de los tiempos de build y poder acceder a las variables de entorno de los pipelines para obtener versiones utilizadas.   

Desarrollar una solución propia

Pensamos en desarrollar un exportador de métricas con Go client library que consulte la API de GitLab y exponga las métricas en /metrics.

La desventaja de esto es que la API de GitLab no proporciona los valores de las variables de entorno que necesitamos conocer los stacks. 

Entonces fue cuando empezamos a analizar nuestra infraestructura.

Tenemos un custom runners ejecutando los jobs, esto es debido a que necesitamos conectarnos a la plataforma externa para ejecutar los builds. Este runner cuenta con todas las variables de entorno disponibles para los jobs.
Sí podíamos configurar algún paso para que el runner envíe toda esta información a un endpoint y que este sea este el que construya y exponga las métricas, podríamos resolver el problema.

Comenzamos a investigar y diseñar este endpoint cuando nos encontramos con Prometheus Pushgateway. Esta herramienta resolvía todo lo que necesitábamos y no teníamos que desarrollar algo nuevo.

Con esta idea y mucho trabajo, implementamos la siguiente solución:

En esta primera interacción conseguimos obtener métricas del número de jobs en ejecución, estado final, tiempo promedio y los stacks utilizados por cada equipo en nuestros pipelines de Apps.

Como resultado, logramos conocer el porcentaje de errores, reducir la carga operativa en el equipo, simplificar el diagnóstico de fallas, generar alertas sobre potenciales problemas, la posibilidad de iterar la plataforma y medir el impacto, planeamiento de mejoras integrales generando un Roadmap visible para toda la empresa y priorizando de manera ordenada las nuevas funcionalidades.

En los próximos meses analizaremos la información recolectada y pensaremos en cómo seguir mejorando nuestros tiempos de ejecución, normalización de stacks y evolucionar nuestras métricas. Esto nos permitirá realizar una mejora constante de eterPIPE y por ende mejorar la velocidad y calidad de entrega de nuestros equipos de producto.


En resumen seguir en el camino. #BeAGameChanger 

“This is the Way”


Bibliografía:

, ,