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