viernes, 26 de febrero de 2010

Integración continua con Hudson

Espero que a estas alturas de la película ya estemos todos convencidos de la necesidad de tener un mecanismo de integración continua en nuestro sistema de desarrollo. Hay un montón de herramientas que nos pueden ayudar como Team Foundation ServerCruise Control o, el que empezaremos a ver hoy, Hudson.

Hoy empezaremos a ver como configurar Hudson para tener una tarea que se descargue un proyecto de Subversion, lo compile y pase los tests. Obviaremos la instalación tanto de Subversion como de Hudson por ser muy sencilla y poderse encontrar en muchos sitios.

Lo primero que tenemos que hacer una vez instalado Hudson tenemos que instalar los plugins que vamos a necesitar. En nuestro caso estos son: Hudson Subversion Plugin, Hudson MSBuild Plugin, Hudson MSTest Plugin y el imprescindible Chuck Norris Plugin :-). Para instalarlos tenemos que ir al menú Gestionar Hudson -> Gestionar Plugins, seleccionarlos de la pestaña Todos los plugins, seleccionar dichos plugins y clicar sobre el botón instalar.


Ahora vamos a configurar un poco Hudson antes de ponernos con las tareas. Nos vamos al menú de Gestionar Hudson -> Configurar Sistema y cambiamos la ruta del directorio raiz si lo consideramos conveniente.

También le tenemos que configurar la ruta del MSBuild para poder llamarlo en nuestra tarea

Y finalmente le vamos a configurar el servidor de correo a utilizar. Tenemos que configurar la dirección del administrador, la dirección del servidor de Hudson para que funcionen los links que se nos envian, el sufijo por defecto si queremos que se extraigan las direcciones de correo de los usuarios de subversion y la configuración de nuestro servidor de correo saliente, en nuestro caso gmail.

Ahora ya podemos empezar a configurar la tarea. Para ello hacemos click sobre el link Nueva Tarea y nos aparecerá una ventana con varias opciones. En nuestro caso escogemos "Crear un proyecto de estilo libre".
Lo primero es configurar es configurar un par de cosas básicas como la descripción de la tarea y el directorio personalizado del proyecto en caso de no querer el directorio por defecto de Hudson.

A continuación configuraremos el repositorio de subversion al que nos queremos conectar y la periodización de dicha conexión. En este caso nos conectaremos al repositorio para bajarnos el código a los cinco minutos de cada hora.


Ahora vamos a añadir un par de tareas para realizar tareas especificas de .Net. En este caso será realizar una compilación con MSBuild y lanzar los tests con MSTest. Para la tarea de MSBuild añadiremos la tarea llamada "Build a Visual Studio project or solution using MSBuild", escogemos la versión de MSBuild adecuada para nuestro proyecto, la solución a compilar y los parámetros de dicha compilación.

Seguidamente añadiremos un nuevo paso del tipo "ejecutar línea de comandos (shell)" para ejecutar los tests. Tenemos que introducir manualmente el comando para ejecutar MSTest desde línea de comandos generando un archivo .trx con los resultados de los tests para que Hudson los pueda interpretar.

Finalmente sólo nos falta configurar las opciones que nos interesen de las que ofrece Hudson al final de la página de configuración. En nuestro caso será necesario activar la opción "Publish MSTest result report" (especificando el archivo .trx que hemos generado anteriormente), "Notificación por correo" y, claro está, "Activate Chuck Norris" :-). Ahora ya podemos clicar sobre el link "Construir ahora". En caso que algún paso no esté bien configurado o el programa dé algún error, se nos enviará un mail con el error y en la página web de Hudson nos aparecerá la tarea al lado de un circulo rojo indicando que hay algún error. Si todo está bien, el circulo será azul y sólo se nos enviará un mail en caso que anteriormente hubiera habido una ejecución incorrecta, informándonos así que la build vuelve a estar bien.

Espero que con este tutorial podáis empezar a trabajar con Hudson. Es un gran programa con un montón de opciones que iremos comentando a medida que nos parezcan interesantes.