Unir Subversion con MantisBt, sin complicaciones.

Cuando trabajamos de manera “seria” en proyectos de desarrollo software, hay una parte muy importante que es utilizar una buena herramienta de control de versiones, y un buen gestor de incidencias o bugs.

Personalmente, llevamos bastante trabajando con Subversion en mi empresa sin grandes quejas, lo cual nos permite mantener los desarrollas saneados y controlados… aparte de saber quien metió la pata en un programa, ya que sabemos quien modifica cada línea del programa.

Hace unos meses, nos dimos cuenta que necesitábamos un control de las incidencias que encontrabamos, y incluimos en nuestros sistemas MantisBt que sustituyó a las clásicas hojas escritas con todos los problemas encontrados :P. Todo un clásico para todo desarrollo informático.

Ahora bien, nuestro sistema de trabajo era muy simple, desarrollar, probar y luego subir a Subversion, y revisar más tarde Mantis para cerrar las incidencias resueltas.

Pero no paramos en este protocolo para el control de nuestros desarrollos y quisimos integrar ambos sistemas, con el siguiente objetivo: cuando subamos una revisión a Subversión, automáticamente se cerraran las incidencias asociadas, que indicaremos en el comentario de la revisión.
Tras investigar un poco por la red, encontramos una forma muy limpia, sin tener que programar, gracias a que ya habían desarrollado un plugin para integrar los dos servicios de manera bastante sencilla.

  1. Al menos tener la versión 1.2.x de Mantis (en nuestro caso la 1.2.3), y Subversion, cualquier versión por encima de 1.3.x, (en nuestro caso la 1.6.6). Tener acceso a un usuario con acceso a los repositorios y ser administrador en Mantis.
  2. Ir a la web del creador del plugin (por si tienes curiosidad, aquí tienes el Mantis del plugin), y bajarte los plugins que indica de este repositorio git. Son solo dos: “meta” y “source-integration“. Desde allí mismo nos permite bajar un snapshot en tar.gz.
  3. Descomprimimos y vemos que el plugin “source-integration” tiene una carpeta “Source” y luego otras carpetas para cada unos de los servidores de control de versiones soportados (Git y SVN). En el caso del SVN, podemos usar directamente el protocolo SVN o a través de WebSVN (en mi caso, use directamente el protocolo SVN), copiando sólo la carpeta “Source” y “SourceSVN“.
  4. Lista de Plugins

    Lista de Plugins en Mantis 1.2.3

    Una vez tengamos copiados las carpetas (ojo es importante que sean las carpetas que contienen los ficheros php) en el directorio “plugins” del directorio donde se encuentra Mantis, ir al interfaz de “Administración > Administrar Plugins“, e instalarlos, respetando las dependencias que muestran.

  5. Ahora seguimos las indicaciones que se indican en esta web, que son mucho más detalladas que las de su creador. Sólo hay una discrepancia: Todo se configura a través del plugin “Source Control Integration“, solo rellenando el campo “SVN: Path to binary“, en mi caso con “/usr/bin” en una Ubuntu 10.04 server.
  6. Ahora si queremos adaptarlo al castellano, cambiamos “Bug Fixed Regex Pass 1”, por algo parecido a:
    /(?:corregido?d?s?|arreglado?s?)+\s+(?:#(?:\d+)[,\.\s]*)+/i
    

    Así cada vez que escribamos esto (“arreglados #001 #008”) en un comentario de un commit de Subversión, cerraremos los bugs asociado en el mensaje.

  7. Se puede cambiar muchas más opciones, pero lo dejo a vuestra investigación. Nosotros no indagamos mucho más. Hay muchas más información en: aquí.
  8. Obtener la ruta de un repositoro

    Ahora aparecerá una nueva sección en los apartados principales de Mantis, llamado “Repositories”. Al entrar, podremos añadir un repositorio que controlar, en nuestro caso, hemos seleccionado el protocolo “SVN”, por lo que tiene que tener usar ruta el repositorio que empiece por “svn://”, y que tendréis que conocer si tenéis el repositorio en nuestro equipo (en Windows sólo hay que seleccionar la carpeta que tiene el repositorio en nuestro ordenador, y en propiedades, en la pestaña de “TortoiseSVN”, esta la ruta con el protocolo SVN). Recuerda que tienes que dar un usuario existe en Subversion, no en el sistema.

  9. Tras esto, pulsamos en “Import Latest Data“, y si no hay ningun error, tendremos un mensaje que nos indica hasta que revisión ha logrado importar. Si tienes muchas revisiones, puede dar un timeout, por lo que tendrás que volver a darle o aumentar el tiempo de timeout de servidor.

Ya está… Bueno, realmente no. Con esto esta conectado, pero cuando subamos un revisión a Subversion, veremos con desesperación que no se refleja en Mantis. ¿Porqué?. Bueno, en teoría, tendríamos que importar los datos cada vez desde el interfaz de Mantis. Esto, claramente, no es lo que buscamos, ya que queremos una experiencia “automática”. Para remediarlo, podemos automatizar la adquisición de los datos de los repositorios mediante una tarea programada. En nuestro caso:

  1. Editar el fichero “/etc/crontab“:
    # Integracion subversion y mantis
    */5 *   * * *   svn     curl "http://localhost/mantis/plugin.php?page=Source/import&id=all" >> /tmp/updateMantisFromSVN 2>&1
    

    Yo, al principio y por depuración, incluyo la redirección a un fichero, tu puedes cambiarlo a “/dev/null” por ejemplo.
    También, se puede cambiar la frecuencia, en este caso está puesto cada 5 minutos, que quizás sea un poco exagerado, y se podría subir.

  2. Nos tiene que devolver algo parecido a esto:
    <pre>Requesting svn log for Repo 1 starting with revision 28...
    Processing svn log...
    No revisions parsed.
    </pre><pre>Requesting svn log for Repo 2 starting with revision 9...
    Processing svn log...
    No revisions parsed.
    

    Y ya tenemos todo el tinglado montado.

Please follow and like us: