0

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

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

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

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

4

2 回答 2

2

您几乎必须使用库变量组(或集合,不记得名称),或者您必须使用特定方式在作业之间共享变量:

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

于 2020-03-10T10:52:58.280 回答
2

据此using outputs in a different job经典 UI 格式不支持。

作为这种情况下的解决方法,您可以通过管道变量(在同一管道中的作业之间共享变量)或变量组(在使用相同变量组的管道之间共享变量,它也适用于作业)共享变量。

由于您只想在同一管道中的作业之间共享变量,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变量的值,然后所有下一个作业都可以轻松访问更新后的变量。

笔记:

  1. 对于脚本本身,您只需要更改行$pipeline.variables.key.value = "value"(必要)和Write-host "The value of Varialbe key is updated to" $updatedef.variables.key.value(可选)。

如果我想将名为MyTestvalue的变量设置为MyValue,行应该是$pipeline.variables.MyTest.value = "MyValue"and Write-host "The value of Varialbe MyTest is updated to" $updatedef.variables.MyTest.value

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

在此处输入图像描述

  1. 要使管道具有更新管道变量的权限(编辑构建管道),请转到管道安全性为用户设置Edit build pipeline 允许xxx(ProjectName) build service

在此处输入图像描述

希望以上所有帮助:)

于 2020-03-12T10:20:58.577 回答