Назад к вопросам
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 станет артефактом