Стратегии ветвления непрерывной интеграции (CI): что вам нужно знать

Стратегии ветвления непрерывной интеграции (CI): что вам нужно знать

22 февраля 2023 г.

Большинство производственных приложений полагаются на команду разработчиков программного обеспечения, где каждый разработчик может сосредоточиться на параллельной разработке различных аспектов приложения. Используя системы контроля версий, такие как Git, и онлайн-репозитории исходных текстов, такие как GitHub, члены команды могут управлять изменениями кода от каждого разработчика, разрешая конфликты по мере необходимости.

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

Начнем!

Введение в ветвление

В Git под "ветвлением" понимается процесс создания новой линии разработки, которая отличается от основной линии разработки. По сути, он позволяет создавать отдельную версию кода, вносить изменения независимо от основной версии, а затем объединять эти изменения обратно в основную версию, когда вы будете готовы.

Стратегии ветвления — это способы, с помощью которых разработчики управляют своим взаимодействием с центральной кодовой базой. Существует три различных типа стратегий ветвления, обычно используемых командами для управления своей кодовой базой: ветвление функций, ветвление выпуска и разработка на основе ствола (TBD).

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

Зачем вам нужна стратегия ветвления

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

  1. Параллельная разработка. Большие команды часто работают над несколькими функциями или задачами одновременно. Наличие стратегии ветвления позволяет членам команды работать над своими конкретными задачами, не мешая работе друг друга.

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

3. Управление рисками. Ветвление также позволяет командам управлять рисками, связанными с новыми функциями или изменениями. Например, команда может создать отдельную ветку для новой функции, тщательно протестировать ее, а затем, когда она будет готова, снова объединить ее с основной веткой. Это снижает риск внесения ошибок или других проблем в основной код.

4. Качество кода. Стратегия ветвления также помогает поддерживать качество кода. Внедряя процессы проверки кода, тестирования и слияния, команды могут обеспечить тщательную проверку и тестирование изменений кода, прежде чем они будут объединены в основную ветвь.

5. Управление релизами. Стратегия ветвления также может помочь в управлении релизами. Команды могут создавать отдельные ветки для каждого выпуска, что позволяет изолировать изменения и исправления ошибок для этого конкретного выпуска. Это упрощает управление выпусками и гарантирует включение правильных изменений в каждый выпуск.

Различные стратегии ветвления и непрерывная интеграция

Давайте рассмотрим каждую стратегию ветвления, упомянутую выше, и то, как она работает на практике:

Стратегия ветвления функций

Diagram of a feature branching strategy

В стратегии ветвления функций разработчики создают функциональную ветвь из основной ветки специально для разработки новой функции или исправления ошибки. Функциональная ветвь часто является синонимом пользовательской истории на доске управления проектом. Как только разработчик, работающий над функциональной веткой, завершает ее, эта ветка объединяется с основной веткой. Как правило, функциональная ветвь удаляется после слияния.

Преимущества стратегии ветвления функций

Стратегия ветвления функций позволяет разработчикам работать независимо от новых функций, сохраняя при этом стабильность основной ветви. Кроме того, это позволяет командам внедрять инновации и экспериментировать. Например, поскольку разработчики не работают непосредственно над основной веткой, они могут экспериментировать и реализовывать новые вещи в функциональной ветке. Если это не работает должным образом, ветвь можно легко удалить, не затрагивая основную ветвь.

Недостатки стратегии ветвления функций

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

Однако есть способы обойти это:

  1. Разработчики могут ограничить период времени, в течение которого они могут держать ветку функции открытой. Чем дольше существует функциональная ветвь, тем выше вероятность того, что она устареет.
  2. Разработчики могут периодически обновлять функциональную ветку изменениями из основной ветки.

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

Когда рассматривать стратегию ветвления функций:

  1. Если у вашей команды короткие циклы выпуска.
  2. Если у вас небольшая команда
  3. Если вы создаете приложения малого и среднего размера

Стратегия ветвления релиза

Diagram of a release branching strategy

Стратегия ветвления выпуска — это стратегия ветвления, которая подходит, когда команды хотят координировать выпуск функций в рабочей среде. В отличие от стратегии ветвления функций, где каждая функция, объединенная с основной, указывает на то, что она готова к работе, в стратегии ветвления релиза ветвь релиза создается из ветки разработки. Ветка разработки — это отдельная ветка, созданная из основной ветки исключительно для того, чтобы содержать все новые разработанные функции кода; это ветвь, в которой создаются новые ветки функций.

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

После того, как релизная ветвь протестирована и все ошибки, обнаруженные в релизной ветке, исправлены, релиз объединяется с основной веткой. Часто релизная ветка удаляется после слияния.

Преимущества стратегии ветвления релизов

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

Недостатки стратегии ветвления релизов

Поскольку функции не объединяются сразу с основным, их запуск в рабочую среду может занять больше времени. Эта проблема усугубляется, если у вас есть большая команда разработчиков, одновременно работающих над множеством функций. Чтобы избежать задержек, следует планировать релизы на короткий период, в идеале каждые 1-4 недели. Если вам нужно срочно что-то исправить после развертывания ветки выпуска в рабочей среде, вам снова придется использовать ветку исправления или отменить все развертывание.

Когда рассматривать стратегию ветвления релиза

  1. Если у вашего приложения есть несколько управляемых версий (для разработки, производства, тестирования и т. д.)
  2. Если у вашей команды более длительные циклы выпуска.
  3. При создании больших приложений

Стратегия ветвления на основе магистрали

Diagram of trunk based development strategy

Стратегия на основе магистрали (TBS) побуждает разработчиков часто вносить небольшие обновления в основную ветку вместо создания долгоживущих функциональных веток. Это означает, что изменения происходят очень часто, что обычно снижает вероятность конфликтов слияния.

Преимущества ветвления на основе магистрали

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

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

Недостатки ветвления на основе магистрали

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

Другая возможная проблема со стратегией TBD заключается в том, что ошибки с большей вероятностью попадут в основную ветку из-за высокой скорости изменений кода. Чтобы избежать конфликтов, важно, чтобы у вашей команды был надежный процесс проверки кода и стратегия тестирования.

Когда следует рассматривать ветвление на основе магистрали

  1. Если вам нужны небольшие слияния
  2. Если вы хотите безопасно доставить код в рабочую среду в очень короткие сроки.

Заключение

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

Важно отметить, что не существует «лучшей» или «худшей» стратегии ветвления. Определение наилучшей стратегии ветвления сводится к предпочтениям вашей команды и тому, как каждая из них может вписаться в их рабочий процесс. Если вы использовали какие-либо из этих стратегий или у вас есть собственные предложения по их улучшению, расскажите мне о них в комментариях или в Twitter.


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE