Как вы устанавливаете переменные в powershell - PullRequest
0 голосов
/ 17 мая 2018

Я пытаюсь установить переменные в PowerShell, чтобы я мог использовать их в пользовательских условиях в определениях выпуска, чтобы я мог предотвратить запуск фаз, если для переменной VSTS задано значение false или 0

Ответы [ 4 ]

0 голосов
/ 08 августа 2018

Вам необходимо использовать Write-Host со специальным форматом строки:

Write-Host "##vso[task.setvariable variable=YourVSTSVariableName]$yourPowershellVariable"

0 голосов
/ 18 мая 2018

Установка переменных в самой PowerShell тривиальна, просто присвойте (= оператор) переменной:

$VarName = 42

Но, вероятно, вопрос заключается в том, чтобы найти способ задания переменных среды, которые приложение (VSTS) может «видеть» и «использовать» при вызове из PowerShell.

Чтобы присвоить любой переменной среды сеанса префикс имени с «ENV», чтобы оно выглядело так:

$Env:VarName = 4201

Это останется для текущего сеанса PowerShell или срока службы консоли - другие сеансы в других окнах или при запуске позже не будут видны или затронуты такими настройками.

Если вы хотите иметь постоянную переменную среды, вы должны установить ее в реестре, либо для пользователя (HKey_Local_User), либо для компьютера (Hkey_Local_Machine).

Они получат параметры среды из реестра (возможно, они отличаются от тех, которые в данный момент установлены в вашем процессе):

[Environment]::GetEnvironmentVariable('path',[EnvironmentVariableTarget]::Machine)
[Environment]::GetEnvironmentVariable('path',[EnvironmentVariableTarget]::User)

И команды Set аналогичны, но включают новое значение (например, переменная 'Tools' установлена ​​в 'C: \':

[Environment]::SetEnvironmentVariable('Tools', 'C:\', [EnvironmentVariableTarget]::Machine)
[Environment]::SetEnvironmentVariable('Tools', 'C:\', [EnvironmentVariableTarget]::User)

Существует также перечисление «location» для «Process» (вместо «User» или «Machine»), но его проще установить с помощью PowerShell $ Env: VariableName, показанного выше.

    [Environment]::SetEnvironmentVariable('Tools', 'C:\', [EnvironmentVariableTarget]::Process)
0 голосов
/ 18 мая 2018

Даже вы можете установить значение переменной, но вы не можете использовать измененное значение переменной для предотвращения запуска фаз, поскольку переменные не могут сохраняться между фазами агента .

И вы также можетесм. пост Передача переменных релиза между двумя фазами агента .

И способ задания переменной в сборке можно найти в документе Определение и изменение переменных в сценарии .

0 голосов
/ 18 мая 2018

Я прошу прощения.Я не уверен на 100%, что понимаю, что вы пытаетесь сделать.

Сценарий-1: вы хотите установить некоторые переменные вне VSTS, которые используются определением выпуска внутри VSTS

(а) Я бы установил их в качестве переменных среды на хосте.Вы можете вызывать их из скриптов, которые запускаются на этом хосте.(b) Задайте эти переменные в отдельном сценарии Powershell, а затем поставьте этот сценарий из точечного сценария Powershell.

Сценарий 2. Вы хотите передать значения переменных из VSTS в сценарий Powershell

Вы перейдете на вкладку Build and Release , выбрав Releases , а затем выбрав действие Новое определение .Вы создаете пустой процесс.Вы добавляете новый артефакт в процесс.В конечном итоге вы можете добавить задачу Powershell (одна из служебных задач).Для этой задачи вы можете выбрать сценарий, который запускается, и аргументы, которые вы передаете ему.Эти аргументы являются параметрами в сценарии.Это как шаг 8/9 в Создание определения выпуска статьи CI / CD Hello world .

Надеюсь, это поможет!

...