Страницы

Поиск по вопросам

среда, 5 декабря 2018 г.

Как использовать возможность автоматического merge изменений сервером непрерывной интеграции?

У TeamCity есть билд фича Automatic merge. Она позволяет сделать merge изменений коммита в определенную ветку (интеграции). Каждый раз когда кто-нибудь делает коммит который проходит все тесты можно этот коммит автоматически влить в ветку интерграции и, если не получилось, выдать ошибку что при мерже возникли конфликты что позволит команде оперативно среагировать.
Вопрос: Что делать после того как оказалось что при слиянии возникли конфликты?
По идее, если программист работает в feature ветке, он должен намержить ветку на себя и разрулить конфликты. Только это не девелоп. В девелоп нельзя автоматом мержить. Не могу разобраться как эту фичу грамотно заюзать. Какие есть use-cases?


Ответ

Мне видится два варианта использования автоматического мержа:
Если вы используете фича/багфикс бранчи, но при этом в вашем процессе нет пулл-реквестов/интеграционной ветки, т.е. вы готовы сразу мержить в мастер. Это позволяет достичь изолированности изменений и их автоматической интеграции. (Хотя лично мне такая модель представляется сомнительной, особенно для достаточно больших изменений, поскольку заставляет делать локальные коммиты без пуша, а это может быть чревато.) Если вы используете интеграционный бранч, куда вливаются фича/багфикс бранчи. Изменения тестируются, а после этого вливаются в мастер.
Во втором случае интеграционный бранч по сути является копией мастера с добавленными изменениями. Поэтому при вливании в интеграционный бранч конфликты могут возникнуть по двум причинам:
изменения конфликтуют с мастером изменения конфликтуют с изменениями из другого фича/багфикс бранча, которые были влиты в интеграционную ветку, но еще не попали в мастер
В обоих случаях разруливать конфликт достаточно мержем из интеграционной ветки. Первый случай очевиден -- конфликтующие изменения из мастера есть и в интеграционной ветке. Второй случай тоже очевиден -- без "зеленой" интеграционной ветки работа дальше не пойдет. И тут действует стандартное правило -- кто последний коммитит, тот и мержит :).

идея в том чтобы обнаруживать конфликты как можно раньше.
Тогда может стоит просто добавить мерж из мастера в фича/багфикс ветку при каждом билде? Если говорить о TeamCity, то первым шагом билда добавляете следующий код:
git remote set-url origin %repo_url% if NOT %teamcity.build.branch.is_default%==true git fetch if NOT %teamcity.build.branch.is_default%==true git merge origin/master
Это гарантированно будет обнаруживать конфликты сразу. Мастер будет всегда "зеленый", вы не будете получать конфликты из-за того, что кто-то залил конфликтующие изменения в интеграционную ветку.

Комментариев нет:

Отправить комментарий