#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 Это гарантированно будет обнаруживать конфликты сразу. Мастер будет всегда "зеленый", вы не будете получать конфликты из-за того, что кто-то залил конфликтующие изменения в интеграционную ветку.
Комментариев нет:
Отправить комментарий