Volver
Despliegues automáticos sin downtime en GitLab

Despliegues automáticos sin downtime en GitLab

- - Artículos

La semana pasada anunciamos que hemos dado soporte a GitLab como ciudadano de primera clase en Moss. Si alojas el código de tus aplicaciones web en repositorios de GitLab.com, ahora puedes disfrutar de todas las características que antes sólo estaban disponibles para GitHub y Bitbucket. Como en éstos, simplemente tienes que autorizar a Moss acceso a tu cuenta de GitLab y podrá desplegar los repositorios que allí tengas.

De esta forma puedes iniciar despliegues automáticamente al “pushear” tu código, o desplegar manualmente con un solo click. En cualquier caso, tus sitios web se beneficiarán de un proceso sin downtime (sin parada del servicio). ¿Quieres conocer los detalles? Por favor sigue leyendo 😀

Push to deploy

Siempre que “pushees” tu código a un branchtag git de tu elección, Moss desplegará tu sitio web (si quieres). Básicamente Moss registra un webhook en GitLab.com para recibir una notificación tan pronto hagas push en tu repositorio. Entonces comprueba qué sitio(s) web se ven afectados por el “push” y dispara los procesos de despliegue que se requieran.

Un único git push podría involucrar múltiple despliegues. P.ej. si tienes webs diferentes que usen el mismo repo y branch/tag. También si lanzas múltiples instancias de tu web tras un balanceador de carga. En estos casos, tus sitios se despliegan de forma concurrente.

Puedes habilitar esta característica en Moss en cualquier momento. Sólo tienes que marcar la casilla “Push to deploy” en cada sitio donde la desees.

Despliegues sin downtime

Tanto si despliegas tu sitio web automáticamente como si usas el botón “Desplegar” de Moss, siempre te beneficiarás de sus despliegues sin downtime (aka atómicos).

Moss clona tu repositorio git en una nueva carpeta de tu servidor. Entonces ejecuta el script de pre-activación que se necesita para construir tu aplicación. Moss sugiere un script apropiado para los frameworks PHP que soporta de manera nativa, pero tú puedes (¡deberías!) adaptarlo a las necesidades de tu aplicación. Normalmente, dicho script actualiza las dependencias de la aplicación y ejecuta las migraciones de la base de datos (si es que hay alguna). A continuación puedes ver un ejemplo para una aplicación Laravel típica:

composer install --prefer-dist --no-dev --no-interaction
php artisan migrate --force

Una vez el script de pre-activación termina, Moss activa la nueva versión. Esto significa que tu(s) servidor(es) web – Nginx solo o con Apache – comienzan a servir tu nueva versión que se había quedado apartada en una carpeta distinta. Esto se realiza cambiando un enlace simbólico en el servidor, de ahí el adjetivo “atómico” para estos tipos de despliegues.

El proceso que hemos descrito hasta ahora exhibe dos ventajas significativas:

  • Tu sitio web no sufrirá ningún downtime si tu despliegue falla, puesto que tu versión anterior sigue sirviéndose en ese caso. Moss te enviará una notificación para informarte del error.
  • Tu sitio web no debería sufrir ningún downtime si tu despliegue se realiza con éxito, puesto que Moss ejecuta todos los procesos pesados antes de activar la nueva versión.

En algunos casos necesitas ejecutar algún comando después de que la versión se active. Siguiendo con el ejemplo de una aplicación Laravel, tendrías que reiniciar los workers que utiliza (si es que los usa) tras activar la nueva versión. En Moss puedes hacer esto proporcionando un script de post-activación como el de abajo:

php artisan queue:restart

No tienes que hacer nada para habilitar despliegues sin downtime en Moss. Sólo elige el repo git apropiado cuando crees tu sitio web en Moss, y revisa que los script de pre-activación y post-activación se ajustan a tu aplicación.

Conclusión

Moss soporta despliegues sin downtime y automáticos desde el principio. Sin embargo, esta última característica sólo estaba disponible para repositorios de código alojados en GitHub o Bitbucket. Hasta ahora. Moss se integra también con GitLab.com para ofrecer la misma capacidad de administración de servidores y sitios web a los usuarios de GitLab.

¿Quieres probarlo? Entra o crea tu cuenta para ver nuestra integración con GitLab (entre otras). ¡Tu feedback siempre es bienvenido!

¡No te pierdas ningún post! Subscríbete al Blog de Moss