Как запустить сборку TeamCity только для тегов?

У меня есть несколько проектов, которые создают пакеты NuGet, которые я публикую на внутреннем сервере. Мы используем семантическое управление версиями и используем теги в нашем репозитории Git для управления номерами версий.

Я отмечаю следующее:

git tag -a v1.0.0 -m "tagged"

И во время сборки TeamCity я запускаю git describe --long, который создает такой вывод:

v1.0.0-0-ge9c047d

Четвертое число на выходе - это количество коммитов после тега. 0 здесь означает, что с тега не было сделано никаких коммитов. Я использую эти первые четыре числа как номер версии (и, кстати, всю строку как AssemblyInformationalVersion).

У меня есть пакет TeamCity и публикую пакет NuGet, но здесь, где он становится липким. Я только хочу публиковать теги, никогда не комментируя теги (потому что номер версии в этом случае был бы неправильным, возможно, ОЧЕНЬ неправильным).

Я попытался установить "спецификацию ветки" в корне VCS на "+: refs/tags/*", в результате чего все теги будут созданы, но TeamCity также настаивает на создании "ветки по умолчанию", Если я установлю "ветвь по умолчанию" на то, что не существует, я получаю сообщение об ошибке.

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

Как заставить один или несколько шагов сборки работать только для новых тегов, а не для обычных коммитов?

Ответ 1

Если вы используете TeamCity 8.x, теперь существует поддержка триггеров ветвления VCS, что позволит вам не запускать сборки из ветвь по умолчанию.

Попробуйте следующее:

  • Оставьте спецификацию Branch в корне VCS как "+: refs/tags/*"
  • Измените правила запуска сборки VCS на:

    + *

    -: < по умолчанию >

Это отфильтрует ветку по умолчанию из триггера, и вам не нужно будет отменять сборку.