Как читать переменные окружения в azure devops конвейере, используя powershell? - PullRequest
0 голосов
/ 10 марта 2020

Я создал задание PowerShell и использовал приведенный ниже код для установки переменной среды в конвейере azure с помощью Powershell.

[Environment]::SetEnvironmentVariable("key", "value")

Я могу напечатать значение, используя $env:key в том же задании само по себе.

Но когда я попытался отобразить значение с помощью $env:key в следующем задании, ничего не печаталось. Как использовать вышеуказанную переменную среды через конвейер azure. Есть ли другой способ установить и прочитать пользовательские переменные среды.

Ответы [ 2 ]

2 голосов
/ 10 марта 2020

вам в значительной степени придется либо использовать группы библиотечных переменных (или наборы, не запоминать имя), либо вы должны использовать конкретный c способ разделения переменных между заданиями:

https://docs.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=azure-devops&tabs=yaml%2Cbatch#use -output-переменные-из-задач

0 голосов
/ 12 марта 2020

Согласно этот , using outputs in a different job не поддерживается в Classi c UI Format.

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

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

1.Вы можете установить key переменная в конвейерных переменных:

enter image description here

2.Добавить одну задачу Powershell Inline с содержанием ниже в вашей первой работе:

$url = "$($env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI)$env:SYSTEM_TEAMPROJECTID/_apis/build/definitions/$($env:SYSTEM_DEFINITIONID)?api-version=5.0"
Write-Host "URL: $url"
$pipeline = Invoke-RestMethod -Uri $url -Headers @{
    Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
}
Write-Host "Pipeline = $($pipeline | ConvertTo-Json -Depth 100)"

# Update an existing variable to its new value
$pipeline.variables.key.value = "value"

####****************** update the modified object **************************
$json = @($pipeline) | ConvertTo-Json -Depth 99

$updatedef = Invoke-RestMethod -Uri $url -Method Put -Body $json -ContentType "application/json" -Headers @{Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"}

write-host "==========================================================" 
Write-host "The value of Varialbe key is updated to" $updatedef.variables.key.value
write-host "=========================================================="

3. Запустите конвейер, в котором можно найти значение key переменная успешно обновлена:

enter image description here

Итак Вы можете запустить скрипт ps в первом задании, чтобы обновить значение переменной key, затем все последующие задания могут легко получить доступ к обновленной переменной.

Примечание:

  1. Для самого скрипта вам нужно всего лишь изменить строки $pipeline.variables.key.value = "value" (обязательно) и Write-host "The value of Varialbe key is updated to" $updatedef.variables.key.value (необязательно) ).

Если я хочу установить для переменной с именем MyTest значение MyValue, строки должны быть $pipeline.variables.MyTest.value = "MyValue" и Write-host "The value of Varialbe MyTest is updated to" $updatedef.variables.MyTest.value.

Чтобы убедиться, что задача ps в одном задании может получить доступ к OAuth Token, нам нужно Allow Scripts to Access OAuth Token. Щелкните по названию задания агента и установите флажок:

enter image description here

Чтобы включить конвейер, у которого есть разрешение на обновление переменной конвейера (редактировать конвейер сборки), go Безопасность конвейера для установки Edit build pipeline , разрешающего для пользователя xxx(ProjectName) build service.

enter image description here

Надеюсь, все вышеперечисленное поможет:)

...