Sobes.tech
Middle

Какви са разликите между артефакти и кеш в GitLab CI като атрибути на задачата (job)?

sobes.tech AI

Отговор от AI

Артефакти и кеш в GitLab CI служат за ускоряване на сглобяването и тестването, но изпълняват различни функции и имат различно предназначение.

Артефакти (artifacts):

  • Назначение: Запазване на резултатите от изпълнението на задача (сглобяване, тестове, документация и т.н.) за последващо използване или преглед. Те могат да бъдат изтеглени ръчно или да са достъпни чрез уеб интерфейс.
  • Време на живот: Определя се от настройките в .gitlab-ci.yml. Могат да бъдат изтрити след определено време или запазени.
  • Размер: Обикновено по-големи от кеша, тъй като съдържат готови сборки, отчети и други резултати.
  • Използване: Пренасяне на резултати между задачи в различни етапи или за предоставяне на потребителите.

Пример за конфигурация:

artifacts:
  paths: # пътища към файлове и директории, които ще станат артефакти
    - build/
    - test-results.xml
  expire_in: 1 седмица # време на живот на артефактите

Кеш (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 ще стане артефакт