El Problema de desarrollar plugins comerciales

Desde hace casi dos años, en Deiser venimos desarrollando plugins comerciales para Atlassian, fundamentalmente para JIRA. Como en todo desarrollo de software, ¡¡¡estamos expuestos a recibir notificaciones de bugs!!!, sobre todo debido a la amplia gama de arquitecturas donde se puede instalar JIRA y por ende nuestros plugins. Acá es donde nos encontramos con el primer obstáculo a la hora de probar las nuevas funcionalidades que añadimos en nuestros desarrollos, ¿Cómo podemos asegurarnos de que nuestra release no va a fallar bajo una determinada configuración? Tan solo pensar que en el mismo ordenador de desarrollo, deberíamos tener instalado los 4 motores de base de datos comúnmente usados (SQL Server, MySQL, Oracle y PostgreSQL), además de, las distintas versiones de Jira que soportan nuestros plugins... ¡me genera un gran dolor de cabeza!. La gestión de todos estos recursos puede llegar a convertirse en un infierno.

La posible solución

En vista de todos los problemas con los que nos podemos encontrar a la hora de simular la mayor cantidad de entornos posibles, lo más lógico, sería la virtualización de estos entornos,  Pero, ¿Quién gestiona estos entornos?, ¿Donde los ubicamos?, ¿Cuántos recursos necesitamos? En una primera aproximación, hemos estado investigando el uso de herramientas como: Vagrant, Puppet, y VirtualBox,  intentando adaptarlas a nuestras necesidades. Ahora todo tiene un poco más de sentido... Las herramientas se integran bien, lo que nos permite levantar y gestionar distintos entornos de forma eficiente.

Nuestra solución

Nuestra solución inicial consiste en integrar estas 3 herramientas de manera que podamos ser capaces de probar nuestros plugins utilizando distintas configuraciones, lo que nos permitirá minimizar la aparición de bugs; o al menos de aquellos que puedan depender de la variedad de combinaciones de entornos.

Utilizaremos Vagrant para levantar las máquinas virtuales con determinadas características y gestionar que herramientas o programas queremos que se instalen. Puppet será el encargado de oficiar la instalación y configuración de estas herramientas, mientras que, VirtualBox será la base para levantar estos entornos. En resume, la solución con la que hemos arrancado se basa en la utilización de:

  • Vagrant 1.2.2
  • VirtualBox 4.2.16
  • Ubuntu 12.04.2 (Precise Pangolin)

Con esta base, tenemos la capacidad de simular múltiples entornos de forma eficaz y controlada. La ventaja de contar con Puppet como proveedor de nuestro entorno parte de la posibilidad de configurar qué versión de software deseamos instalar en cada momento, permitiéndonos agilizar las pruebas funcionales de nuestros desarrollos. En la actualidad somos capaces de levantar y gestionar todo un entorno en aproximadamente 3 minutos.

¿Todo un entorno?

Sí, ¡todo un entorno! ¡El que quieras o necesites en cada momento! En pocos minutos somos capaces de levantar un entorno como este, por ejemplo:

Software / HerramientaVersión
Sistema operativoUbuntu 12.04.2
Jira6.0.4El usuario puede elegir entre las distintas versiones disponibles en Atlassian.
Base de datosMySQLEl usuario puede elegir el motor de base de datos preferido.
Java1.7El usuario puede elegir su versión preferida.

Próximos pasos

Éste es solo el comienzo, nuestro pequeño punto de partida. No ha sido un camino fácil, se ha invertido tiempo en investigaciones, pruebas, errores y más pruebas, pero queremos seguir creciendo  y sabemos que si seguimos avanzando en esta línea las posibilidades son infinitas: entornos de pruebas, entornos de desarrollo, la gestión y mantenimiento de nuestros servidores, etcétera. Seguiremos intentando mejorar la integración de las herramientas para que nos permitan ser más ágiles en nuestras tareas diarias. ¿Qué experiencia tenéis con estos entornos? ¿Cómo lo estáis abordando? Estamos deseando seguir aprendiendo y estoy seguro que muchos de vosotros ya tenéis muchísima experiencia. Muchas gracias. Esperamos pronto tener la oportunidad de contaros cómo nos va.