Как заставить TeamCity автоматически объединить ветку функций Git с master и не выполнить сборку в случае конфликтов слияния?

наш цикл разработки/выпуска работает следующим образом:

  1. разработчик создает ветку, реализует функцию
  2. разработчик указывает, что функция готова к приемочному тестированию (UAT)
  3. Tester развертывает ветвь функции и принимает (или отклоняет) функцию

принятые функции затем объединяются в главную ветвь тестер, и поэтому будет выпущен во время следующего цикла выпуска (мы развертываем Транк / мастер-код еженедельно).

У нас есть разочарования с конфликтами слияния, потому что к тому времени, когда тестер удалил функцию и обнаружил, что она не будет сливаться чисто, разработчик, который работал в ней, обычно переходил к чему-то другому.

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

TeamCity, похоже, не имеет встроенной поддержки для этого рабочего процесса (т. е. когда толчок происходит с веткой X, checkout master, merge branch X на него, build, unit-test, create package). Кто - нибудь создал аналогичный рабочий процесс с помощью TeamCity и Github-возможно, используя пользовательские цели msbuild?

EDIT: я должен уточнить, что мы используем Github, но в настоящее время мы не используем pull запросы - похоже, это то, что я должен расследовать. :)

1 ответов


Если вы используете запросы GitHub и Pull, то проверьте сообщение в блоге Хади Харири о том, как получить запрос pull после его слияния с master:

http://hadihariri.com/2013/02/06/automatically-building-pull-requests-from-github-with-teamcity/

Github делает автоматическое слияние для каждого запроса на вытягивание, и результирующее слияние доступно (хотя в значительной степени недокументировано) как

git fetch origin +refs/pull/298/merge

где ИД запроса тяги 298. И таким образом, все объединенные запросы pull могут быть извлечены с подстановочным знаком вместо идентификатора в Teamcity и построены автоматически. Спецификация ветви будет выглядеть следующим образом:

+refs/pull/*/merge

EDIT: вы говорите, что не используете запросы pull, поэтому я думаю, что вы можете сделать это с помощью некоторых команд git. Я не пробовал это сам, так что это всего лишь несколько советов, чтобы вы начали.

  1. использовать филиала спецификация в Teamcity, чтобы получить ветку. Установить режим проверки чтобы проверить код на агент
  2. на шаге сборки объедините главную ветвь в целевую ветвь. Если master недоступен на агенте, вам может потребоваться сначала получить его. Если вы получите какие-либо ошибки, то сборка завершится неудачно.

чтобы проверить конфликты слияния, один из них стратегии должны работать.