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

19

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

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

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

    
задан Paul 07.11.2012 в 22:32
источник
  • Ответ в соответствии с названием здесь. –  Matthias 17.08.2017 в 15:34

4 ответа

31

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

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

$env:PATH

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

$env:build_number
    
ответ дан Marcus 08.11.2012 в 11:05
источник
  • Спасибо, это работает. Я немного повесил трубку, пытаясь заставить System Properties работать, но переменные среды отлично работают для моих нужд прямо сейчас. Я не уверен, что мне вообще нужны системные свойства. –  Paul 09.11.2012 в 00:47
  • @Marcus Правильно ли этот синтаксис? copy $ env: system_teamcity_build_checkoutDir \ chromedriver.exe $ env: system_teamcity_build_tempDir –  alansiqueira27 04.12.2015 в 14:20
  • Похоже, что некоторые параметры упускают префикс «системы». например % system.build.vcs.number% фактически $ env: build_vcs_number. –  Elfalem 16.11.2017 в 17:52
10

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

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

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

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

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

ответ дан piers7 04.09.2013 в 07:28
источник
6

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

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

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

$build_number = %build.number%

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

    
ответ дан Aleš Roubíček 08.11.2012 в 09:42
источник
  • Спасибо за этот ответ. Это будет очень полезно в том случае, если я использую режим ввода сценария в TeamCity. –  Paul 09.11.2012 в 00:49
  • Я предпочитаю этот путь, потому что мои сценарии могут быть отделены от Teamcity или другой среды. –  Aleš Roubíček 09.11.2012 в 08:49
1

Я создал мета-бегун, который будет проходить через Системные параметры до параметров, объявленных в сценарии Powershell. Это не идеально (если вы поместите «@ в свой источник, он сломается»), но он работает для того, что мне нужно, вы можете найти его здесь: Ссылка

    
ответ дан Patrik 08.05.2014 в 15:43
источник