Я имел дело с проблемой масштабирования CI в своей компании и в то же время пытался выяснить, какой подход использовать, когда речь идет о CI и нескольких филиалах. Аналогичный вопрос есть в stackoverflow, Multiple features branch и непрерывной интеграции . Я начал новый, потому что хотел бы получить больше обсуждения и дать некоторый анализ вопроса.
На данный момент я обнаружил, что есть 2 основных подхода, которые я могу использовать (или, может быть, некоторые другие ???).
- Множественный набор заданий (здесь речь идет о Jenkins / Hudson) на ветку
- Напишите инструменты для управления дополнительными заданиями
- Массовое создание / изменение / удаление заданий
- Пользовательские настройки для каждого задания на ветку (URL SCM, дублирование репозиториев управления)
- Некоторые примеры людей, решающих эту проблему с помощью инструментов оболочки, скриптов ant и интерфейса командной строки Jenkins. Увидеть:
- http://jenkins.361315.n4.nabble.com/Multiple-branches-best-practice-td2306578.html
- http://jenkins.361315.n4.nabble.com/Is-it-possible-to-handle-multiple-branches-where-some-jobs-should-run-on-each-one-without-duplicatin-td954729. html
- http://jenkins.361315.n4.nabble.com/Parallel-development-with-branches-td1013013.html
- Настроить или создать задание Hudson автоматически
- Увеличивает нагрузку на ваш кластер CI
- Цикл обратной связи для разработчиков замедляется (если инфраструктура не может справиться с новой нагрузкой)
- Напишите инструменты для управления дополнительными заданиями
- Множественный набор заданий на 2 ветки (dev и стабильная)
- Управляйте двумя наборами вручную (если вы измените конфигурацию задания, обязательно измените в другой ветке)
- PITA, но по крайней мере так мало, чтобы управлять
- Другие дополнительные ветки не получат полный набор тестов, пока они не будут отправлены разработчикам
- Недовольные разработчики. Почему разработчику должны волновать проблемы масштабирования CI. У него есть простая просьба: когда я перейду, я хочу протестировать свой код. Просто.
- Управляйте двумя наборами вручную (если вы измените конфигурацию задания, обязательно измените в другой ветке)
Похоже, что если я хочу предоставить разработчикам CI для их собственных пользовательских веток, мне понадобятся специальные инструменты для Jenkins (API или сценарии оболочки или что-то в этом роде?) И обработать масштабирование. Или я могу посоветовать им чаще сливаться с DEV и жить без CI в пользовательских ветках. Какой из них вы бы выбрали, или есть другие варианты?
источник
Я бы создал отдельные рабочие места для каждого филиала. Я делал это раньше, и это не сложно, если вы правильно настроили Hudson / Jenkins. Быстрый способ создать несколько заданий - скопировать из существующего задания, которое имеет аналогичные требования, и изменить их по мере необходимости. Я не уверен, хотите ли вы разрешить каждому разработчику настраивать свои рабочие места для своих веток, но для одного человека (например, менеджера сборки) это не так уж сложно. После того, как пользовательские ветви будут объединены в стабильные ветви, соответствующие задания могут быть удалены, когда они больше не нужны.
Если вас беспокоит нагрузка на сервер CI, вы можете настроить отдельные экземпляры CI или даже отдельные ведомые устройства, чтобы помочь сбалансировать нагрузку на нескольких серверах. Убедитесь, что сервер, на котором вы запускаете Hudson / Jenkins, подходит. Я использовал Apache Tomcat и просто должен был убедиться, что у него достаточно памяти и вычислительной мощности для обработки очереди сборки.
Важно четко понимать, чего вы хотите достичь с помощью CI, а затем найти способ реализовать это без особых усилий или дублирования вручную. Нет ничего плохого в использовании других внешних инструментов или скриптов, выполняемых вашим CI-сервером, которые помогают упростить общий процесс управления сборкой.
источник
Я бы выбрал dev + стабильные ветки. И если вам все еще нужны настраиваемые ветки и вы боитесь нагрузки, то почему бы не переместить эти настраиваемые ветки в облако и позволить разработчикам управлять ими самостоятельно, например http://cloudbees.com/dev.cb Это компания, в которой сейчас находится Kohsuke . Также существует Eclipse Tooling, поэтому, если вы используете Eclipse, он будет тесно интегрирован прямо в dev env.
источник
На самом деле, что действительно проблематично, так это изоляция сборки с помощью функциональных веток. В нашей компании есть набор отдельных проектов maven, которые являются частью более крупного дистрибутива. Эти проекты обслуживаются разными командами, но для каждого дистрибутива необходимо выпустить все проекты. Функциональная ветвь теперь может перекрываться от одного проекта к другому, и тогда изоляция сборки становится болезненной. Мы попробовали несколько решений:
Собственно говоря, последнее решение является наиболее перспективным. Все остальные решения так или иначе отсутствуют. Вместе с плагином job-dsl легко настроить новую функциональную ветку. просто скопируйте и вставьте отличный скрипт, адаптируйте ветки и позвольте начальному заданию создавать новые задания. Убедитесь, что задание семян удаляет неуправляемые задания. Затем вы можете легко масштабироваться с помощью ветвей функций по различным проектам maven.
Но, как хорошо сказал Том выше, было бы лучше преодолеть необходимость в ветвях функций и научить разработчиков чистой интеграции, но это более длительный процесс, и результат неясен со многими устаревшими частями системы, которые вы больше не будете трогать.
мои 2 цента
источник