Замечания по ускорению сборки:
Сборки, как правило, связаны с вводом / выводом, поэтому распределяйте их по нескольким дискам / контроллерам или машинам. Например, поместите источник на один физический диск, а цель (выходные данные сборки) - на другой физический диск, и отделите оба этих диска от физического диска, на котором находятся инструменты сборки (.NET, Java, Ant и т. Д.). ) и с физического диска, на котором установлена ваша ОС.
Сборки часто могут выполняться асинхронно, поэтому устанавливайте и используйте отдельные машины сборки (сервер непрерывной интеграции). Используйте это, в частности, для расчета метрик, создания документов, подготовки кандидатов на выпуск и всего, что занимает слишком много времени или не требуется на рабочей станции разработчика.
Инструменты сборки часто включают в себя множество накладных расходов на запуск / останов процесса, поэтому выбирайте инструменты, сценарии и процедуры, которые минимизируют эти издержки. Это особенно верно для таких инструментов, как make и Ant, которые обычно вызывают другие инструменты в качестве подпроцессов. Например, я перехожу к системе сборки на основе Python, чтобы я мог выполнять большую часть своей обработки сборки из одного процесса, и при этом иметь возможность легко создавать другие процессы, когда это необходимо.
Инструменты сборки часто поддерживают пропуск шагов компоновки, основанный на обнаружении того, что они ничего не будут делать (не компилируйте, потому что источник не изменился со времени последней компиляции). Однако эта поддержка пропуска этапов сборки по умолчанию часто не активна - вам может потребоваться ее особый вызов. Например, компиляторы обычно делают это автоматически, а генерация кода - нет. Конечно, следствием этого является использование инкрементных сборок, когда это возможно (при разработке на рабочей станции, пока она «ведет себя»).
Сценарии сборки могут быстро и легко стать очень сложными, поэтому найдите время, чтобы упростить их. Сначала разделите сборки на отдельные проекты, каждый из которых собирает только один «артефакт», такой как JAR, DLL или EXE. Это позволяет вам сэкономить много времени, просто не вызывая длинную сборку, которая вам сейчас не нужна. Во-вторых, упростите каждую сборку проекта, НИКОГДА не переходя в другой проект - всегда устанавливайте зависимости вашего проекта с помощью артефакта сборки, а не источника. Это сделает каждый проект автономным, и вы можете использовать «супер» сценарии для создания различных подмножеств проектов по своему усмотрению.
Наконец, относитесь к своей сборочной инфраструктуре как к собственному реальному проекту - регистрируйте ошибки и обращайтесь к ним с запросами функций, создавайте версии, выполняйте официальные выпуски и продолжайте совершенствовать их до бесконечности. Относитесь к нему как к необходимому продукту, а не как к запоздалой мысли: ваша сборка - это ваш жизненный источник для любого здорового проекта, он может спасти ваши булочки, если вы заботитесь о нем.