Есть ли способ получить доступ к свойствам системы TeamCity в Powershell script?
Я пытаюсь настроить новую конфигурацию сборки в TeamCity с помощью бегуна Powershell. Однако я не могу найти способ получить доступ к свойствам TeamCity System в сборке script. Я видел подсказки, что это возможно, но не могу найти документацию о том, как это сделать.
Я попытался получить доступ к свойствам системы, используя синтаксис переменной Powershell, переменную $. Я также распечатал все переменные в памяти и не вижу переменных в команде.
Возможно ли это с бегуном Powershell, и если да, то в чем синтаксис, необходимый для его работы?
Ответы
Ответ 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