May 26

Auditoría de software

hudson-chicasEntre las herramientas que usamos habitualmente, está Hudson como herramienta de integración continua. Tiene un montón de plugins para instalar y de vez en cuando me dedico a jugar con ellos, para ver qué hacen, alegrar un poco el día a la gente poniendo algún plugin divertido, o haciéndoles tirarse de los pelos cuando necesitan hudson y no está disponible porque le he instalado una cosa que no va.

Entre los plugins, recientemente instalé dos, el de Chuck Norris, que hace que aparezcan fotos de Chuck Norris contento si la compilación ha ido bien, o cabreado si ha ido mal, aparte de poner frases aleatorias estilo "Chuck Norris’s first program was kill -9". También puse otro similar, pero con fotos de chicas.

Pues bien, justo ayer, cinco minutos antes, me llaman por teléfono que van a venir de una auditoría de software para ver, entre otras cosas precisamente el Hudson. Así que, como un loco, mirando qué fotos salían en los proyectos para enseñar sólo proyectos de Chuck Norris, no vaya a ser que algún auditor/a se me mosqueara o mosquease.

Apr 10

Un par de herramientas para GTD

GTD es un método para que una persona pueda gestionar sus tareas eficientemente. Es un método sencillo y básicamente consiste en tener una lista de tareas para hacer. Cada vez que se nos ocurra algo para hacer, nos surja una nueva tarea o trabajo, símplemente la apuntamos en la lista y nos olvidamos de ella, así evitamos distracciones en nuestro trabajo actual. Con cierta frecuencia (una vez al día, por ejemplo), revisamos la lista y la ordenamos, de forma que decidimos en qué orden vamos a ir haciendo las tareas, si las dejamos aparcadas para mejor ocasión o si las borramos definitivamente de la lista. Luego, a lo largo del día, nos centramos en ir haciendo las tareas según el orden que hemos decidido al principio del día. Esto evita perder el tiempo pensando qué hacer a continuación o saltando de una tarea a otra. Hay más detalles sobre GTD, pero no voy a extenderme en el tema.

Este método de trabajo ha cobrado cierta fama y abundan las herramientas en internet para ayudarnos a llevar dicha lista. He estado buscando algunas para probar, mirando sobre todo que tengan interface sencilla y cómoda. Me he encontrado dos que me han gustado

La primera es Vitalist. Esta herramienta es en línea, te registras y pones tus tareas en la web. Tiene cuentas de pago, pero también tiene una gratuita en la que podemos poner ilimitadas tareas, pero restringidas a 5 proyectos y 5 contextos. La interface tiene lo que buscaba, por un lado, las tareas a hacer salen todas juntas en una lista en la página principal (no me gusta andar buscando las tareas por la herramienta) y se pueden ordenar simplemente arrastrándolas con el ratón. Aunque a cada tarea se le pueden poner muchas cosas (proyecto, contexto, persona de contacto, fecha límite), no es necesario rellenar todos los campos, por lo que añadir una nueva tarea es inmediato.

La segunda es What’s next. Esta está hecha en ruby y se puede descargar (ruby incluido). Basta descargarla, desempaquetarla y hacer doble click en el script adecuado para arrancar un pequeño servidor web. Se accede a ella a través del navegador. La interface muy sencilla y cómoda, con iconos y fuentes grandes. Las tareas se pueden ordenar arrastrándolas con el ratón y es muy fácil crear nuevas tareas o cambiarlas de estado. No tiene tantas posibilidades como Vitalist (tantos campos, posibilidades de filtrado, etc), pero yo creo que una metodología sencilla (GTD) requiere una herramienta sencilla.

Y son solo dos, a poco que se busque en internet, hay más de todo tipo, en linea, para instalar con ineterfaz web, de escritorio. He probado tres o cuatro más, pero me han parecido demasiado complejas o poco cómodas (muchos campos a rellenar obligatoriamente para que las tareas queden clasificadas, tareas escondidas entre los menús, difícil  de cambiar el estado de tareas o incluso demasiado lentas en el arranque y trabajo).

Sep 11

Nodos esclavos en Hudson

 

Ayer, jugando con Hudson, descubrí una característica interesante que podía solucionar algunos de los problemas que teníamos y que además me ha dejado alucinado de la facilidad de instalación. Es la posibilidad de poner a otros ordenadores como esclavos de Hudson, de forma que envíe los compilados de los proyectos a ellos. De esta forma, una sola instalación de Hudson puede disponer de varios ordenadores para hacer los compilados y repartirlos entre ellos según una serie de criterios.

Poner un ordenador esclavo de Hudson en muy sencillo. Desde la misma página web de nuestra instalación de Hudson le damos a "añadir nodo esclavo". Hay varias formas de hacer que Hudson hable con el ordenador esclavo y yo elegí "instalar un servicio hudson-esclavo". Para esta opción, solo hay que dar la IP o nombre del ordenador, un usuario y password con permisos de administrador y luego los detalles "técnicos", como el path del ordenador esclavo donde queremos que hudson trabaje, dónde tiene instalado java o maven, etc. No es necesario que esos paths estén compartidos o sena públcos.

Pues bien, una vez dados estos datos, y esto es lo que me ha alucinado, hudson el sólito copia unos jar en el directorio remoto que le hemos dicho, instala un servicio y lo arranca. A partir de ahí, ya tenemos nuestro ordenador esclavo funcionando para nuestro Hudson.

¿Cómo repartimos nuestros proyectos?. Pues hay varias formas:

  1. Dejar que Hudson reparta como quiera.
  2. Asignar un proyecto (desde su configuración) a un esclavo concreto.
  3. Poner etiquetas a los distintos ordenadores esclavos y luego decir en el proyecto que puede ejecutarse en cualquier ordenador que tenga determinada etiqueta.

Esta última característica está pensada para que las etiquetas sean estilo windowxp, linux, java5, java6, etc en función del sistema operativo o versión de java que tenga instalado. De esta podemos decir que un proyecto debe compilarse en cualquier ordenador esclavo que tenga la etiqueta java5 y que, por supuesto, tendrá instalado java 5.

En nuestra web de hudson, donde habitualmente se ponen las barritas de progreso del compilado, veremos los distintos ordenadores, cada uno con sus barritas correspondiente. Pinchando uno de esos ordenadores, veremos sólo los proyectos asignados a ese ordenador.

La posible pega de todo esto es que los compilados paralelos pueden ser problemáticos, sobre todo si hay proyectos que dependen unos de otros y se compilan a la vez. La versión más moderna de Hudson, la 1.323, permite poner un "check" en la configuración del proyecto, indicándole que se quede en la cola de espera si hay algún proyecto del que depende que esté compilando en ese momento. Ese check tiene un pequeño bug, y es que no se puede salvar, así que hay que marcarlo tocando directamente en el config.xml del proyecto dentro de los directorios de Hudson.

Sep 16

Continuum vs CruiseControl

 Hace tiempo me decidí a instalar en el trabajo una de estas herramientas de integración continua, de esas que todas las noches compilan los proyectos desde cero y mandan correos a los desarrolladores y jefes sobre el éxito o fracaso de esa compilación.

En su momento evalué estas dos: CruiseControl y Continuum. Primero intenté con Continuum, porque parecía ser la más usada junto con Maven, pero me encontré con una pega en ese momento que me requería mucho trabajo para resolverla. Resulta que una vez instalado y todo a través de una interface web, le indicas a Continuum el fichero pom.xml de tu proyecto y él se encarga. La pega gorda, que me hizo desecharlo, es que en proyectos maven que tienen a su vez subproyectos debajo, Continuum obligaba a que el directorio del subproyecto se llamara igual que el artifactId de maven, cosa que en mi caso no era así. A mi me gusta poner los nombres de directorios en mayúsculas y con _ entre palabras, mientras que el artifactId coincide con el nombre del jar, y me gusta más en minúsculas y sin _. Total, que Continuum no me cogía mis proyectos maven complejos compuestos de subproyectos y no me apetecía ponerme a cambiar nombres de directorios o de jars.

La segunda pega de Continuum es que requiere que en el pom.xml esté la información para el sistema de control de versiones (CVS, Subversion, con usuario, nombre de repositorio y proyecto…. y password). Estupendo si es uno solo, pero si hay varios desarrolladores, ¿de quién ponemos ahí la información?. Por supuesto, habría que crear un usuario "anonimo" con acceso de sólo lectura al sistema de control de versiones. Cosa compleja si el servidor es de CVS y además corporativo. Nada menos que una petición al departamente de informática y un "agujero" de seguridad dejando un acceso público a nuestros "super secretos fuentes" (es un decir).

Así que me puse a probar con CruiseControl. Este fue bastante mejor. No tiene casi ningún tipo de configuración a través de interface web, por lo que todo se configura a mano. Tú te haces el checkout, le dices a CruiseControl en un fichero xml dónde están los fuentes, cada cuánto tiene que compilarlos, a quién tiene que enviar correos y listo. La interface web es además mucho más sencilla, un listado de proyectos con un botón de "build" al lado y un enlace para ver los resultados del compilado y poder bajarse los jar.

Así estuvimos funcionando unos años, pero CruiseControl fue presentando sus pegas. El fichero xml de configuración con los proyectos empezó a crecer y crecer, hasta hacerse una pesadilla cualquier modificación (había que tocar en muchos proyectos). Y encima, el botón de "build" le funciona a unos sí y a otros no, con unos navegadores sí y con otros no, y sin una regla fija. A unos les funciona con Internet explores, a otros con firefox, a otros con ninguno. Y otra pega más, a veces, si el código de los test automáticos de JUnit se queda colgado por el motivo que sea, deja colgadas todas las tareas siguientes de compilación de otros proyectos en CruiseControl. No queda más remedio que "matarlo" y volverlo a arrancar.

El otro día decimos bajar y probar una nueva versión de Continuum. Esta vez sí funcionó el importar los pom.xml, puesto que ya admite nombres de directorios y artifactId distintos. La configuración a través de web de todo el sistema es sencilla, aunque si no hace lo que tú quieres, no se puede hacer. Sigue habiendo cosas ocultas en ficheros de configuración ocultos, como la configuración del servidor de correo para que Continuum pueda enviar correos. Y sigue habiendo cosas que no sé si me gustan, como la necesidad del usuario anónimo en CVS y que en el pom.xml deben estar todos los nombres de desarrolladores y correos que intervengan en el proyecto (cosa lógica por un lado, pero que no deja de ser un rollo ponerlo y tenerlo actualizado). En este sentido, CruiseControl usaba el nombre de usuario del commit de cvs para enviarle el correo, o bien hacer un mapeo de ese nombre con una dirección de correo si no coincide.

Pero bueno, ahí tenemos un Continuum instalado y funcionando, hasta ahora bien, y después de un par de meses de prueba quizás (seguro) que nos cargamos el CruiseControl.