Despliegue continuo con GitHub actions
Leyendo sobre la automatización de procesos usando GitHub, en este artículo de Reinier Hernández, descubrí más a fondo cómo funcionan los "actions", y las enormes posibilidades que permiten.
Una de mis asignaturas pendientes es aprender más sobre CI / CD (despliege e integración contínua), que forma parte de la filosofía devops. En mi caso, necesitaba un mecanismo bien simple que me permitiera hacer esto:
- Al empujar código a una rama, se mande para el servidor
- Se compilen las imágenes de Docker
- Se inicien los containers nuevos usando
docker-compose
En otras palabras, poder actualizar la aplicación sin tener que entrar al servidor, todo de forma automática.
¿Cómo lo hacemos?
Te enseñaré brevemente la vía que encontré.
Debes crear una carpeta .github
en tu repositorio, dentro otra con nombre workflow y añades un archivo con extensión .yml
, puedes ponerle el nombre que desees, en mi caso le puse deploy.yml
.
En este archivo, especificamos la rama que se usará para desencadenar el proceso de despliegue, en el ejemplo es live
.
Este workflow lo que hace es conectarse al server por SSH y ejecutar un comando, en este caso el script deploy.sh
, que tiene este contenido:
Para que la ejecución de todo este flujo se lleve a cabo, debes añadir las variables de entorno que necesita para conectarse al VPS.
Repositorio >> Settings >> Secrets
- Host: el hostname del server, por ejemplo
google.com
o simplemente el IP. - Password: la contraseña de acceso SSH.
- Port: el puerto de conexión SSH, normalmente es el 22.
- Username: usuario para conectarse por SSH, por ejemplo
root
.
Probando a ver si funciona
Ya tienes el workflow definido, los secrets y el archivo deploy.sh
. Lo próximo es añadir algunos commits y enviarlos a la rama live. Una vez que des ese paso, entra en tu repositorio a la sección de Actions y verás cómo comienza la ejecución.
Si todo sale bien, verás algo como esto al terminarse el job:
Esta vía que he descrito resulta un poco primitiva y tiene algunas desventajas, como una breve interrupción al tener que reiniciar los contenedores de tu aplicación, pero al menos te ayuda a ahorrar tiempo y eso siempre se agradece.
¿Conoces una vía mejor? Cuéntame en los comentarios.
Suscríbete a mi newsletter sobre startups y creatividad.