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.

En esta captura puedes ver los jobs que se ejecutan cuando se envía código a la rama live

¿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

Las variables:

  • 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.