Проблема частичной сборки проекта в системе CI/CD может быть довольно сложно решаемой. Она затрагивает несколько аспектов, но самыми важными из них являются два – время, затрачиваемое на сборку проекта при обнаружении изменений, и влияние развертывания артефактов на продуктовую и тестовые системы.
Проблему можно довольно легко решить, когда используются такие системы сборки, как GNU make, Maven, NPM и другие. Они осуществляют автоматическое управление зависимостями для определенных типов проектов. Но когда система сборки не поддерживает автоматическое управление зависимостями для проекта, сложно реализовать сборку рационально и эффективно, а значит она будет выполняться медленно, артефакты будут многократно копироваться в репозитории артефактов, а связанные сервисы будут перезапускаться даже тогда, когда нет изменений, требующих развертывания.
Есть несколько подходов для ограничения влияния избыточных сборок, и они базируются на реализации управления зависимостями:
- отслеживание зависимостей вручную;
- сборка и развертывание на основе Dockerfile;
- автоматическое управление зависимостями на основе контрольного суммирования.
Все эти подходы имеют свои преимущества и недостатки и требуют тщательного анализа перед применением. Давайте кратко рассмотрим каждый из них.