Что такое артефакты в GitLab?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Что такое артефакты в GitLab
В контексте GitLab CI/CD, артефакты (artifacts) — это файлы или набор файлов, которые создаются в процессе выполнения заданий (jobs) в pipeline и сохраняются для дальнейшего использования. Они являются одним из ключевых механизмов для передачи данных между этапами CI/CD и для предоставления результатов работы (например, отчетов тестирования или готовых бинарных файлов) для загрузки пользователями.
Основные цели и использование артефактов
- Передача данных между заданиями в pipeline. Например, задание
buildкомпилирует проект и создает артефакт (бинарный файл), который затем используется заданиемtestдля проведения проверок. - Сохранение результатов для последующего анализа. Это могут быть отчеты о тестировании (JUnit, HTML), метрики покрытия кода (Coverage), логи сборки или результаты статического анализа (SAST).
- Предоставление готовых продуктов для скачивания. Самый распространенный пример — сохранение собранного приложения (например,
.jar,.exe,.tar.gz) в качестве артефакта, который затем можно загрузить из интерфейса GitLab. - Кэширование промежуточных результатов для оптимизации. В некоторых случаях артефакты могут использоваться для сохранения состояния (например, зависимостей), чтобы ускорить следующие выполнения pipeline (хотя для этой задачи чаще используется отдельный механизм cache).
Как артефакты определяются и работают
Артефакты задаются в файле .gitlab-ci.yml с помощью ключа artifacts в определении задания. Можно указать:
paths: список путей к файлам или директориям, которые нужно сохранить.exclude: шаблоны для исключения файлов из артефакта.expire_in: срок жизни артефакта (например,7 days). По истечении этого времени артефакт удаляется.name: имя артефакта (можно использовать переменные).when: условие сохранения (on_success,on_failure,always).reports: специальные ключи для сохранения отчетов, которые GitLab может интерпретировать и отображать в UI (например,junit,cobertura).
Пример определения артефактов в .gitlab-ci.yml:
build:
stage: build
script:
- mvn clean package
artifacts:
paths:
- target/my-app.jar
expire_in: 1 week
name: "my-app-$CI_COMMIT_SHORT_SHA"
test:
stage: test
script:
- mvn test
artifacts:
paths:
- target/surefire-reports/
reports:
junit: target/surefire-reports/TEST-*.xml
deploy:
stage: deploy
script:
- cp target/my-app.jar /deployment/
dependencies:
- build # Это задание получит артефакт из задания 'build'
В этом примере:
- Задание
buildсоздает артефакт — файлmy-app.jar, который будет доступен для скачивания и для других заданий. - Задание
testсохраняет отчеты тестирования как артефакты и, благодаря ключуreports: junit, GitLab автоматически распарсит эти XML-файлы и отобразит результаты в разделе CI/CD > Jobs и на графике pipeline. - Задание
deployиспользует ключdependenciesдля указания, что ему нужен артефакт из заданияbuild. GitLab автоматически загрузит артефактmy-app.jarв контейнер заданияdeployперед выполнением его скриптов.
Типы артефактов и отчеты (reports)
GitLab выделяет особую категорию артефактов — отчеты (reports). Они не только сохраняются как файлы, но их содержимое анализируется системой для улучшения визуализации процесса CI/CD.
Ключевые типы отчетов, поддерживаемые GitLab:
junit: Отчеты о результатах тестирования в формате JUnit XML. GitLab показывает количество успешных/неуспешных тестов и время выполнения.cobertura: Отчеты о покрытии кода (code coverage) в формате Cobertura XML. GitLab вычисляет процент покрытия и отображает его в pipeline.terraform: План выполнения Terraform (tfplan). GitLab предоставляет специальный интерфейс для его просмотра.codequality,sast,secret_detection: Отчеты различных сканеров безопасности. GitLab агрегирует их и показывает в разделе Security проекта.
Взаимодействие с артефактами через UI и API
- Интерфейс GitLab: Для каждого выполненного задания, если были созданы артефакты, в его детальном view появляется кнопка Download artifacts. Также в разделе CI/CD > Jobs есть фильтр для показа только заданий с артефактами.
- API GitLab: Можно получить список артефактов задания или скачать их через REST API. Например, endpoint
GET /projects/:id/jobs/:job_id/artifacts.
Отличие артефактов от кэша (cache)
Это важный момент для понимания оптимизации pipeline.
- Артефакты создаются в одном задании и предназначены для использования в последующих заданиях того же pipeline или для скачивания. Они обычно уникальны для каждого pipeline (связываются с коммитом).
- Кэш предназначен для повторного использования данных между разными выполнениями pipeline (например, между pipeline разных коммитов или веток). Чаще всего кэшируют зависимости (пакеты npm, библиотеки Maven/Gradle), чтобы не загружать их каждый раз. Кэш может быть общим для нескольких pipeline и заданий.
Итог: Артефакты в GitLab — это мощный и гибкий механизм для сохранения выходных данных CI/CD процессов, обеспечения передачи состояния между этапами и предоставления удобного доступа к результатам работы (бинарным файлам, отчетам) для разработчиков и автоматизированных систем. Правильное их использование значительно повышает эффективность и информативность pipeline.