🔥 Ускоряем CI/CD: новое видео с Дмитрием Куликовым уже на канале
Делимся записью открытого практикума, где разобрали, как ускорить сборку пайплайна в GitLab CI/CD и избавиться от лишней передачи зависимостей между этапами. Краткий конспект👇🏼
🟢Где теряется время
Каждая лишняя загрузка зависимостей, тяжёлые докер-образы под тесты и последовательный (а не параллельный) прогон разных видов тестирования: из-за этого сборка растягивается на десятки минут вместо секунд.
🟢Кэш vs Артефакты
Кэш нужен для зависимостей: привязывается к ключу (например, файлу package-lock.json) и не перекачивается заново, пока файл не менялся. Артефакты нужны для готового результата: бинарник, докер-образ, отчёт о тестах, то есть то, что нужно передать дальше или сохранить на время.
🟢Главная ошибка
Передавать зависимости (node_modules) через артефакты вместо кэша. В демо это добавляло около 7 минут на пустом изменении README, потому что зависимости выкачивались и упаковывались заново при каждом пуше.
🟢Оптимизация Dockerfile
Если копировать файл зависимостей отдельно от остального кода, слой с npm install кэшируется докером и не пересобирается, пока сами зависимости не менялись.
🟢Раннер
В конфиге GitLab Runner можно включить pull_policy: if-not-present, чтобы раннер не тянул образ заново, если он уже скачан локально.
Итог: сборка сократилась с 7 минут до 3,25 минуты, больше чем в 2 раза.
Основные элементы конфига (примеры)
🟢cache: key: files: привязка кэша к конкретному файлу зависимостей
🟢artifacts: paths / expire_in: что сохранить и на какой срок
🟢artifacts: reports: junit: результаты тестов прямо в интерфейсе GitLab
🟢tags: привязка джобы к конкретному раннеру
🟢pull_policy: ["if-not-present"]: не скачивать образ повторно, если он уже есть
Больше подробностей про раннеры, кэш, артефакты и Dockerfile в полной записи вебинара! 👇🏼
↘️ Смотреть в YouTube
↘️ Смотреть в ВК
Для тех, кто хочет на практике разобраться с CI/CD и инфраструктурой под капотом, можно начать бесплатно с демодоступов к практикумам:
↘️ Начать бесплатно практикум GitLab CI
↘️ Начать бесплатно практикум DevOps: IaC