TeamCity — AssemblyInfoPatcher не использует обновленную переменную

Я меняю номер сборки сборки TeamCity (9.1.4) с помощью служебных сообщений (взаимодействие со сценарием сборки), как это в Powershell:

Write-Host "##teamcity[buildNumber '$version.$arg2']"

Это работает абсолютно нормально.

Проблема в том, что AssemblyInfoPatcher не хочет использовать этот обновленный номер сборки.

Поэтому я попытался использовать для него переменную/параметр, но это тоже не работает.

Я определил следующую переменную «Major.Minor.Patch» как «параметр конфигурации» или как «переменные среды». AssemblyInfoPatcher прекрасно использует эти переменные и изменяет версию моих файлов на версию, определенную в TeamCity в сборке.

Если я попытаюсь изменить переменную/параметр с помощью служебного сообщения, это не сработает. AssemblyInfoPatcher по-прежнему использует старое значение.

Пример с переменной окружения

Write-Host "##teamcity[setParameter name='env.Major.Minor.Patch' value='$version']"

Пример с параметром конфигурации

Write-Host "##teamcity[setParameter name='Major.Minor.Patch' value='$version']"

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


person Shamshiel    schedule 12.04.2016    source источник


Ответы (1)


AsssemblyInfoPatcher запускается до любого из шагов сборки (а затем запускается снова, чтобы восстановить файлы AssemblyInfo после всех шагов сборки). Таким образом, если один из ваших шагов сборки устанавливает Major.Minor.Patch с помощью служебного сообщения, для игры уже слишком поздно.

Возможно, вы могли бы объединить несколько конфигураций сборки. Первая конфигурация (A) настроит параметр, как вы делаете сейчас, а затем активирует вторую конфигурацию (B), которая будет использовать AssemblyInfoPatcher. B будет иметь зависимость моментального снимка от A (в дополнение к триггеру завершения сборки), и поэтому его AssemblyInfoPatcher сможет ссылаться на %dep.A.Major.Minor.Patch%. Этот параметр, конечно, уже будет доступен при запуске AssemblyInfoPatcher B.

person sferencik    schedule 12.04.2016
comment
Спасибо за ваш быстрый ответ. Возможно, у вас есть ссылка на учебник о том, как связать сборки вместе? Я никогда не делал этого в TeamCity. - person Shamshiel; 13.04.2016
comment
1) Создайте новую конфигурацию сборки с именем SetVersion с шагом сборки, который будет выполнять служебное сообщение. 2) Измените триггер исходной конфигурации сборки, добавив триггер завершения сборки в SetVersion. 3) Измените исходные зависимости конфигурации сборки, добавив зависимость Snaphot от SetVersion. 4) Измените AssemblyInfoPatcher текущей конфигурации сборки, чтобы он ссылался на %dep.SetVersion.Major.Minor.Patch%. Надеюсь, это поможет. - person sferencik; 13.04.2016
comment
Спасибо за краткое объяснение. Мне удалось сделать это самому. Я почти сделал все точно так, как вы сказали, но я не сделал шаг 2. Я сохранил триггер VCS, и он все еще работает из-за зависимости TeamCity сначала создает сборку версии. - person Shamshiel; 13.04.2016