Site icon AppTractor

Что такое магистральная (Trunk-Based) разработка

Существует два основных подхода к совместной работе групп разработчиков с использованием системы контроля версий. Один из них — использование ветвей фич (feature branches), когда разработчик или группа разработчиков создают ветвь, обычно отходящую от ствола (также известную как main или mainline), и затем изолированно работают в этой ветке до тех пор, пока создаваемая ими фича не будет завершена. Когда команда считает, что функция готова к работе, она объединяет ветку с главным репозиторием.

Вторая модель известна как магистральная разработка (trunk-based), когда каждый разработчик делит свою работу на небольшие партии и сливает их в главный код (ствол, магистраль, trunk) как минимум один раз (а в перспективе и несколько раз) в день. Ключевое различие между этими подходами заключается в масштабах. Над ветвями фич обычно работает несколько разработчиков и они занимают несколько дней или даже недель работы. В отличие от этого, ветки в магистральной разработке обычно длятся не более нескольких часов, при этом многие разработчики часто сливают в главную ветку свои индивидуальные изменения.

На следующей диаграмме показан типичный график магистральной разработки:

При таком подходе разработчики размещают код непосредственно в главном репозитории. Изменения, внесенные в ветви релизов — снепшоты кода, когда он готов к выпуску, — обычно как можно быстрее сливаются обратно в ствол (показано стрелками вниз). При таком подходе бывают случаи, когда исправления ошибок должны быть отобраны и смерджены в релизы (показано стрелкой вверх), но эти случаи не так часты, как разработка новых функций в стволе. В тех случаях, когда релизы выходят несколько раз в день, ветки релизов вообще не нужны, поскольку изменения могут быть перенесены непосредственно в главный код и развернуты оттуда. Одним из ключевых преимуществ trunk-based подхода является снижение сложности событий слияния и поддержание актуальности кода за счет меньшего количества линий разработки и небольших и частых слияний.

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

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

Как реализовать trunk-based разработку

Магистральная разработка — это необходимая для непрерывной интеграции практика. Непрерывная интеграция (CI) — это сочетание практики магистральной разработки с поддержкой набора быстрых автоматизированных тестов, которые запускаются после каждого коммита в магистраль, чтобы убедиться, что система всегда работоспособна.

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

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

Практика trunk-based разработки требует, в свою очередь, от разработчиков понимания того, как разбивать свою работу на небольшие партии. Для разработчиков, не привыкших работать таким образом, это существенное изменение.

Анализ данных DevOps Research and Assessment (DORA) за 2016 и 2017 годы показывает, что команды достигают более высоких уровней доставки ПО и операционной производительности (скорость доставки, стабильность и доступность), если следуют этим практикам:

Магистральная разработка и известные препятствия

К числу распространенных препятствий на пути к полному переходу на магистральную разработку относятся следующие:

Способы улучшения магистральной разработки

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

Способы оценки эффективности магистральной разработки

Измерить эффективность магистрального развития можно следующим образом.

Фактор Что измерять Цель
Активные ветки в репозитории кода приложения.. Измерьте количество активных веток в системах контроля версий репозитория приложения и сделайте это число видимым для всех команд. Затем отслеживайте постепенное продвижение к целевому состоянию. Три или менее активных ветвей.
Периоды замораживания кода. Измерьте, сколько раз ваша команда замораживала код и как долго заморозки длились. Эти измерения позволяют также классифицировать, сколько времени тратится на конфликты слияние, на замораживание кода, на стабилизацию и т.д. Заморозки кода, когда никто не может засабмитить код, нет.
Частота слияния ветвей и форков в магистраль. Измеряйте либо двоичное значение (да/нет) для каждой слитой ветки, либо процент ветвей и форков, сливаемых каждый день. Слияние не реже одного раза в день.
Проверка времени, затрачиваемого на утверждение изменений кода. Если обзор кода выполняется асинхронно, измерьте среднее время, необходимое для утверждения запросов на изменения, и обратите особое внимание на запросы, которые занимают значительно больше времени, чем в среднем. Найдите способы сделать ревью кода синхронным действием, выполняемым в процессе разработки.

Источник

Exit mobile version