¿Cómo acelerar los despligues (deploys) de GitLab utilizando Caches?
La descarga de dependencias puede llegar a tomar bastante tiempo durante la ejecución del despliegue. Por ello aplicaciones como Jenkins no eliminan los datos después de finalizar la ejecución del despliegue sino que los mantienen para otros despliegues futuros. GitLab utiliza el mismo tipo de comportamiento para poder acelerar este proceso que resulta repetitivo.
Los pasos para ejecutar un job (tarea) son:
- Delegar el job a un runner de GitLab.
- Descargar e inicializar la imagen de Docker.
- Descargar el repositorio Git.
- Instalar las dependencias requeridas por el repositorio.
- Ejecutar los pasos requeridos por el script de despliegue.
- Guardar artifacts si es necesario.
Al utilizar caches podemos eficientar este proceso, para ello abrimos primero el archivo .gitlab-ci.yml y actualizamos el bloque build.
build website:
stage: build
cache:
key: ${CI_COMMIT_REF_SLUG}
paths:
- node_modules/
Hemos agregado la sección cache indicando que el identificador sera el hash del commit y que deseamos habilitar cache sobre el directorio de dependencias de node (node_modules).
Otra opción posible es compartir el cache entre los multiples niveles de la pipeline, esto lo podemos hacer moviendo nuestro código al bloque superior del .gitlab-ci.yml.
cache:
key: ${CI_COMMIT_REF_SLUG}
paths:
- node_modules/
Al finalizar el proceso del build nos encontraremos con la notificación que nos indica que node_modules/ ha sido agregado al cache, y que este ha sido enviado a un contenedor para su uso futuro.
Creating cache main...
node_modules/: found ##### matching files and directories
Uploading cache.zip to https://storage.googleapis.com/gitlab-com-runners-cache/project/########/main
Al finalizar cada uno de los despliegues producidos por un commit, se actualizará el cache con los elementos nuevos que han sido agregados a las referencias incluidas dentro de paths.
Si volvemos a ejecutar la pipeline, utilizará los elementos del cache durante el proceso de despliegue.
¿Cómo eliminar el cache en GitLab?
En algunas ocasiones el uso del cache produce errores inesperados durante el proceso de despliegue. Si esto ocurre podemos eliminar el cache utilizando la opción Clear Runner Caches dentro de la sección de Pipelines.