Делимся записью открытого практикума, где разобрали, как ускорить сборку пайплайна в GitLab CI/CD и избавиться от лишней передачи зависимостей между этапами. Краткий конспект👇🏼
Каждая лишняя загрузка зависимостей, тяжёлые докер-образы под тесты и последовательный (а не параллельный) прогон разных видов тестирования: из-за этого сборка растягивается на десятки минут вместо секунд.
Кэш нужен для зависимостей: привязывается к ключу (например, файлу package-lock.json) и не перекачивается заново, пока файл не менялся. Артефакты нужны для готового результата: бинарник, докер-образ, отчёт о тестах, то есть то, что нужно передать дальше или сохранить на время.
Передавать зависимости (node_modules) через артефакты вместо кэша. В демо это добавляло около 7 минут на пустом изменении README, потому что зависимости выкачивались и упаковывались заново при каждом пуше.
Если копировать файл зависимостей отдельно от остального кода, слой с npm install кэшируется докером и не пересобирается, пока сами зависимости не менялись.
В конфиге GitLab Runner можно включить pull_policy: if-not-present, чтобы раннер не тянул образ заново, если он уже скачан локально.
Итог: сборка сократилась с 7 минут до 3,25 минуты, больше чем в 2 раза.
Основные элементы конфига (примеры)
Больше подробностей про раннеры, кэш, артефакты и Dockerfile в полной записи вебинара! 👇🏼
Для тех, кто хочет на практике разобраться с CI/CD и инфраструктурой под капотом, можно начать бесплатно с демодоступов к практикумам:




