Ответ
В GitLab CI/CD артефакты — это набор файлов или директорий, которые создаются в процессе выполнения job'а (задания) и сохраняются GitLab Runner'ом. После завершения job'а эти файлы становятся доступными для скачивания через веб-интерфейс GitLab, а также могут быть автоматически переданы в последующие job'ы того же пайплайна.
Типичные use-cases для артефактов:
- Скомпилированные бинарники: JAR,
.exe, Docker-образы (если сохранять как tarball). - Результаты тестирования: JUnit/XML отчеты, отчеты о покрытии кода (coverage).
- Логи сборки и деплоя.
- Конфигурационные файлы, сгенерированные для конкретного окружения.
Практический пример из .gitlab-ci.yml:
Мы настраиваем пайплайн, где этап сборки создает артефакт, а этап тестирования и деплоя его использует.
stages:
- build
- test
- deploy
build_job:
stage: build
script:
- mvn clean package -DskipTests
artifacts:
paths:
- target/*.jar # Сохраняем собранный JAR-файл
expire_in: 1 week # Автоматически удалим через неделю
reports:
junit: target/surefire-reports/TEST-*.xml # Специальный артефакт для отображения тестов в UI
test_job:
stage: test
script:
- java -jar target/*.jar --test # Используем артефакт из build_job
dependencies:
- build_job # Явно указываем, от какого job'а нужны артефакты
artifacts:
paths:
- test-reports/
deploy_to_staging:
stage: deploy
script:
- scp target/*.jar deploy@server:/app/ # Копируем тот же JAR на сервер
dependencies:
- build_job # Берем артефакт из build, игнорируя артефакты test_job
only:
- main
Ключевые особенности и best practices:
dependencies: Позволяет контролировать, какие артефакты из предыдущих stages попадут в текущий job. По умолчанию job получает артефакты из всех предыдущих stages.expire_in: Критически важно для управления хранилищем. Для временных файлов (логи, промежуточные отчеты) ставим короткий срок. Для релизных бинарников можно не указывать (вечное хранение) или указать длительный срок.- Именованные артефакты: Можно задать имя (
name), что полезно при скачивании через API. - Кэширование vs Артефакты: Кэш (
cache) используется для ускорения повторных сборок (например, зависимостиnode_modules/). Артефакты — это конечный результат работы пайплайна, который должен быть сохранен. Путать их не стоит. В моей работе артефакты — это стандартный способ передавать результаты между этапами CI/CD и сохранять билды для последующего развертывания или отладки.