Множественные ветки функций и непрерывная интеграция

Недавно я читал о непрерывная интеграция, и есть сценарий, который может произойти, "Не понимаю, как правильно обращаться.

У нас есть стабильная ветка mainline/trunk и создание ветвей для функций. Каждый разработчик будет поддерживать свои собственные ветки функций в актуальном состоянии путем регулярного слияния с багажником в свою отрасль. Однако вполне возможно, что в течение нескольких недель или месяцев могут создаваться и обрабатываться две или более ветки признаков. За это время многие версии программного обеспечения могут быть развернуты. Это, когда возникает мое замешательство.

Очень вероятно, что изменения для одной ветки функции вызовут конфликты слияния с другими ветвями функций. CI предлагает вам объединиться в сундук, по крайней мере, ежедневно, что быстро разрешит конфликты. Тем не менее, вы можете не захотеть объединить код функции в магистраль, потому что он может не завершиться или вам может не понадобиться эта функция в следующей версии. Итак, как вы справляетесь с этим сценарием и продолжаете следовать принципам CI ежедневной интеграции кода?

Ответ 1

В правильном CI нет ветвей признаков. Вместо этого используйте функцию.

Ответ 2

Идея, описанная более подробно в этой статье, заключается в том, чтобы объединиться из ветки соединительной линии/выпуска в ветки функций ежедневно, но только сливаться обратно в другом направлении после того, как функция соответствует вашему определению "сделано".

Код, написанный одной функциональной группой, будет вставляться в багажник после его завершения и будет "распространен" для других команд, где конфликты могут быть рассмотрены, как часть процесса ежедневного слияния.

Это не подходит для удовлетворения желания Ника, для системы управления версиями, которая может быть использована средством резервного копирования, если только изменения не будут достаточно малы, чтобы они могли быть привязаны к ветки признака в течение таймфрейма, где риск потери вашей работы является приемлемым.

Я лично не пытаюсь реинтегрировать код в ветвь релиза до его завершения, и, хотя я никогда не пытался, я уверен, что функция создания объектов для незавершенной работы имеет свои проблемы.

Ответ 3

Я думаю, что они означают слияние магистрали с веткой функций, а не наоборот. Таким образом, ветвь функции не будет слишком сильно отклоняться от основной линии и будет находиться в легко соединяемом состоянии.

Пользователи git делают то же самое, перезагружая ветки функций поверх главной ветки перед отправкой функции.

Ответ 4

По моему опыту с CI, вы должны постоянно обновлять свою функциональную ветвь с изменениями основной линии, как это предлагали другие. Это работало для нескольких релизов. Если вы используете subversion, убедитесь, что вы слились с включением истории слияния. Таким образом, когда вы пытаетесь объединить свои изменения обратно в строку, это будет просто связано с тем, что вы объединяете изменения функций в строку, а не пытаетесь разрешить конфликты, которые могут иметь ваши функции с основной линией. Если вы используете более продвинутый VCS, например, git, первое слияние будет rebase, где вторым будет слияние.

Есть инструменты, которые могут помочь вам сделать более тонкими, как это сделать ветки Feature с Bamboo

Ответ 5

Отражения функций, возвращающиеся обратно в магистраль, а OFTEN - важная функция непрерывной интеграции. Для полной разбивки см. Эта статья

Ответ 6

Теперь есть несколько хороших ресурсов, показывающих, как объединить как CI, так и ветки функций. Bamboo или Feature Branch Notifier - это несколько способов посмотреть,

И это - еще одна довольно длинная статья, демонстрирующая плюсы так называемого распределенного CI. Далее, один отрывок, объясняющий преимущества:

Распределенный CI имеет преимущество для непрерывного развертывания, поскольку он поддерживает чистую и стабильную ветку Mainline, которая всегда может быть развернута в Production. Во время централизованного процесса CI нестабильная Mainline будет существовать, если код не интегрируется должным образом (сломанная сборка) или если недоделанная работа интегрирована. Это хорошо работает при планировании выпуска итераций, но создает узкое место для непрерывного развертывания. Прямая линия от ветки разработчика до производства должна быть чистой на компакт-диске, Distributed CI делает это с помощью только для того, чтобы готовый код Production был помещен в Mainline.

Одна вещь, которая все еще может быть сложной, заключается в том, чтобы изолировать ветвь, чтобы она не загрязняла ваш репозиторий двоичных файлов, нажимая на нее свои сборки ветвей. Бамбук, кажется, обращается к этому, но не уверен, что это легко с Дженкинсом.