Ответ
Кеш (Cache) и Артефакты (Artifacts) — это механизмы для работы с файлами в пайплайне, но с разными целями и поведением.
| Аспект | Кеш (Cache) | Артефакты (Artifacts) |
|---|---|---|
| Основная цель | Ускорение последующих сборок за счет повторного использования неизменных зависимостей. | Передача файлов между этапами (джобами) пайплайна и сохранение результатов сборки. |
| Типичное содержимое | Директории с зависимостями: node_modules/, .venv/, target/, ~/.cache/. |
Результаты сборки: бинарники (.jar, .exe), пакеты (.deb, .rpm), отчеты тестов (junit.xml), документация. |
| Жизненный цикл | Не гарантирован. Может быть удален GitLab Runner для экономии места, если долго не используется. | Гарантированно хранятся на GitLab-сервере заданное время (определяется expire_in). |
| Доступность | Доступен до начала выполнения джобы (распаковывается). | Доступен после успешного выполнения джобы (в последующих этапах или для скачивания из UI). |
| Ключевое отличие | Оптимизация производительности. | Сохранение выходных данных. |
Практический пример .gitlab-ci.yml для Python-проекта:
# Определяем кеш для виртуального окружения, чтобы не переустанавливать пакеты каждый раз
cache:
paths:
- .venv/
key: $CI_COMMIT_REF_SLUG # Разный кеш для разных веток
stages:
- test
- build
# Этап тестирования
run-tests:
stage: test
script:
- pip install -r requirements.txt
- pytest --junitxml=report.xml
artifacts:
paths:
- report.xml # Отчет о тестах передается дальше и сохраняется
reports:
junit: report.xml
# Этап сборки пакета
build-package:
stage: build
script:
- python setup.py sdist bdist_wheel
artifacts:
paths:
- dist/ # Собранные пакеты (.tar.gz, .whl) сохраняются для скачивания или деплоя
expire_in: 1 week # Храним артефакты неделю
В этом примере .venv кешируется для скорости, а report.xml и папка dist/ — это артефакты, которые являются результатом работы пайплайна.