Deployando directamente con git
Hoy les quiero contar cómo se puede configurar git
para que deployemos
directamente con un push
en nuestro server.
Entorno
Vamos a suponer que ya tenés tu sitio en un repositorio y que lo que estás haciendo ahora en tu ciclo de deploy es algo similar a esto:
- Hacés tus cambios en tu repo y commiteás a master.
- Te conectás por
ssh
a tu server y te parás en el directorio donde tenés tu sitio - Hacés un
git pull
para descargar tu nuevo sitio.
Si bien no es algo complejo, puede llegar a ser medio tedioso. Y qué mejor si
se puede hacer un deploy simplemente haciendo git push
, no? xD.
Configuración
Server
Vamos a suponer que estás sirviendo tus archivos con un Apache o un Nginx en el
directorio /home/bitson/mi_sitio/
.
Para poder llevar adelante esta configuración, vamos a separar por un lado los
archivos del sitio y por el otro los archivos del control de versiones.
Necesitamos tener un nuevo repo en /home/bitson/mi_sitio.git
. Para eso nos
conectamos al server por ssh como siempre y ejecutamos:
mkdir -p /home/bitson/mi_sitio.git
cd /home/bitson/mi_sitio.git
git init --bare
Con el parámetro
--bare
le decimos que no vamos a tener los archivos con código fuente, sólo los archivos internos degit
.
Hooks
Ahora que tenemos el repositorio creado, tenemos que tener un directorio
hooks
. Ahí dentro vamos a crear un archivo que se llame post-receive
con el
con permisos de ejecución siguiente contenido:
#!/bin/sh git --work-tree=/home/bitson/mi_sitio --git-dir=/home/bitson/mi_sitio.git checkout -f
Para darle permisos de ejecución, corré el comando:
chmod a+x post-receive
Ahora cuando hagamos un push
a este repositorio en mi_sitio.git
se va a
ejecutar el hook
que acabamos de crear en post-receive
.
Máquina local
Ahora lo que tenés que hacer es agregar un repositorio remoto a tu repositorio local:
git remote add deploy ssh://usuario@tu_dominio.com/home/bitson/mi_sitio.git
Ahora trabajamos localmente y cuando queremos deployar lo que vamos a hacer es:
git push deploy master
Y voilà! Asunto resuelto.
Limpieza
Si tu entorno era similar a lo que describimos al principio del artículo, si te
conectás al server, te parás en /home/bitson/mi_sitio
y tirás un git status
te va a decir que hubo cambios. Porque claramente ese repositorio no sabe que
se actualizó... De hecho ya no necesitás tener ese repositorio porque los
archivos de git
los tenés en /home/bitson/mi_sitio.git
.
Así que lo que podés hacer para evitar confusiones es borrar el .git
que
tenés en /home/bitson/mi_sitio
.
rm -rf /home/bitson/mi_sitio/.git
Fácil? Dejanos tu comentario
Comentarios
Comments powered by Disqus