- Publicado
Git Hooks
- Autor
Los ficheros hook de git nos permite automatizar acciones en nuestro repositorio git.
En mi caso he automatizado el deploy de los nuevos articulos de la web.
Los ficheros hook se encuentran en la carptea hooks dentro de nuestro repositorio. No en la copia de trabajo, sinó en el repositorio del servidor. Lo que sellamaría el repositorio bare
drwxr-xr-x 2 toni toni 4096 mar 28 11:37 branches/
-rwxr--r-- 1 toni toni 66 mar 28 11:37 config*
-rw-r--r-- 1 toni toni 73 mar 28 11:37 description
-rw-r--r-- 1 toni toni 23 mar 28 11:37 HEAD
drwxr-xr-x 2 toni toni 4096 abr 11 20:40 hooks/ <--- Aqui
-rw-r--r-- 1 toni toni 11856 abr 12 19:55 index
drwxr-xr-x 2 toni toni 4096 mar 28 11:37 info/
drwxr-xr-x 176 toni toni 4096 abr 12 19:55 objects/
drwxr-xr-x 4 toni toni 4096 mar 28 11:37 refs/
Hay un monton de ficheros hook para hacer múltiples cosas. Pero para este caso solo nos interesa el fichero post_receibe. Este será el encargado de hacer cosas una vez se recibido un push en el repositorio. Usease una vez actualizado el repositorio.
El script que utilizo en mi proyecto es el siguiente. lo podés utilizar como referencia. No hace gran cosa, pero cumple con su proposito :P
#!/bin/bash
while read oldrev newrev ref
do
if [[ $ref =~ .*/master$ ]];
then
echo "Master ref received. Deploying master branch to production..."
git --work-tree=/var/www/www.inventio.tk --git-dir=/path/del/repositorio/inventio.tk checkout -f
#Deploy
cd /var/www/www.inventio.tk
echo "Installing NPM dependencies"
npm install
echo "HEXO - Generating pages..."
hexo generate
echo "Done."
else
echo "Ref $ref successfully received. Doing nothing: only the master branch may be deployed on this server."
fi
done
Si os miráis en enlace del final del post, veréis que hay un condicional para no hacer deploy de los commit que no sean del branch master, para no liarla y publicar en producción los cambios de los branch de development
Os explico un poco lo que hay:
Este if controla que no hagamos deploy de los branch de pre-producción.
if [[ $ref =~ .*/master$ ]];
Este comando se encarga de hacer el checkout de los ficheros del repositorio, sobreescribiendo todo lo que ya tengamos.
git --work-tree=/var/www/www.inventio.tk --git-dir=/path/del/repositorio/inventio.tk checkout -f
Este comando nos posiciona en la carpeta donde hemos hecho el checkout y comprueba si hay nuevos módulos en el fichero packages.json de nuestro proyecto
cd /var/www/www.inventio.tk
echo "Installing NPM dependencies"
npm install
Finalmente, con este comando, hacemos que se generen las nuevas paginas del blog.
hexo generate
Referencias de:
https://www.digitalocean.com/community/tutorials/how-to-use-git-hooks-to-automate-development-and-deployment-tasks