TeamCity - сборка запуска по конкретному файлу, Mercurial - PullRequest
2 голосов
/ 25 апреля 2010

Я пытаюсь заставить мою сборку срабатывать только при создании тега в Mercurial. Я пытаюсь это сделать, создав дополнительную конфигурацию сборки (Tag Conf) для моего проекта, в которой я установил триггер сборки VCS:

+: /. Hgtags (запуск только при обновлении тегов)

- :. (Не запускать другие файлы)

Всякий раз, когда я нажимаю набор изменений (без тега) в обзоре, моя сборка conf (Tag Conf) говорит «X Pending», я подозреваю, что это наборы изменений. И когда я создаю тег в Mercurial, запускается сборка, и ожидание X исчезает. Тогда все, что мне осталось сделать, - это обновить номера сборки / версии в AssemblyInfo (каким-то образом) и развернуть артефакты (каким-то образом).

Вопрос 1: Это правильный способ сделать это или есть другой / лучший способ сделать это? (Я использую бегунок sln2010 + NUnit + Mercurial)

Вопрос 2: Есть ли способ получить имя тега из тега, чтобы его можно было использовать для именования артефактов, например?

С уважением

1 Ответ

2 голосов
/ 25 апреля 2010

Q1: кажется, хорошо. Более Mercurial-ориентированным способом было бы поместить хук в раздел [hooks] в Mercurial.ini пользователя TeamCity, который либо сообщает TeamCity о начале сборки, либо касается отдельного файла, который запускает сборку. Тем не менее, наблюдение за .hgtags тоже подойдет, если вы уверены, что hg update выполняется (само по себе не обновляет локальную рабочую копию вне репозитория .hg без hg update или hg pull -u).

Q2. Помните, что поскольку файл .hgtags сам по себе является версионным, если вы выполните команду hg tag TAGNAME, вы применили тег TAGNAME к ревизии tip, но при этом вы создали новый набор изменений, который теперь подсказка, поэтому ваша ревизия с тегом TAGNAME больше не является подсказкой.

Когда вы нажимаете все эти наборы изменений, у вас есть то же соображение, на которое я ссылался в Q1 - на какую ревизию вы hg update? Если вы hg update -r tip (самое простое действие и значение по умолчанию) вы обновляете до одной ревизии после помеченной ревизии.

К счастью, есть некоторые элементы шаблона, которые очень полезны для обхода такой сложной ситуации: {latesttag} и {latesttagdistance}.

С их помощью вы можете обновить скрипт сборки до последней метки, выполнив что-то вроде:

LATESTTAG=$(hg log --template '{latesttag}')
hg update -r $LATESTTAG

, и это делает популярную строку версии для сборок, которые не были помечены:

VERSION=$(hg log --template '{latesttag}+{latesttagdistance}')

Windows-ification этих командных строк оставлен как упражнение для таким образом искалеченного читателя. :)

...