Ответ
В GitLab CI/CD это два разных механизма с разными целями:
Кэш (Cache) — используется для ускорения последующих запусков пайплайнов за счет сохранения промежуточных файлов, которые дорого воссоздавать (например, зависимости). Кэш не гарантируется, может быть перезаписан, и его содержимое считается временным.
Артефакты (Artifacts) — это результаты работы джобы (собранные бинарники, отчеты тестирования, логи), которые должны быть сохранены, переданы между стадиями или доступны для скачивания после выполнения пайплайна. Они имеют явный срок хранения.
Практический пример в .gitlab-ci.yml:
variables:
NODE_VERSION: "18"
# КЭШ: Сохраняем node_modules между запусками, чтобы не скачивать зависимости каждый раз
cache:
key: "node-modules-$CI_COMMIT_REF_SLUG" # Ключ для инвалидации кэша
paths:
- node_modules/
policy: pull-push # Скачиваем и обновляем кэш
stages:
- build
- test
build-job:
stage: build
image: node:$NODE_VERSION
script:
- npm ci --cache .npm --prefer-offline # Используем кэшированные npm-пакеты
- npm run build
# АРТЕФАКТЫ: Сохраняем результат сборки для следующих стадий и для скачивания
artifacts:
paths:
- dist/ # Папка со скомпилированным приложением
- coverage/ # Отчет о покрытии кода
expire_in: 1 week
when: on_success
test-job:
stage: test
image: node:$NODE_VERSION
script:
- npm test
# Эта джоба автоматически скачает артефакты (dist/, coverage/) из build-job
dependencies:
- build-job
Ключевое отличие: Кэш — для скорости (оптимизация), артефакты — для сохранения и передачи выходных данных работы (результат).