Middle
¿Cuáles son las diferencias entre artefactos y caché en GitLab CI como atributos de tarea (job)?
sobes.tech AI
Respuesta de la IA
Los artefactos y la caché en GitLab CI sirven para acelerar la compilación y las pruebas, pero cumplen funciones diferentes y tienen diferentes propósitos.
Artefactos (artifacts):
- Propósito: Guardar los resultados de la ejecución de una tarea (compilación, pruebas, documentación, etc.) para su uso o visualización posterior. Pueden ser descargados manualmente o accesibles a través de la interfaz web.
- Tiempo de vida: Determinado por la configuración en
.gitlab-ci.yml. Pueden ser eliminados después de un tiempo o conservados. - Tamaño: Generalmente mayor que la caché, ya que contienen compilaciones listas, informes y otros resultados.
- Uso: Transferir resultados entre tareas en diferentes etapas o para proporcionar a los usuarios.
Ejemplo de configuración:
artifacts:
paths: # rutas a archivos y directorios que serán artefactos
- build/
- test-results.xml
expire_in: 1 week # tiempo de vida de los artefactos
Caché (cache):
- Propósito: Guardar dependencias del proyecto o resultados intermedios para acelerar ejecuciones futuras de la misma tarea. La caché está vinculada a una rama o etiqueta específica (se puede configurar).
- Tiempo de vida: Gestionado automáticamente por GitLab. Los registros antiguos de caché se eliminan cuando se supera la cuota o expira el período de validez. La caché puede ser restaurada o creada automáticamente en una nueva ejecución.
- Tamaño: Generalmente menor que los artefactos, ya que contiene dependencias como repositorios Maven, paquetes npm, etc.
- Uso: Acelerar la instalación de dependencias y reducir el tiempo de compilación.
Ejemplo de configuración:
cache:
paths: # rutas a directorios que serán cacheados
- node_modules/
- ~/.m2/repository/
key: # clave de caché, puede usar variables predefinidas
files:
- package-lock.json # la caché se actualizará si este archivo cambia
prefix: ${CI_COMMIT_REF_SLUG} # añade un prefijo con el nombre de la rama/etiqueta
Diferencias clave:
| Característica | Artefactos (artifacts) | Caché (cache) |
|---|---|---|
| Propósito | Guardar resultados de la tarea | Guardar dependencias para acelerar la compilación |
| Uso | Descarga, transferencia entre tareas (diferentes etapas) | Restauración/creación automática |
| Tiempo de vida | Especificado explícitamente en .gitlab-ci.yml |
Gestionado por GitLab, eliminación automática |
| Acceso | A través de la interfaz web, API | Utilizado automáticamente por el Runner |
| Vinculación con rama | Sin vínculo directo (a menos que se indique explícitamente) | Generalmente vinculado a la rama para aislamiento |
Por lo tanto, los artefactos son los datos de salida de la compilación, y la caché son componentes reutilizables para acelerar la compilación misma.
job_example:
stage: build
script:
- echo "Construyendo y probando..."
- mkdir build
- echo "Resultado de la compilación" > build/result.txt
- echo "Instalación de dependencias"
cache:
paths:
- dependency_dir/ # carpeta con dependencias, será cacheada
artifacts:
paths:
- build/ # carpeta build será artefacto