Что такое артефакты (artifacts) в GitLab CI/CD?

«Что такое артефакты (artifacts) в GitLab CI/CD?» — вопрос из категории DevOps, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В GitLab CI/CD артефакты — это набор файлов или директорий, которые создаются в процессе выполнения job (задачи) в пайплайне и сохраняются для последующего использования. Они не являются часть исходного кода репозитория.

Типичные примеры артефактов:

  • Скомпилированные бинарные файлы или пакеты (.jar, .exe, .deb).
  • Результаты выполнения тестов (логи, отчеты в JUnit XML, Allure, Cobertura форматах).
  • Документация, сгенерированная из кода.
  • Файлы конфигурации для деплоя.

Ключевые возможности и синтаксис:

Артефакты определяются в .gitlab-ci.yml с помощью ключа artifacts.

build_job:
  stage: build
  script:
    - mvn clean package  # Сборка Java-проекта
  artifacts:
    paths:
      - target/*.jar     # Сохраняем все JAR-файлы из target/
    expire_in: 1 week    # Артефакты удалятся через неделю

test_job:
  stage: test
  script:
    - mvn test
    - pytest --junitxml=report.xml  # Запуск Python-тестов
  artifacts:
    paths:
      - target/surefire-reports/  # Отчеты Maven Surefire
      - report.xml                # Отчет pytest
    reports:
      junit: report.xml  # Специальный отчет для GitLab, отображается в UI
    when: always         # Сохранять артефакты даже если job упал

deploy_job:
  stage: deploy
  script:
    - scp target/*.jar user@server:/app/  # Копируем артефакт с билд-джобы
  dependencies:
    - build_job  # Указываем, что этой джобе нужны артефакты от build_job

Важные аспекты:

  • Хранение: Артефакты хранятся на GitLab-сервере и доступны для скачивания через веб-интерфейс (вкладка "Job") или API. По умолчанию хранятся 30 дней (expire_in).
  • Передача между джобами: Джобы в последующих стадиях (stages) могут использовать артефакты из предыдущих джоб, если указать их в dependencies. Без этого каждая джоба начинается с чистого состояния.
  • Отчеты (reports): Специальные ключи, такие как reports:junit, позволяют GitLab парсить результаты тестов и отображать статистику, графики с историей падений и т.д. в Merge Request.
  • Кэширование vs Артефакты: Кэш (cache) используется для ускорения повторных сборок (например, зависимости node_modules/), а артефакты — для передачи результатов работы пайплайна.