Sobes.tech
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