Ir al contenido principal

Sincronizar repositorio SVN con apache después de cada commit

En el caso de que estés desarrollando una aplicación web utilizando un control de versiones, SVN en este caso, sería de utilidad poder visualizar la última version de la web utilizando como servidor web el mismo servidor en el que tengas el servicio SVN corriendo (en el  caso de que no uses un servicio online, sino un servidor SVN propio). Para lograr esto, debemos configurar un hook en nuestro repositorio SVN y por supuesto tener instalado un servidor LAMP.
Gracias a este hook, despues de cada commit que realice cualquier miembro del equipo de desarrollo,
se actualizará el contenido de apache para así poder visualizar/testear los últimos cambios desde el navegador web. En mi opinión esta configuración resulta muy útil en entornos de desarrollo.



Para empezar, debemos realizar un checkout sobre nuestro directorio /var/www para disponer de la estructura física de archivos del repositorio:
$ cd /var/www
$ svn checkout http://IP/svn/REPOSITORIO
Ya tenemos volcado nuestro repositorio en el directorio de apache. Ahora para que después de cada commit se actualice dicho repositorio, creamos nuestro hook en subversion:
Accedemos al directorio hook contenido en nuestro repositorio SVN
/rutaCompletaRepositorio/hook/
en mi caso
/svn/miRepositorio/hook/
en esta ruta encontraremos varias plantillas, entre ellas la que nos interesa
 
-rw-r--r-- 1 www-data root 2022 Dec  7 19:23 post-commit.tmpl

copiamos el archivo, lo renombramos como post-commit y le damos permisos de ejecución, además nos aseguramos de que el propietario del archivo sea el usuario www-data
 
$ cp post-commit.tmpl post-commit
$ chmod 755 post-commit
$ chown www-data post-commit
$ ls -l post-commit
-rwxr-xr-x 1 www-data root 2057 Jan  3 18:27 post-commit

 Ahora sólo nos falta añadir las acciones a realizar después de cada commit, para ello añadimos al final del archivo las siguientes líneas:

 
cd /var/www/Repositorio
svn up

Y listo, ya tenemos nuestro hook funcionando.

Además del hook post-commit, existen varios mas que se detallan a continuación:

 
-rw-r--r-- 1 www-data root 2022 Dec  7 19:23 post-commit.tmpl

-rw-r--r-- 1 www-data root 1663 Dec  7 19:23 post-lock.tmpl

-rw-r--r-- 1 www-data root 2344 Dec  7 19:23 post-revprop-change.tmpl

-rw-r--r-- 1 www-data root 1592 Dec  7 19:23 post-unlock.tmpl

-rw-r--r-- 1 www-data root 3510 Dec  7 19:23 pre-commit.tmpl

-rw-r--r-- 1 www-data root 2434 Dec  7 19:23 pre-lock.tmpl

-rw-r--r-- 1 www-data root 2818 Dec  7 19:23 pre-revprop-change.tmpl

-rw-r--r-- 1 www-data root 2122 Dec  7 19:23 pre-unlock.tmpl

-rw-r--r-- 1 www-data root 2852 Dec  7 19:23 start-commit.tmpl



Como información extra, para que al acceder a la aplicación web mediante un navegador se nos cargue directamente el index de nuestro proyecto, modificamos el archivo /etc/apache2/sites-available/default
Sustituimos
DocumentRoot /var/www
por
DocumentRoot /var/www/Repositorio




Comentarios