Страницы

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

пятница, 27 декабря 2019 г.

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

#jenkins #непрерывная_интеграция #teamcity


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

Вопрос: Что делать после того как оказалось что при слиянии возникли конфликты?

По идее, если программист работает в feature ветке, он должен намержить ветку на
себя и разрулить конфликты. Только это не девелоп. В девелоп нельзя автоматом мержить.
Не могу разобраться как эту фичу грамотно заюзать. Какие есть use-cases?
    


Ответы

Ответ 1



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

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

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