如何使用Powershell读取Azure Devops管道中的环境变量?

时间:2020-03-10 10:50:50

标签: powershell azure-devops azure-powershell

我创建了一个PowerShell作业,并使用下面的代码使用Powershell在azure管道中设置了环境变量。

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

我可以在同一作业本身中使用$env:key打印该值。

但是,当我尝试在下一个作业中使用$env:key显示值时,将不会打印任何内容。如何通过天青管道使用上述环境变量。还有其他设置和读取自定义环境变量的方法。

2 个答案:

答案 0 :(得分:2)

您几乎必须要么使用library variable groups(或设置,不记得名字),要么必须使用一种特定的方式在各个作业之间共享变量:

https://docs.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=azure-devops&tabs=yaml%2Cbatch#use-output-variables-from-tasks

答案 1 :(得分:1)

根据this,经典UI格式不支持using outputs in a different job

作为这种情况下的解决方法,您可以通过Pipeline Variables(在同一管道中的各个作业之间共享变量)或Variable Groups(在使用同一变量组的管道中共享变量,也可以跨作业)共享变量)。

由于您只想在同一管道中的作业之间共享变量,因此pipeline variable就足够了。

1。您可以在管道变量中设置key变量:

enter image description here

2。在您的第一份工作中添加一个带有以下内容的Powershell 内嵌任务:

$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

  1. 要确保一项任务中的ps任务可以访问OAuth Token,我们应该Allow Scripts to Access OAuth Token。单击代理人的作业名称,然后选中框:

enter image description here

  1. 要启用管道有权更新管道变量(编辑构建管道),请通过管道安全性为用户Edit build pipeline设置xxx(ProjectName) build service 允许

enter image description here

希望以上所有都对您有帮助:)