Cache y Artifacts
Cache y Artifacts
Dos mecanismos para compartir archivos entre jobs, con propositos diferentes.
Diferencias clave
| Caracteristica | Cache | Artifacts |
|---|---|---|
| Proposito | Acelerar jobs (dependencias) | Pasar resultados entre stages |
| Garantia | Best-effort (puede no existir) | Garantizado (se sube a GitLab) |
| Almacenamiento | Local al runner o S3 | GitLab server |
| Disponibilidad | Mismo runner (o S3 compartido) | Cualquier job del pipeline |
| Expiracion | Configurable | Configurable |
Cache
Ideal para dependencias que no cambian entre ejecuciones: node_modules, .pip, .m2.
Configuracion basica
test:
cache:
key: ${CI_COMMIT_REF_SLUG}
paths:
- node_modules/
script:
- npm ci
- npm test
Cache key strategies
# Por rama
cache:
key: ${CI_COMMIT_REF_SLUG}
paths:
- node_modules/
# Por lockfile (mas preciso)
cache:
key:
files:
- package-lock.json
paths:
- node_modules/
# Por rama + lockfile
cache:
key:
prefix: ${CI_COMMIT_REF_SLUG}
files:
- package-lock.json
paths:
- node_modules/
Cache policy
install:
cache:
key:
files:
- package-lock.json
paths:
- node_modules/
policy: pull-push # Default: descarga y sube
script:
- npm ci
test:
cache:
key:
files:
- package-lock.json
paths:
- node_modules/
policy: pull # Solo descarga, no sube
script:
- npm test
Limpiar cache
Desde la UI: CI/CD > Pipelines > Clear Runner Caches
Artifacts
Archivos generados por un job que se almacenan en GitLab y estan disponibles para otros jobs.
Configuracion basica
build:
stage: build
script:
- npm run build
artifacts:
paths:
- dist/
expire_in: 1 week
deploy:
stage: deploy
script:
- ./deploy.sh dist/
# Automaticamente recibe artifacts del stage anterior
Artifacts con reports
GitLab puede interpretar ciertos formatos de artifacts:
test:
script:
- npm run test:ci
artifacts:
reports:
junit: junit-report.xml
coverage_report:
coverage_format: cobertura
path: coverage/cobertura-coverage.xml
Esto muestra resultados de tests y cobertura directamente en los Merge Requests.
Artifacts condicionales
test:
script:
- npm test
artifacts:
paths:
- coverage/
when: always # Subir aunque el job falle
expire_in: 3 days
Valores de when: on_success (default), on_failure, always.
Patron optimizado completo
stages:
- install
- test
- build
install:
stage: install
cache:
key:
files:
- package-lock.json
paths:
- node_modules/
policy: pull-push
script:
- npm ci
artifacts:
paths:
- node_modules/
expire_in: 1 hour
test:
stage: test
dependencies:
- install
script:
- npm test
build:
stage: build
dependencies:
- install
script:
- npm run build
artifacts:
paths:
- dist/
expire_in: 1 week
Siguiente: Capitulo 7: Estructura de .gitlab-ci.yml →