Development

Automatización de la gestión de versiones Jira

En Infobip, nos gusta automatizar tareas repetitivas y simplificar el flujo de trabajo. La gestión de las versiones de proyectos era una oportunidad clara para hacerlo.

February 19 2016

El objetivo en común de todo software es automatizar tareas repetitivas. La automatización puede aumentar la complejidad, pero también puede reducir de manera significativa los costos de mantenimiento y de desarrollo. Probablemente, esta sea la razón principal por la cual la automatización es el pilar de las prácticas comunes de la ingeniería de software moderna, como las pruebas continuas, la integración y la entrega. Las pruebas continuas se basan la automatización de pruebas, la integración continua, en la automatización del proceso de construcción, y la entrega continua, en la automatización de todo el sistema de entrega de software.

En Infobip, realizamos un seguimiento de los cambios en los servicios con la gestión de versiones de proyectos en JIRA y usamos Stash para el control de versiones. Al principio, cada versión se creaba de manera manual, generalmente justo antes de emplearla. Era una tarea repetitiva que incluía la inspección manual de commits en el control de versiones, la creación de la versión en JIRA y la vinculación de incidencias con la versión. ¡Era una oportunidad clara para la automatización!

Análisis del flujo de trabajo

Para automatizar este proceso, necesitamos analizar los pasos manuales y detectar patrones comunes. Con el fin de realizar una demostración, supongamos que tenemos un proyecto basado en Java que usa Maven. El registro del commit luego de un lanzamiento podría lucir así:

El primer y el último commit son commits de lanzamiento que contienen el número de versión. Los commits intermedios contienen claves de incidencias en sus mensajes (que Stash organiza en la columna Issues). El usuario que quiera crear una versión en JIRA, creará una nueva versión con valor 1.1.0 y vinculará las incidencias MTP-1, MTP-2 y MTP-3 con la versión. El resultado es el siguiente:

Toda la información necesaria para detectar el evento de lanzamiento, el número de versión y las incidencias de la versión se encuentra en los mensajes de los commits. Esta lógica de patrones se puede extraer a un algoritmo, que realiza los siguiente luego del commit:

1. Si el mensaje del commit no coincide con el patrón de commit de lanzamiento, no hay un lanzamiento.
2. Extracción de la versión del mensaje del commit inicial.
3. Para cada commit luego del inicial, debe hacerse lo siguiente: a. Si el mensaje de commit no coincide con el patrón del commit de lanzamiento, detenerse b. Extraer las claves de las incidencias.
4. Creación de una versión en JIRA con el valor de la versión extraída.
5. Vinculación de las incidencias extraídas con la versión creada.

Generador de versiones JIRA

El generador de versiones JIRA es un plugin de Stash de código abierto gratuito que usa la API JIRA REST para automatizar el algoritmo descripto más arriba con algunas características adicionales que mejoran el proceso de automatización.

Actualmente, para instalar el plugin, debe descargar el jar del plugin desde Maven Central e instalarlo en su instancia de Stash. Esperamos que, algún día, el plugin esté disponible desde la tienda de plugins oficial de Atlassian para que el proceso de instalación sea más transparente para el usuario.

Luego de la instalación, el plugin debe activarse por repositorio. Luego de la activación, la ventana emergente de configuración lucirá así:

El único parámetro requerido en la configuración es el parámetro clave del proyecto JIRA, que debería ser evidente.

El parámetro de prefijo de la versión Jira define un prefijo que se aplicará a cada versión generada en JIRA. Esto puede ser útil si tiene un proyecto JIRA y más repositorios o artefactos múltiples para ese proyecto.

El patrón de la versión del commit de lanzamiento es el último parámetro que debe usarse para definir las expresiones regulares utilizadas para captar el patrón de commit de versión. El valor predeterminado usa el patrón del plugin de lanzamiento de Maven estándar y asume que el proyecto tiene el mismo nombre que el artefacto.

Conclusión

Cada vez que se dé cuenta de que el trabajo que está haciendo es repetitivo y simple, considere cómo puede automatizarlo para simplificar y optimizar la carga de trabajo.

El generador de versiones JIRA es un ejemplo de cómo se puede hacer eso para una pequeña parte del proceso de desarrollo. Desde la instalación, el generador de versiones JIRA ha ayudado a muchos equipos a reducir parte del trabajo tedioso durante los procesos de lanzamiento e implementación, incluidos los equipos que no usan Maven ni Java.

Por Lovro Pandzic - ingeniero de software / Team Leader