La Coctelera

por Guillermo Álvarez

image

Webs Autodeployables

Una de las últimas novedades en un proyecto personal, es el autodeploye, que pese a sonar tan mal, mola mucho.
Pongamos el caso de una aplicación rails, usando git para el control de versiones y servida por Apache2 y Passenger. Mi objetivo es que la aplicación se deploye en el momento que hago commit a una determinada rama. Para ello analicemos la forma de deployar en esta aplicación en concreto.
En este caso tenemos a la aplicación (merb) ejecutándose en /home/user/app/ y servida por passenger. El deploye entero se resumiría en tres simples pasos:
1.- git pull --rebase # Se descarga los cambios del servidor

2.- rake db:autoupgrade # Ejecutar las automigraciones

3.- touch restart.txt # Reiniciar el servidor

Ahora lo definimos como método privado del controlador de admin
def deploy

output = %x(git pull --rebase)

output << %x(rake db:autoupgrade)

output << %x(touch restart.txt)

output

end

private deploy

De esta forma, despues de un post en el controlador#método: admin/deploys#create la aplicación se verá automática deployada.

Y sí. Efectivamente admin/deploys es un resources donde se tiene guardados los deploys que se han hecho, que integrado con el sistema de gestión de excepciones de la aplicación, se pueden hacer millones de estadísticas interelacionadas por ejemplo fallos-commiter, proporción de fallos en función de la hora (interesante para prohibirse deployar a diferentes horas), fallos-controlador (saber que controladores son más susceptibles a fallo), etc...


Lo bueno de este sistema, es que... casualidades del señor todo poderoso que está de encierros, github permite especificar un hook, de git, de post, de app (fuuuuu...) para notificar el post-receive. GitHub hará un post a la url privada http://user:pass@mywebapp/admin/deploys/ (o /admin/deploys/create si no eres lo suficiente restful).

Cuando comitees a tu repo de git, github se encargará de autodeployar. :-)
TODO:

class Admin::Deploys < Application

before_filter :pass_tests, :only => :create

...
end

PD: Perdón por el espaciado. Es mi tercer post. Prometome a mi mismo mejorar. A los fieles bot lectores de mi blog que os den. Si eres humano, ¡¡¡ bienvenido !!!

9, nov | 2 comentarios Posteado por: cientifico compártelo

2 comentarios

fguillen 10 nov 2008 | 01:14 AM

Oye! los malabares para el circo!.. que esto de la programación es una cosa seria.

:).. es broma, me encantan tus locuras.

f.

Guillermo Álvarez Fernández 10 nov 2008 | 01:36 AM

Pues tengo por poner unas cuantas más.

Escribe un comentario