Исходя из моего опыта работы с подобными системами, эта проблема состоит примерно из двух частей:
Повторяемый метод для проверки источников, сборки программного обеспечения и его тестирования (если вы хотите выполнять непрерывное тестирование, а также сборку), используя небольшое количество вызовов командной строки. *
Способ вызова этих командных строк на различных серверах в ферме сборки.
Для последнего мы использовали BuildBot , который, кажется, работает очень хорошо.
Для первых у нас есть доморощенное решение, которое начиналось как простой сценарий оболочки bash и росло ... довольно существенно. Исходя из опыта, я бы посоветовал начать с python, а не с bash - вы потратите гораздо больше кода на обработку установки и настройки, чем на фактический вызов программ. (Кроме того, возможно, вам будет проще запустить его в Windows, если вы это делаете.)
Вещи, которые я обнаружил, являются ключевыми в полезности нашего скрипта:
Повторяемость в железной оболочке. У нас есть стандартный набор инструментов для сборки, и сценарии начинаются с очистки переменных среды. Есть очень мало параметров командной строки; все идет в конфигурационные файлы, а те в контроле версий.
Logging. Мы создаем журнал каждой команды, выполняемой сценарием сборки.
Наследование файла конфигурации. Каждый вариант нашего программного обеспечения получает файл конфигурации, и эти файлы могут содержать более общие параметры (которые включают даже более общие параметры).
расширяемость. Когда мы добавляем новый исходный компонент, довольно просто добавить набор инструкций для сборки этого компонента (и инструкции могут быть произвольным кодом bash). Часть «может быть произвольным кодом», вероятно, является ключевой здесь; Ни в коем случае ранее существовавший продукт не сможет выполнять все изворотливые вещи, которые вам нужны для большой сложной реальной системы.
Вы можете начать с довольно простого сценария и позволить ему расти органически по мере необходимости; честно говоря, хотя у нас это немного грязно, я думаю, что мы получили гораздо более полезный результат, чем с тяжелым дизайном сверху вниз.