Предотвратите создание TeamCity для быстрого слияния с переходом для овладения, если сборка существует для этого SHA1

Использование TeamCity в сочетании с git.
В настоящее время TeamCity настроен как "master" как ветвь по умолчанию.

Как правило, разработка происходит на другой ветке (например, "dev" ). TeamCity настроен на просмотр изменений на "dev" и автоматически создается.

Если DEADBEEF-SOME-SHA был создан и помечен TeamCity как сборка 1.2.3.4 на "dev", и мы быстро переходим к объединению с git SHA1 в "master", TeamCity по-прежнему выполняет сборку мы заканчиваем тем, что DEADBEEF-SOME-SHA помечены как как 1.2.3.4, так и 1.2.3.5.

Как я понимаю, создание "dev" ветки по умолчанию предотвратит это.
Есть ли другой способ предотвратить выполнение TeamCity сборки, если сборка уже выполнена для того же SHA1?

Обратите внимание, что если мы нажимаем непосредственно на master (и что SHA1 не существует на других ветвях/не был создан), мне все равно хотелось бы видеть сборку.

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

Ответ 1

Если вы просто хотите ограничить ветки, для которых автоматически запускаются сборки, установите фильтр ветвления для триггера VCS:

Настройки проекта = > Триггеры = > Триггер VCS (изменить) = > Фильтрационный фильтр

Установите фильтр ветвления на

+:dev 

тогда (хотя "master" - это ветвь по умолчанию), сборки будут автоматически запускаться только на dev. По-прежнему можно выполнять специальные сборки на других ветвях (при условии, что root VCS позволяет это)

Ответ 2

Вы можете запросить сборки для определенного SHA1... но вы должны знать ваш предыдущий файл buildID для этого.

Так что я бы сделал:

  • записать в выделенную папку (доступную всеми агентами) sha1, созданный в конце каждого задания
  • только запускает новое задание, если этот файл sha1 еще не присутствует.

Ответ 3

Возможно, я что-то пропустил:

если коммиты отмечены в вашем репо, перед запуском новой сборки вы можете проверить, не зафиксирована ли фиксация головы:

# if you use exclusively lightweigth tags :
git show-refs --tags | grep $(git rev-parse HEAD)
# also check that the tag looks like a build tag, e.g : refs/tags/1.2.3.4
   | grep "refs/tags/[1-9.]*$"

# if you use annotated tags :
git show-refs --tags --dereference | grep $(git rev-parse HEAD)
# the grepped line may look like : refs/tags/1.2.3.4^{}
   | grep -E "refs/tags/[1-9.]*(\^\{\})?$"