Поезда слияния
Доступно только в Enterprise-версии
Описание работы
Функция поездов слияния является логическим продолжением функции конвейера результата слияния (КРС).
КРС представляет собой одномоментное состояние проекта и дает понимание для пользователей о состоянии вашего проекта только в конкретный момент времени до слияния. Например, вы создаете запрос на слияние в рабочую ветку и выполняете КРС для своей ветки, но в этот момент ваш коллега мог слить свою ветку в рабочую ветку проекта и тем самым вынуждая вас повторно запускать КРС для проведения всех необходимых тестов.
Поезда слияния позволяют избежать подобных гонок с проверкой актуального состояния проекта перед слиянием ветки и работают по следующему принципу:
-
При слиянии ветки из запроса на слияние (ЗнС) в основную, она попадает в отдельную очередь, в которой каждый запрос на слияние проверяется конвейером результирующего слияния после слияния с предыдущим из этой очереди.
-
Пока КРС не завершится с одним из статусов (Успех или Ошибка), то на ЗнС будет отображаться статус "Добавлен на поезд слияния", при успешном завершении КРС ЗнС будет слит как обычно, в соответствии с примененными правилами слияния.
-
При завершении одного из КРС с ошибкой, такой КРС исключается из очереди и следующий за ним КРС сравнивается с последним успешным. Запрос на слияние, чей КРС был завершен с ошибкой, открывается повторно со статусом "Конфликт при прохождении поезда"
Польза от данной функции особенно заметна при работе в большом коллективе, когда над одним проектом может работать большое количество разработчиков.
Пример работы
Рассмотрим пример с четырьмя запросами на слияние A,B,C,D
, которые были поставлены на очередь поезда слияния с веткой master
. До момента слияния каждая из веток должна была пройти КРС с веткой master
в рамках своего ЗнС. При успешном прохождении поезда слияния A
и master
, запрос на слияние B
будет проходить КРС с коммитом после слияния A
и master
. В случае ошибки в КРС запрос на слияние открыт повторно для решения проблем, а очередь C
,D
будет переопределена и следующий КРС C
будет проходить с коммитом после слияния A
и master
по ранее описанному принципу. При успешном слиянии веток связанные запросы на слияния получают статус "Слит", как если бы они были слиты вручную.
Настройка поездов слияния
Включение функции Поездов слияния находится в настройках проекта в разделе Настройка CI/CD
, для ее активации требуется использование функции Конвейера Результата Слияния
При слиянии ветки будет отображаться дополнительная подсказка, что данная ветка перед слиянием будет поставлена в очередь на поезд слияния
Текущая очередь из конвейеров будет отображаться на странице CI/CD и при ошибке одного из конвейеров будет переопределена без его учета
При этом каждый связанный запрос на слияние будет иметь особый статус. Все запросы на слияние можно отфильтровать по этому статусу