• Email: contact@inlogiq.com
  • Teléfono:: +34 911332656

En este post vamos a hablar de una de nuestras experiencias con VagrantPuppet y Django framework. Uno de nuestros clientes es un líder emergente en el sector energético, que ha crecido enormemente en muy poco tiempo. Sus productos y aplicaciones únicas, los diferencian de su competencia. Este cliente tiene un equipo de desarrollo razonablemente pequeño que ha sabido responder con éxito durante un período de tiempo.

Este equipo de desarrollo ha ido creciendo rápidamente para satisfacer las crecientes demandas de los clientes, el equipo de ventas y el mercado.

Por lo que, la dirección decidió acertadamente trabajar en conjunto con InlogiQ para hacer todo el proceso de desarrollo más ágil, rápido y práctico.

Cuando trabajas en pequeños equipos, no es tan relevante pararse a pensar en la estructura de tu proyecto, o en cuánto tiempo vas a gastar para la iniciación, o si las tareas que realizas son convenientes o no. La principal preocupación es terminar el proyecto y cumplir con el plazo. Cuando el equipo comienza a crecer, estas preguntas ganan mucha mas importancia. Por lo tanto es vital realizar un poco estandarización.

¿Qué queríamos lograr?

1. Rapidez de la inicialización: La creación del entorno del desarrollo / prueba no debe tomar más de 30 minutos;

2. Orientación para el desarrollo del equipo: cada miembro del equipo pueda desplegar el proyecto fácilmente en cualquier etapa del desarrollo;

3. Deployment-friendly: la implementación del proyecto en dev y el entorno de prueba debe ser fácil y sencillo;

4. Escalable: no debe haber ningún problema si agregas nuevos proyectos al entorno;

5. Bien estructurado: Todos los proyectos deben compartir una estructura uniforme y ordenada;

6. Entorno aislado: el proyecto debe funcionar independientemente del sistema.

7. Integración continua usando jenkins.

¿Qué hicimos?

Como primer paso, cambiamos la estructura de los proyectos. Para cambiar la estructura de los proyectos hemos considerado lo siguiente:

1. Todos los proyectos deben compartir una estructura común: los archivos de código fuente, las configuraciones, las librerías y los recursos requeridos por los proyectos deben estar en la misma ubicación en todos los proyectos.

2. Todos los proyectos deben compartir los pasos de configuración comunes – Un archivo de configuración para crear entorno virtual específico del proyecto

3. Todos los proyectos deben compartir el entorno de ejecución común salvo algunas excepciones – Todos los proyectos migrados a Nginx desde Apache

Estos pasos nos permiten automatizar tareas rudimentarias en el proceso de desarrollo. Creemos en «Si es repetible, es automatizable».

Cultura más fuerte de DevOps

El siguiente paso fue introducir una fuerte cultura de DevOps en el proceso de desarrollo.

DevOps es mucho más que la gestión de la configuración. DevOps trata de que los desarrolladores trabajen más de cerca con las operaciones para atender rápidamente las necesidades del negocio, manteniendo todo estable y funcionando. Formalizar la gestión de la configuración con una herramienta como Puppet es un gran paso hacia esta colaboración entre desarrolladores y operaciones, ya que el proceso está formalizado, puede ser controlado por versiones y ofrece un único punto de referencia para la configuración de entornos.

Vagrant es otra herramienta que sirve para ayudar a su organización a evolucionar a una cultura de DevOpsVagrant también ayuda a mejorar todo su flujo de trabajo usando Puppet, mejorando el desarrollo y el proceso tanto para desarrolladores como para operaciones.

Ser capaz de arrancar los proyectos Django sin esfuerzo y aplicar rápidamente los cambios es muy importante. Se minimiza el esfuerzo dedicado a la configuración y creación de entornos, lo que nos permite centrarnos en la tarea actual. Para lograr esto usamos la poderosa combinación de Vagrant y Puppet. La documentación oficial de Vagrant recomienda utilizar el aprovisionamiento basado en shell si es nuevo en Vagrant y en la variedad de herramientas de aprovisionamiento como PuppetChef o Ansible. El uso de aprovisionamiento basado en shell en Vagrant es realmente simple.

Puppet en Vagrant

La forma más rápida de proporcionar el uso de Puppet en Vagrant es habilitarlo en su Vagrantfile:

 

 

Vagrant.configure («2») hace | config |

Config.vm.provision «puppet»

end

 

 

De forma predeterminada, Vagrant configurará Puppet para buscar archivos de manifiesto en la carpeta «manifests» en relación con la raíz del proyecto y utilizará el manifiesto «default.pp» como punto de entrada. Esto significa que si su árbol de directorios se parece al siguiente, puede comenzar con Puppet con sólo una línea en su Vagrantfile.

 

 

$ tree

.

|– Vagrantfile

|– manifests

| |– default.pp

 

 

Los programas de Puppet se llaman «manifests» y usan la extensión de archivo .pp. Puppet utiliza su propio lenguaje de configuración, que fue diseñado para facilitar el trabajo a los administradores de sistemas. El lenguaje de Puppet no requiere mucha experiencia de programación formal y la documentación es excelente.

Sin embargo, rápidamente descubrimos que usando Puppet Module Tool, podemos instalar las herramientas y librerías necesarias y también realizar algunas tareas de administración antes de aprovisionar VM con Puppet, por ejemplo, instalando servidores web, BBDD etc. Un ejemplo de configuración de Puppet es el siguiente:

 

 

VAGRANTFILE_API_VERSION = «2»

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

config.vm.box = «ubuntu/trusty64»

config.vm.provider «virtualbox» do |v|

v.customize [«modifyvm», :id, «–cpus», «2»]

v.customize [«modifyvm», :id, «–memory», «1280»]

end

config.vm.provision «shell», path: «apt-update.sh»

config.vm.provision «shell», path: «install-puppet-modules.sh»

config.vm.provision :puppet do |puppet|

#puppet.options = «–verbose –debug»

end

end

 

 

Primero creamos MV, luego instalamos los módulos con el script install-puppet.sh, que utiliza la herramienta de “puppet modules” para instalar dependencias. El script de shell es simple y sólo verifica que los módulos no están instalados antes de instalar los nuevos módulos.

 

 

 

#!/bin/bash

mkdir -p /etc/puppet/modules;

if [ ! -d /etc/puppet/modules/postgresql ]; then

puppet module install puppetlabs-postgresql –version 2.4.0

fi

 

 

Conclusiones

Vagrant y Puppet no sólo mejoran las prácticas de desarrollo, sino que otorgan beneficios de DevOps. Los desarrolladores comienzan a trabajar en un entorno construido por Puppet. Esto introduce a los desarrolladores en el lado operativo y, si se gestiona adecuadamente, puede realmente ayudar a cerrar la brecha entre el desarrollo y las operaciones.

Vagrant y Puppet ofrecen un gran valor al proporcionar una retroalimentación más rápida, ya que las pruebas y el entorno de dev son similares, lo que le permite probar características complejas localmente y hacer una plataforma de desarrollo para que su equipo trabaje. Estos pequeños pasos en las herramientas y procesos que trajimos en el desarrollo de nuestros clientes les ha ayudado a cosechar muchos de los beneficios clave de DevOps.