¿Cansado de no poder modificar tus flujos de trabajo en herramientas como Jira o Azure DevOps porque no tienes permisos? ¿No se adaptan las métricas que ofrecen estas herramientas a lo que realmente quieres medir? ¿Te ayudaría un proceso automático para generarlas? En este post te vamos a ayudar.

En este post os contamos cómo obtener la información del Jira para poder generar métricas de una forma externa. Ahora, veremos cómo extraer la información de forma automática de otra herramienta: Azure DevOps. En esta ocasión, vamos a ver cómo crear un fichero con el histórico de todas las modificaciones que se realizan sobre los ítems de trabajo en los tableros de Azure.

Para explicar con algo más de claridad lo que pretendemos mostrar, vamos a imaginar un proyecto básico en el que tenemos un flujo con 3 estados:

Pero el tablero cuenta con cuatro columnas:

Esto es posible ya que el Azure mapea cada columna a un estado del flujo. Así, el mapeo entre columnas y estados queda de la siguiente forma:

Para el día a día del equipo esto podría ser suficiente, ya que nos permite visualizar el flujo real del equipo en columnas, pero… ¿qué sucede cuando queremos extraer los datos del tiempo que ha pasado cada tarjeta en cada columna? Sencillamente, no lo podemos hacer. Azure lo que calcula es el tiempo por estado. Es decir, en nuestro ejemplo no podríamos saber el tiempo que cada tarjeta pasa “En desarrollo” o “En pruebas”; simplemente tendríamos el tiempo que ha pasado la tarjeta en estado “Active”.

Y no sería el único problema. Si reabrimos una tarjeta (en otro flujo podría tener sentido), la fecha de activación se sobrescribe, con lo que perderíamos el tiempo anterior que la tarjeta estuvo en “Activo”.

Lo cierto es que podemos encontrarnos con un gran número de situaciones en las que las métricas que nos aporta Azure no cubra las necesidades del equipo. Y, según estas necesidades, tendremos que realizar procesos más o menos complejos. El primer paso que tenemos que dar es simple: extraer los datos de Azure y crear un fichero histórico con todos los movimientos y modificaciones en los ítems del tablero del equipo.

Para esto, vamos a utilizar una herramienta de la suite de Microsoft: Power Automate. Esta herramienta nos permite automatizar distintos procesos, ya sea de forma manual, programada o mediante la captura de eventos.

El esquema que vamos a seguir es muy simple. Power Automate dispone de un conector específico para Azure Devops, que recogerá los eventos de modificación sobre todas las tarjetas de un tablero. Este conector, al recibir un evento, lanzará el proceso definido en Power Automate, que insertará una fila en el fichero histórico que crearemos en Google Sheets.

Vamos a ver paso por paso qué será necesario configurar en nuestro proceso y la mejor forma de hacerlo.

Azure DevOps

En la herramienta de Azure DevOps no vamos a tener que configurar nada especial de cara a este flujo automático. Solo tendremos que tener claros los siguientes datos:

Adicionalmente, tendremos que estudiar qué campos son los que vamos a recoger para escribirlos posteriormente en la hoja.

Para este ejemplo nos vamos a quedar con:

Como se puede ver a continuación, nos encontramos en el caso en el que dos columnas (Doing y Waiting) comparten un mismo estado de flujo (Active):

Google Sheets

En Google Sheets tendremos una hoja para registrar todos los movimientos del tablero. Para ello, necesitamos especificar las columnas que tendrá la tabla:

Para este caso, hemos creado una hoja “Histórico” dentro del libro “Datos COMMS” en nuestra unidad de Drive.

En esta hoja se irán insertando uno por uno todos los movimientos o modificaciones que se realicen en las tarjetas del Azure DevOps.

Power Automate

Power Automate es una herramienta bajo licencia, pero ofrece una versión de prueba gratuita que es con la que vamos a realizar el ejemplo.

Para acceder a la herramienta, entramos en la cuenta de Office 365 y en el menú de herramientas nos permitirá seleccionarla. Si no la tenemos visible, haciendo clic en “Todas las Aplicaciones” nos aparecerá.

Power Automate cuenta con numerosas plantillas de automatización de flujos ya definidas por defecto, y ofrece tres formas de crear un flujo:

La opción “desde cero” nos muestra todos los posibles disparadores que podemos configurar para lanzar nuestro flujo:

En nuestro caso vamos a usar: “Flujo de nube automatizado”. Nos mostrará una nueva ventana para introducir un nombre al proceso automático que vamos a crear y el conector con su correspondiente evento que va a disparar el proceso.

Para ver cómo crear un flujo de nube automatizado, se puede visitar el siguiente enlace.

El flujo lo debemos crear a partir del conector con Azure DevOps, y seleccionando la operación “Cuando se actualiza un elemento de trabajo” como desencadenador del flujo.

Hay que destacar aquí que, para que la conexión se pueda realizar, el servidor Azure debe tener la autorización AOuth2 activada (siempre es así por defecto).

Tendremos también que introducir los datos de la propia conexión a nuestro proyecto de Azure y un filtrado sobre los elementos a los que afecta el conector (por tipo de tarjeta, asignación…). Para nuestro caso podemos filtrar sobre las tarjetas que pertenezcan a nuestro proyecto y sean de tipo “User Story”.

Con esto configurado, ya recibimos cualquier evento de modificación que se realice en las User Story de nuestro tablero.

Lo siguiente será añadir un nuevo paso al flujo para escribir en la hoja del Google Sheets. Para ello, se puede seguir este documento.

En nuestro caso, debemos seleccionar el conector de Google Sheets y la acción que queremos realizar será “Insertar fila”.

Al igual que con el conector del Azure DevOps, tendremos que introducir las credenciales de nuestra cuenta de Google para realizar la autorización OAuth2.

Un punto importante es tener creada la hoja previamente al menos con las columnas que queramos rellenar desde el proceso, ya que el conector leerá esas columnas y las transformará en campos a rellenar en el flujo.

A estos campos que nos aparecen será a los que tendremos que mapear los datos que se leen desde el conector con Azure DevOps.

Para comprobar que la conexión es correcta, podemos abrir nuestra hoja de Google en un navegador y veremos que se ha añadido una nueva columna que se usará para indicar un identificador único para cada fila añadida desde Power Automate:

Aunque las herramientas estén conectadas, podemos realizar cambios en las columnas de la hoja en Google. Por ejemplo, podemos añadir la una nueva columna para indicar la fecha y hora de modificación de la tarjeta.

Para que esta modificación se vea de forma instantánea en el editor de flujo de Power Apps, habrá que recargar el flujo (con recargar la página en el navegador es suficiente). Es muy importante haber guardado el flujo previamente a la recarga o se perderá toda la configuración de las operaciones.

Una vez el flujo esté completo, lo podremos probar de forma manual (podéis visitar esta web) para comprobar que el flujo funciona correctamente.

Una vez probado y guardado, el flujo ya queda activado y escuchando todos los eventos que se puedan producir. A partir de este momento, cada movimiento que hagamos en el tablero quedará registrado en Sheets.

No es un proceso “real time”. El conector de Azure tarda un tiempo en enviar a Power Automate los eventos capturados. Incluso se podría dar el caso de perder eventos si se producen muchos en un espacio muy corto de tiempo.

Power Automate nos permite guardar el histórico de ejecuciones del flujo de los últimos 28 días. Para más información, podéis visitar esta web.

Un problema que podemos tener, es que algunos de los eventos procesados por el Power Automate no lleguen a registrarse en el Google Sheets. Este problema se da por motivos de concurrencia: Google Sheets tarda más tiempo en añadir una fila que el Power Automate en enviar la siguiente petición. Como digo, esta circunstancia se puede dar en situaciones en las que los eventos se lanzan de forma casi simultánea.

En posteriores post veremos una forma de automatizar una solución a esto, aunque contamos con una solución manual. Si identificamos un movimiento que no haya quedado registrado en la hoja de Google, podemos buscar dicho movimiento en el histórico de ejecuciones de Power Automate y reenviarlo. Para esto, desde la página en la que vemos el resultado de la operación concreta, pulsaremos sobre el botón “Reenviar”:

El resultado final en Google Sheets, como se puede ver, es el registro de los eventos que se han lanzado:

En futuros post mostraremos cómo podemos procesar esta información, transformarla y explotarla desde Data Studio, así como solventar los problemas de concurrencia mediante procesos de consolidación de datos.

Si te ha gustado este post sobre métricas...

¡No te pierdas este podcast! Escúchalo ya mismo.

Cuéntanos qué te parece.

Los comentarios serán moderados. Serán visibles si aportan un argumento constructivo. Si no estás de acuerdo con algún punto, por favor, muestra tus opiniones de manera educada.

Suscríbete

Estamos comprometidos.

Tecnología, personas e impacto positivo.