Как вы устанавливаете переменные в powershell

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


person MikeJ    schedule 17.05.2018    source источник
comment
$variable_name = 'value' для строковых данных $variable_name = value для числовых данных.   -  person Adam    schedule 17.05.2018
comment
Как это работает с переменными VSTS? Это необходимо использовать для фазовых условий.   -  person MikeJ    schedule 17.05.2018
comment
docs.microsoft.com/ en-us/vsts/build-release/concepts/library/. Если это поможет? Он показывает, как вы можете создавать переменные области видимости. Затем свяжите эту группу переменных везде, где вы хотите получить доступ.   -  person Uddhav Gautam    schedule 17.05.2018
comment
Мне кажется, что у Киарана О'Нила есть ответ.   -  person Josh Gust    schedule 19.12.2018
comment
Упомяните VSTS/AzureDevops в названии. Установка переменных в powershell отличается от установки переменных среды в VSTS с помощью powershell.   -  person Andre Soares    schedule 21.03.2019


Ответы (4)


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

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

person Ciaran O'Neill    schedule 08.08.2018
comment
Другим может быть полезно отметить, что YourVSTSVariableName должен отображаться в строке формата, как он отображается на вкладке переменных конвейера. Если имена переменных содержат . в своем имени на этой вкладке, то . следует включить в строку формата. Однако при доступе к значению через $env:YourVSTSVariableName . следует заменить на _. - person Josh Gust; 19.12.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)

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

    [Environment]::SetEnvironmentVariable('Tools', 'C:\', [EnvironmentVariableTarget]::Process)
person HerbM    schedule 18.05.2018

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

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

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

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

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

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

person Adam    schedule 17.05.2018

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

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

А чтобы узнать, как установить переменную в сборке, вы можете обратиться к документу Определите и измените переменные в скрипте.

person Marina Liu    schedule 18.05.2018