Camino de migas Camino de migas
Blogs (Tecnología) Blogs (Tecnología)
El viaje del código fuente a producción

Arquitectura

Desde la creación del Departamento de Arquitectura en Andago, uno de nuestros mayores objetivos ha sido el de mejorar el proceso del paso de las aplicaciones de las manos de los desarrolladores a los entornos de producción. Este es un proceso delicado en el que se tienen que controlar temas importantes cómo compatibilidad de los distintos entornos (desarrollo, pre y pro) por ejemplo en cuanto a librerías, versión de la máquina virtual, del servidor de aplicaciones, control de las versiones instaladas y trazabilidad hacia las fuentes originales, etc...

Investigando la forma de disponer de un repositorio de versiones de los paquetes instalables nos topamos con una idea más interesante y que además de cubrir nuestras necesidades mejoraba considerablemente el trabajo de desarrollo: la integración continua. Tras investigar un poco nos decidimos por implantar un servidor Hudson.


Hudson


Este servidor nos permite realizar compilaciones periódicas de todos los proyectos de la compañía cuando se detectan modificaciones en los repositorios de fuentes (subversion) e incluso realizar pruebas automatizadas sobre el resultado de dicha compilación para comprobar que la nueva versión está lista para ser desplegada, en primer lugar en el entorno de pre-producción y posteriormente pasar a producción. En caso de fallar el proceso de compilación o las pruebas se notifica a la persona que ha realizado el commit que ha "roto" el proyecto, al jefe de proyecto responsable y al responsable de arquitectura. Otra de las ventajas de tener un punto unificado para la compilación es la de asegurarnos que todo el código ha sido subido al subversion correspondiente, no se depende de elementos que sólo están en el equipo del desarrollador y que disponemos de información del estado actual del proyecto y la posibilidad de que en caso de que falle la última versión encontrar una que si haya pasado los procesos de compilación y pruebas.

Otro de los objetivos de nuestro departamento era el de proveer de entornos de desarrollo y pre-producción a todos los proyectos lo que elevaba en gran medida las necesidades de servidores. Desde hace bastante tiempo y con estas ideas de crecimiento en mente Andago siempre ha dado una gran importancia a la virtualización, comenzamos con VMWare, pasandonos rapidamente a entornos con qemu y actualmente contamos con una granja de 6 servidores con tecnología Xen desplegados por el Departamento de Sistemas que nos permiten tener al rededor de 50 máquinas virtuales en ejecución y una gran escalabilidad en caso de aumentar la demanda.

 

Rack Virtual



En este punto cuando un equipo nos pide que realicemos el despliegue de un determinado proyecto, los técnicos de arquitectura pueden ir al servidor de integración Hudson y recoger los desplegables listos para el despliegue. Cómo el proceso manual no era la mejor manera de realizar el paso a los entornos y dificultaba llevar un control de los elementos desplegados en cada entorno se le dió una nueva vuelta a la tortilla, empaquetar dichos entregables dentro de paquetes debian listos para instalar en los entornos. De esta forma nos evitamos estar tocando dentro de los servidores en caso de haber cambios en las aplicaciones y lo único que tenemos que hacer es modificar el contenido del paquete, actualizar su versión y el changelog y actualizarlo en el servidor de producción. Es más con este sistema y con un simple listado de los paquetes instalados podemos ver claramente que versión de la aplicación está desplegada.

Al principio el proceso de paquetización era manual, una vez creado el paquete el resto de ocasiones sólo era necesario modificar su contenido con las nuevas versiones, pero poco a poco el trabajo que suponía estar modificando las versiones de los paquetes ocupaba una gran parte del tiempo disponible en el departamento nos lanzamos a la tarea de automatizar el proceso. El proyecto lo nombramos con el del divertido robot de pixar: Wall-e.

wall-eWall-e son un conjunto de scripts y plantillas que una vez configurados para cada proyecto toma los distintos desplegables generados por Hudson y los coloca en su ubicación dentro del paquete, actualiza el changelog del paquete según las fuentes del subversion y la versión a partir de la revisión correspondiente de las fuentes. A continuación sube el paquete a su repositorio debian correspondiente, ya sea este uno de los internos de la compañía o los privados destinados a cliente.

De esta forma para instalar el paquete en el servidor correspondiente tan sólo tenemos que ejecutar:

apt-get update
apt-get upgrade

 

Resumiendo, el proceso de paso de un proyecto a producción sería el siguiente:

Diagrama entornos

  • Los desarrolladores aplican los cambios convenintes sobre la rama del suvbersion correspondiente del proyecto.
  • El responsable del proyecto integra los cambios sobre el trunk principal.
  • El servidor de integración Hudson detecta el cambio en el trunk, descarga el código, lo compila y pasa las pruebas.
  • En caso de que estas sean positivas, wall-e empaqueta el resultado y lo sube al repositorio debian correspondiente.
  • Los técnicos de arquitectura instalan la nueva versión de forma sencilla mediante apt en los entornos de pre.
  • El equipo de pruebas realiza más pruebas sobre el entorno de pre.
  • El responsable del proyecto con los resultados de las pruebas da el ok para el paso a producción.
  • Los técnicos de arquitectura instalan la nueva versión de forma sencilla mediante apt en los entornos de producción.
  • El proyecto ha pasado felizmente a producción.


Desde aquí mi enhorabuena a mis compañeros de Arquitectura: David, Gema y Carlos con los que hemos llevado a cabo este trabajo.

Javier Turégano
 


  • Comentarios
José María Olmo Millán
La verdad que es muy bueno para una empresa de desarrollo de software disponer de una política de integración continua y paquetización como las que habéis creado con Hudson y Wall-e. Da seguridad, estabilidad al software, así como un método rápido para paquetizacione rápidas de nuevas versiones de software en los diferentes entornos.

Dado los futuros entornos de Software como Servicio donde Ándago se está introduciendo con infraestructuras distribuidas en datacenters de AAPP, propios o infraestructuras cloud públicas como Amazon, la unidad de paquetización y despliegue se convierte la imagen de servidor virtual; muchas veces para un mismo cambio habrá que generar diferentes versiones de imágenes de servidores virtuales en función del tipo de entorno (pre,pro), y del entorno de virtualización de despliegue (Amazon, propio, distribuido)

Por ello, una posible extensión de Wall-e, o de otra futura herramienta interna del departamento de Arquitectura, sería una herramienta automática de generación de imágenes de servidores virtuales así como de despliegue en los diferentes entornos. Herramientas como Open Nebula te permiten arrancar dinámicamente diferentes servidores virtuales a partir de imágenes base, donde con scripts remotos pueden instalarse los nuevos paquetes, para posteriormente la generación de nuevas imágenes para dicho entorno (amazon o no), para finalizar con paradas de viejos servidores y arranque de nuevas instancias. De esta forma herramientas de gestión de entornos virtualizados en la nube, pueden a su vez utilizarse como herramientas de integración y paquetización de imágenes para su ejecución en clouds.

Enhorabuena por el trabajo, y a por la versión SaaS del 30 de Septiembre.

Publicado el día 12/06/09 16:26.

Subir Subir
Jesús Manuel Navarro López
Supongo que conoces el "clásico" de Martin Fowler "Continuous Integration"... http://martinfowler.com/articles/continuousIntegration.html (bueno, por lo visto ésta es una versión "revisitada" por el autor).

En este otro artículo hay una visión resumida en un blog que hasta hoy no conocía: http://startuplessonslearned.blogspot.com/2008/12/continuous-integration-step-by-step.html

Publicado el día 22/06/09 0:29.

Subir Subir