Я пытаюсь установить переменные в PowerShell, чтобы я мог использовать их в пользовательских условиях в определениях выпуска, поэтому я могу предотвратить запуск фаз, если для переменной VSTS установлено значение false или 0
Как вы устанавливаете переменные в powershell
Ответы (4)
Вам нужно использовать Write-Host со специальным строковым форматом:
Write-Host "##vso[task.setvariable variable=YourVSTSVariableName]$yourPowershellVariable"
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)
Я прошу прощения. Я не уверен на 100%, что понимаю, что вы пытаетесь сделать.
Сценарий 1: вы хотите установить некоторые переменные вне VSTS, которые используются определением выпуска внутри VSTS.
(a) Я бы установил их как переменные среды на хосте. Вы можете вызывать их из сценариев, которые выполняются на этом хосте. (b) Задайте эти переменные в отдельном сценарии Powershell, а затем выполните точечный источник этого сценария из сценария задачи Powershell.
Сценарий 2: вы хотите передать значения переменных из VSTS в сценарий Powershell.
Вы переходите на вкладку Сборка и выпуск, выбираете Выпуски, а затем выбираете действие Новое определение. Вы создаете пустой процесс. Вы добавляете в процесс новый артефакт. В конечном итоге вы можете добавить задачу Powershell (одну из служебных задач). Для этой задачи вы можете выбрать запускаемый скрипт и аргументы, которые вы ему передаете. Эти аргументы являются параметрами в скрипте. Это похоже на шаг 8/9 в разделе Создание определения выпуска документа CI/CD Привет, мир.
Надеюсь это поможет!
Даже вы можете установить значение переменной, но вы не можете использовать измененное значение переменной, чтобы предотвратить выполнение фаз, поскольку переменные не могут сохраняться между фазами агента.
И вы также можете сослаться на сообщение Передача переменных выпуска между двумя фазами агента .
А чтобы узнать, как установить переменную в сборке, вы можете обратиться к документу Определите и измените переменные в скрипте.
$variable_name = 'value'
для строковых данных$variable_name = value
для числовых данных. - person Adam   schedule 17.05.2018