Назад к вопросам
Middle
117
questionbank
Каковы отличия артефактов и кэша в GitLab CI как атрибутов задачи (джобы)?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Артефакты и кэш в GitLab CI служат для ускорения сборки и тестирования, но выполняют разные функции и имеют разное назначение.
Артефакты (artifacts):
- Назначение: Сохранение результатов выполнения задачи (сборки, тестов, документации и т.д.) для последующего использования или просмотра. Они могут быть скачаны вручную или доступны через веб-интерфейс.
- Время жизни: Определяется настройками
.gitlab-ci.yml. Могут быть удалены после определенного времени или сохранены. - Размер: Обычно больше кэша, так как содержат готовые сборки, отчеты и другие результаты.
- Использование: Передача результатов между задачами в разных стадиях или для предоставления пользователям.
Пример конфигурации:
artifacts:
paths: # пути к файлам и директориям, которые станут артефактами
- build/
- test-results.xml
expire_in: 1 week # время жизни артефактов
Кэш (cache):
- Назначение: Сохранение зависимостей проекта или промежуточных результатов для ускорения последующих запусков одной и той же задачи. Кэш привязан к определенной ветке или тегу (можно настроить).
- Время жизни: Автоматически управляется GitLab. Старые записи кэша удаляются, когда превышается квота или истекает срок действия. Кэш может быть автоматически восстановлен или создан при новом запуске.
- Размер: Обычно меньше артефактов, так как содержит зависимости типа Maven репозиториев, npm пакетов и т.д.
- Использование: Ускорение установки зависимостей и сокращение времени сборки.
Пример конфигурации:
cache:
paths: # пути к директориям, которые будут кэшироваться
- node_modules/
- ~/.m2/repository/
key: # ключ кэша, может использовать предопределенные переменные
files:
- package-lock.json # кэш будет обновляться при изменении этого файла
prefix: ${CI_COMMIT_REF_SLUG} # добавляет префикс с названием ветки/тега
Ключевые отличия:
| Признак | Артефакты (artifacts) | Кэш (cache) |
|---|---|---|
| Назначение | Сохранение результатов задачи | Сохранение зависимостей для ускорения |
| Использование | Скачивание, передача между задачами (разные стадии) | Автоматическое восстановление/создание |
| Время жизни | Явно задается в конфигурации .gitlab-ci.yml |
Управляется GitLab, автоматическое удаление |
| Доступ | Через веб-интерфейс, API | Автоматически используется Runner'ом |
| Связь с веткой | Нет прямой привязки (если явно не указано) | Обычно привязан к ветке для изоляции |
Таким образом, артефакты - это выходные данные сборки, а кэш - это повторно используемые компоненты для ускорения самой сборки.
job_example:
stage: build
script:
- echo "Building and testing..."
- mkdir build
- echo "Build result" > build/result.txt
- echo "dependency installation"
cache:
paths:
- dependency_dir/ # папка с зависимостями, будет кэширована
artifacts:
paths:
- build/ # папка build станет артефактом