我创建了一个PowerShell作业,并使用下面的代码使用Powershell在azure管道中设置了环境变量。
[Environment]::SetEnvironmentVariable("key", "value")
我可以在同一作业本身中使用$env:key
打印该值。
但是,当我尝试在下一个作业中使用$env:key
显示值时,将不会打印任何内容。如何通过天青管道使用上述环境变量。还有其他设置和读取自定义环境变量的方法。
答案 0 :(得分:2)
您几乎必须要么使用library variable groups(或设置,不记得名字),要么必须使用一种特定的方式在各个作业之间共享变量:
答案 1 :(得分:1)
根据this,经典UI格式不支持using outputs in a different job
。
作为这种情况下的解决方法,您可以通过Pipeline Variables(在同一管道中的各个作业之间共享变量)或Variable Groups(在使用同一变量组的管道中共享变量,也可以跨作业)共享变量)。
由于您只想在同一管道中的作业之间共享变量,因此pipeline variable
就足够了。
1。您可以在管道变量中设置key
变量:
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
变量的值已成功更新:
因此,您可以在第一个作业中运行ps脚本来更新key
变量的值,然后所有下一个作业都可以轻松访问更新后的变量。
注意:
$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
。
OAuth Token
,我们应该Allow Scripts to Access OAuth Token
。单击代理人的作业名称,然后选中框:Edit build pipeline
设置xxx(ProjectName) build service
允许。希望以上所有都对您有帮助:)