Подтвердить что ты не робот

Есть ли способ получить доступ к свойствам системы TeamCity в Powershell script?

Я пытаюсь настроить новую конфигурацию сборки в TeamCity с помощью бегуна Powershell. Однако я не могу найти способ получить доступ к свойствам TeamCity System в сборке script. Я видел подсказки, что это возможно, но не могу найти документацию о том, как это сделать.

Я попытался получить доступ к свойствам системы, используя синтаксис переменной Powershell, переменную $. Я также распечатал все переменные в памяти и не вижу переменных в команде.

Возможно ли это с бегуном Powershell, и если да, то в чем синтаксис, необходимый для его работы?

4b9b3361

Ответ 1

TeamCity установит переменные среды, такие как build.number(вы можете увидеть их список в TeamCity).

В Powershell вы можете обращаться к переменным среды, используя провайдер env, например

$env:PATH

Переменные TeamCity доступны путем замены. с _, поэтому переменную build.number можно получить как

$env:build_number

Ответ 2

Как сказано в документации TeamCity системные параметры передаются в runner script, но не все строятся script бегуны знают, что с ними делать. В случае бегуна Powershell script при использовании файла script они не распространяются вплоть до ваших скриптов.

Мне пришло в голову написать оптимизированный для использования с помощью psake скрипт сборки, но в то же время вы можете сделать одно из следующего:

  • явно сопоставить любые свойства сборки TeamCity с параметрами script, используя расширение параметра, доступное в окне script Source. например .\build.ps1 -someParam:%build.name%

  • использовать параметры среды, к которым можно явно обращаться в PowerShell с помощью $env:NAME_IN_TEAMCITY syntax, например $env:TEAMCITY_VERSION, или зацикливаться и помещаться в область переменных

  • доступ к файлу свойств сборки, который TeamCity предоставляет во время сборки. Файл доступен в $env:TEAMCITY_BUILD_PROPERTIES_FILE, и если вы загружаете версию XML, достаточно легко выполнить цикл и направить их все в область видимости (хотя вы все получаете как строку). Я рассказал о том, как это сделать (https://gist.github.com/piers7/6432985). Или, если вы используете Psake, измените script выше, чтобы вернуть хэш-таблицу, которую вы можете передать непосредственно в аргумент Psake -properties.

Ответ 3

Это возможно. Вот пример, как передать системные свойства в PSake script:

& .\psake.ps1 -parameters @{build_number=%build.number%; personal_build=%build.is.personal%}

Если вы не используете Psake, вы можете определить свои переменные следующим образом:

$build_number = %build.number%

Часть %build.number% будет заменена данными, предоставленными TeamCity. Я думаю, он работает только в режиме ввода Исходный код script.

Ответ 4

Я создал мета-бегун, который будет проходить через Системные параметры до параметров, объявленных в Powershell script. Это не идеально (если вы поместите "@в свой источник, он сломается" ), но он работает для того, что мне нужно, вы можете найти его здесь: https://gist.github.com/anonymous/ef60ada3f48f0fb25093