Мы используем TeamCity для непрерывной интеграции и Git для контроля версий. В целом, это работает довольно хорошо - удобно, современно и дает нам быструю обратную связь, когда тесты не пройдены.
Есть странное поведение, связанное со спецификой слияния Git. Вот шаги кейса:
- Первый разработчик вытаскивает из мастер-репо.
- Второй разработчик вытаскивает из мастер-репо.
- Первый разработчик делает коммит А локально.
- Второй разработчик делает коммит B локально;
- Второй разработчик нажимает коммит B.
- Первый разработчик хочет выдать коммит А, но не может, потому что он должен сначала вывести коммит B.
- Первое извлечение разработчика из удаленного хранилища.
- Первый разработчик отправляет коммит A и генерирует коммит ветви слияния.
История коммитов в мастер-репо следующая:
- B, второй разработчик
- Первый разработчик
- ветка слияния первого разработчика.
Теперь давайте предположим, что Second Developer исправил несколько неудачных тестов в своем коммите B.
TeamCity сделает следующее:
- Приходит коммит B - TeamCity делает сборку # 1 со всеми пройденными тестами
Прибывает коммит A - TeamCity делает сборку № 2 (без коммита B), индикатор становится красным!
TeamCity считает, что ожидающий коммит "Merge Branch" не содержит никаких изменений (каких-либо новых файлов) - но на самом деле он содержит слияние коммита B, поэтому TeamCity не хочет делать новую сборку и сделайте тесты зелеными.
Вот две проблемы:
1. В нашем случае мы провалили тесты, возвращающиеся во второй коммит (коммит А)
2. TeamCity не хочет делать новую сборку и делать тесты зелеными.
Кто-нибудь знает, как решить обе эти проблемы.
Я считаю разумным общий подход.