Soy Gonzalo Muriel, senior delivery consultant en Deloitte con más de ocho años de experiencia en el sector IT. A lo largo de mi vida laboral siempre me he centrado en el desarrollo web, y como tal he participado en muchos proyectos, grandes y pequeños. Durante toda mi carrera profesional he estado aplicando las últimas tecnologías de desarrollo, así como las más recientes herramientas y métodos de coordinación de equipo.
Hoy os vengo a hablar de la integración tecnológica que hemos implantado en el proyecto en el que trabajo actualmente. Esta herramienta se llama Vagrant y es un producto de software libre desarrollado por HashiCorp, y la utilizamos para que los procesos de desarrollo en entorno local sean mucho más agiles.
Hoy en día, la mayoría de nuestros clientes han migrado sus datacenters al Cloud, es por ello que probar los desarrollos en entorno local nos ayuda a detectar antes los errores y supone un ahorro, tanto en tiempo como en coste, delegando a una fase más madura los despliegues en los distintos entornos Cloud.
Los proyectos de cierta envergadura suelen tener asignados un equipo de desarrollo multidisciplinar (developers, arquitectos, testers, analistas, etc). Acelerar el proceso de configuración de los entornos redunda en una mejora de la productividad, permitiendo dedicar el tiempo a otras tareas que aporten valor añadido a nuestros clientes.
La principal ventaja que nos ofrece Vagrant a nivel de desarrollo es anticipar la posibilidad de ejecutar las pruebas de integración en todos los entornos, desde el entorno local hacía el resto de stages (desarrollo, integración y producción).
Pues gracias a la herramienta Vagrant, desarrollada por HashiCorp, podremos virtualizar las infraestructuras clave del proyecto, de tal forma que cada componente del equipo tenga una copia exacta de esta infraestructura en su entorno local de una forma sencilla y rápida. Sin margen para errores humanos en su instalación y creando un canon que todos los desarrolladores tendrán en su máquina. Además, puede agilizar la experiencia de usuario de los nuevos miembros del equipo en los procesos de on-boarding del proyecto, llegando a mejorar la integración de dichos nuevos compañeros en la cadena productiva del equipo.
Vagrant es un software que nos permite configurar una instancia de una máquina virtual mediante un archivo de configuración. Este archivo nos permite configurar el sistema operativo, redes, redirección de puertos, usuarios, scripts de aprovisionamiento, etc.
Vagrant es muy útil para los equipos de desarrolladores y operadores de sistemas, ya que permite aprovisionar entornos de forma automatizada y alineada. Es decir, adiós al "en mi máquina funciona", porque el resultado de ejecutar el archivo de configuración o Vagrantfile, siempre nos proporciona una instancia configurada de la misma forma independientemente de en qué host se ejecute. Además de tener nuestro entorno de desarrollo configurado y listo para funcionar en unos 5 minutos. Desde el punto de vista de un desarrollador que no use esta herramienta, dependiendo del proyecto, montar un entorno de desarrollo puede llevarte desde 30 mins hasta varios días por errores de instalación, preguntas a compañeros, etc…
Además, si se añade al repositorio del proyecto como un recurso más, se puede mantener actualizada la infraestructura según las necesidades que surjan durante el desarrollo del proyecto.
Pasemos a una prueba técnica para introducirnos en el uso básico de esta herramienta.
El primer requisito es tener instalado Vagrant en nuestro equipo y algún gestor de máquinas virtuales, como Virtualbox, Vmware, etc. En nuestro caso usaremos VirtualBox.
Para enunciar su uso vamos a mostrar su aplicación en un proyecto real.
El proyecto en cuestión está en pleno proceso de evolución tecnológica. Para simplificar la infraestructura existente, nos centraremos en un único componente: MySQL 5.5. Dicho servidor de base de datos tiene unas vulnerabilidades detectadas que nos obliga a actualizarlo a la versión 8.0.
El proyecto web está instalado en varios clientes, así como en un entorno de desarrollo que es usado por un equipo funcional para detectar nuevas funcionalidades a implementar. Es por ello por lo que la actualización debe testearse en local para no bloquear el trabajo y, a la vez, mantener el entorno antiguo hasta el día de la implantación, para poder solucionar posibles hotfix lo más rápido posible.
Con objeto de dejar intacto el entorno actual de desarrollo, se decide utilizar Vagrant para generar una MV (Máquina Virtual) y exponer dicho servicio MySQL Server 8.0. El objetivo es levantar dicha máquina minimizado el uso de espacio en disco y automatizar todas las tareas de configuración del esquema de base de datos.
Abrimos una terminal y ejecutamos: vagrant init lo que nos creará un vagrantfile por defecto.
A continuación, lo modificamos de la siguiente forma:
Pasemos a destacar la configuración principal existente en este archivo:
A continuación, veremos el archivo bootstrap.sh que hemos realizado en el proyecto para dejar la máquina totalmente preparada para que cualquier desarrollador tenga la BBDD lista para trabajar en local.
A grandes rasgos, lo que realiza el script de aprovisionamiento bootstrap.sh es:
Todos los comandos se deben de ejecutar donde tengamos nuestro vagrantfile. En nuestro caso tenemos ./mysql80
De esta forma indicamos a Vagrant sobre que configuración/máquina queremos ejecutar la instrucción:
Por lo que, si hemos seguido todos los pasos, tras hacer vagrant up en nuestra consola obtendremos lo siguiente:
Tras la aplicación diaria de esta herramienta en nuestro entorno de trabajo, hemos observado las siguientes ventajas con respecto a los anteriores procedimientos:
Como trabajo futuro, sería interesante que una vez implantada una metodología en la que se usara este servicio por varios equipos, se implementase una biblioteca o API que permitiese que los desarrolladores pudiesen buscar las configuraciones que necesitasen para sus proyectos/pruebas.
Posibles configuraciones útiles para desarrollar:
Autor del artículo:
Gonzalo Muriel, senior delivery consultant en Deloitte