En el último post de la serie hicimos un servicio de despliegue sencillo para utilizar junto a Twisted con el que realizar el auto despliegue de una aplicación web en un servidor remoto al hacer push de un nuevo commit a un repositorio alojado en Bitbucket.
Aunque los artículos anteriores sirven para entender el funcionamiento y la mecánica del servicio de auto despliegue, lo cierto es que no era demasiado útil, tanto en esta como en las siguientes entregas de esta serie, vamos a construir un sistema de auto despliegue e integración continua sencillo pero más robusto y sobre todo, vamos a implementarlo completamente nosotros mismos sin utilizar Jenkins, BuildBot o Puppet.
El plan
La idea es crear un servicio con Twisted que nos permita definir proyectos e infraestructuras de despliegue para dichos proyectos. Para ello vamos a utilizar varias herramientas libres así como una pequeña infraestructura de servidores virtuales alojados en el hosting español Gigas.
Una vez completemos el servicio, éste podrá ser extrapolado desde nuestra infraestructura de servidores virtuales a cualquier otro tipo de infraestructura y topología. Vamos a realizar nuestro periplo manteniendo principios Pythonianos como el DRY (Don't Repeat Yourself) y el KISS (Keep It Simple Stupid!).
El objetivo es disponer de una herramienta de despliegue de aplicaciones que sea sencilla y ligera para proyectos sin muchas pretensiones, es decir, algo que funcione bien y sea útil desde una etapa muy temprana y no la "cojosolución" definitiva..
Si no nos hemos vuelto majaras y nos apetece (todo se verá) intentaremos abordar el problema de actualización de bases de datos en producción, o al menos, discutiremos sobre ello y nos echaremos algunas risas.
Si es posible se intentará crear un debate constructivo en los comentarios de la serie para introducir mejoras o resolver problemas en el servicio para así emular o replicar de alguna manera el proceso de desarrollo habitual en proyectos de Software Libre donde la Comunidad cumple un papel fundamental en el desarrollo de los productos.
Asimismo, cuando la serie esté concluida y la (modesta) aplicación se considere "estable" será liberada bajo licencia GPL y publicada en el mismo Bitbucket para que toda la Comunidad pueda estudiarla, modificarla, redistribuirla o hacer lo que quiera con ella bajo los términos de la GPLv3.
Por supuesto todo esto no lo vamos a hacer en dos artículos ni en cuatro días, vamos a considerarlo un proyecto a largo plazo.
El repositorio
Lo primero que debemos hacer es modificar la estructura del repositorio Git piloto que tenemos alojado en Bitbucket al que le vamos a añadir una rama de desarrollo donde se realizarán los tests, para ello utilizamos la línea de comandos:
$ git checkout -b development
Switched to a new branch 'development'
Vamos a desarrollar siempre en esta rama y cuando hagamos un push a Bitbucket nuestro servicio detectará que el push es de la rama development y aplicara las reglas definidas para dicha rama como es pasar la batería de tests, preparar la base de datos etc.
El servicio
El esqueleto del servicio lo tenemos programado del segundo artículo, vamos a refactorizar ese mismo servicio y vamos a ir construyendo a partir de él nuestro servicio de deployment. Como ya he dicho antes, estará escrito en Python y hará uso de las librerías Twisted y Fabric.
Vamos a alojarlo en un servidor virtual de Gigas Cloud donde además vamos a crear una infraestructura virtual completa de despliegue, compilación y testeo. Ya hablaremos sobre Gigas y esa arquitectura de sistemas en el siguiente post.
Las herramientas
Las herramientas que vamos a utilizar para nuestra aventura van a ser pocas pero potentes.
-
GNU/Linux como Sistema Operativo en todos los servidores
-
Sublime Text 2 para editar el código
-
Python 2.7.2 y 3.2 para el servicio de despliegue
-
Fabric como herramienta de despliegue
-
Twisted para el desarrollo Web
-
HTML, CSS y JavaScript
Nos vemos en la próxima entrega de la serie donde empezaremos a refactorizar nuestro script de despliegue para hacerlo más genérico y robusto así como prepararlo para el uso de Fabric. Por supuesto se aceptan ideas y sugerencias. Si pensáis que esto es una estupidez también se agradecería la sinceridad para no dedicar tiempo que no sobra.
Hasta entonces, Happy hacking!
Más en Genbetadev | Hacer Auto Deploy con Bitbucket y Git (II), Hacer Auto Deploy con Bitbucket y Git (I)