Juan Pablo Prado

Software Engineer

  • Home
  • About
  • Contact

Connect

  • Github
  • Linkedin
  • Twitter

Juan Pablo Prado © 2021

Cómo configurar una Implementación Automática con Git y un VPS

septiembre 11, 2016 By Juan Prado Leave a Comment

A photo by Steven Wei. unsplash.com/photos/g-AklIvI1aI

Introducción

En esta guía, vamos a explorar la idea de los hooks en Git y demostrar cómo configurar una Implementación Automática con Git y un VPS. Vamos a utilizar un servidor Ubuntu 16.04, esto funcionara de una manera muy similar con cualquier sistema que pueda ejecutar comandos Git.

Cuando se utiliza Git, generalmente el flujo de trabajo es solamente hacia el control de versiones. Tienes un repositorio local en el cual trabajas y un repositorio remoto en el que se mantiene todo sincronizado y puedes trabajar con un equipo y máquinas diferentes. Solo que también se puede utilizar Git para mover nuestra aplicación a producción.

Configuración del servidor

Nuestro espacio de trabajo ficticio:

Directorio de tu servidor en vivo: /var/www/html

Tu repositorio del servidor: /var/repo/site.git

¿Qué debemos hacer si queremos hacer push a site.git y que al mismo tiempo, todo el contenido este disponible en /var/www/html?

Creando nuestro repositorio

Inicia sesión a tu VPS desde la línea de comandos y escribe lo siguiente (asegúrate de no estar conectado como root):

cd /var
sudo mkdir repo && cd repo
sudo mkdir site.git && cd site.git
sudo git init --bare

--bare significa que nuestra carpeta no tendrá código fuente, sólo el control de versiones.

 sudo chown -R $USER:$USER /var/repo/site.git

$USER es la variable de entorno del usuario con el que hemos iniciado sesión.

Hooks

Los repos en Git tiene una carpeta llamada hooks. Esta carpeta contiene algunos archivos de ejemplo para posibles acciones que se pueden enganchar y llevar a cabo acciones personalizadas establecidas por ti.

La documentación de Git define tres posibles hooks de servidor: pre-receive, post-receive y update.

  • pre-receive es ejecutado tan pronto como el servidor recibe un push
  • update es similar pero se ejecuta una vez para cada rama
  • post-receive se ejecuta cuando un push está completamente terminado. Y es este el que nos interesa.

En nuestro repositorio:

ls -F

Verás algunos archivos y carpetas, incluyendo la carpeta hooks, iremos a esa carpeta:

cd hooks

Ahora, creemos el archivo post-receive escribiendo:

cat > post-receive

Cuando ejecutas este comando, tendrás un línea en blanco indicando que todo lo que escribas se guardará en este archivo. Así que escribamos:

#!/bin/sh
git --work-tree=/var/www/html --git-dir=/var/repo/site.git checkout -f

-f Cuando se cambia de ramas, continua incluso si el índice o el árbol de trabajo difiere de HEAD. Esto se utiliza para tirar a la basura los cambios locales.

Cuando hayas terminado de escribir, presione “Control-D ‘para guardar. Con el fin de ejecutar el archivo, tenemos que establecer los permisos apropiados que utilizan:

chmod +x post-receive

Se puede ver en la documentación que git-dir es la ruta de acceso al repositorio. Con work-tree, se puede definir un camino diferente a donde los archivos serán transferidos.

El archivo post-receive se ejecuta cada vez que se completa un push y está diciendo que los archivos deben estar en /var/www/html.

Máquina local

Si estás dentro de un VPS, simplemente escribe:

exit

Dentro de tu repo local Git, dile a Git que agregue un remote llamado live:

git remote add live ssh://user@example.com/var/repo/site.git

Para verificar que el remote se agrego, escribe:

git remote --verbose

Y cuando decidas hacer push al servidor live, simplemente:

git push live master

Conclusion

Ahora puedes hacer push a live cuando quieras hacer deploy de tu aplicación y continuar haciendo push a tu repo remoto GitHub sin ningún problema, comunmente mediante git push origin master

Share this:

  • Click to share on Twitter (Opens in new window)
  • Click to share on Facebook (Opens in new window)
  • Click to share on Google+ (Opens in new window)

Filed Under: Uncategorized

Categorías

  • Uncategorized