Мы пытаемся реализовать конвейер непрерывной интеграции в нашей среде. У нас много разных сервисов, каждый со своим Git-репозиторием.Развертывание выполняется через Puppet с использованием внешнего классификатора узлов, который определяет, какие классы развертывать на каждом типе хоста. И файлы Puppet находятся в собственном репозитории Git, как показано здесь:
Только это не просто 3 сервиса, это больше похоже на 100. Итак, проект Puppet — это чудовищный монолит из множества манифестов, и, конечно же, он находится в собственном независимом репозитории Git.
Теперь приходит старина я, которому поручено настроить шаблон для CI, чтобы, когда кто-то запрашивает слияние ветки, скажем, службы A, с мастером, мы могли запустить сборку CI, которая будет разверните виртуальную среду, разверните службу A на некоторых виртуальных машинах и убедитесь, что новая ветвь проходит все автоматизированные тесты. Конечно, проблема в том, что для развертывания новой сборки службы А мне нужно не только ее собрать, но и обновить манифест Puppet, чтобы он ссылался на новую версию сборки... а файлы Puppet находятся в полностью независимое репо, а не в моей ветке. Так что у меня нет простого способа сказать Хозяину Марионеток, что для это ветке нам нужно использовать сборку CI, а не основную версию.
Я не могу быть первым человеком, который когда-либо захочет настроить CI для такой среды, но я искал в Интернете решения и ничего не нашел. Возможно, я использую неправильные условия поиска.
Может ли кто-нибудь предложить подходящий шаблон проектирования, который позволит мне реализовать непрерывную интеграцию для всех моих сервисных репозиториев?