在脚本中动态设置 Azure DevOps 变量

m00*_*0.0 5 powershell azure-devops

我有n个变量需要在发布管道中分配为 Azure DevOps 变量,但似乎我的语法不正确。

这些变量可能具有不同的值(变量名称),例如: - {guid 1} - {guid 2} ...

所以我在运行之前不会知道它们。问题是,vso[task.setvariable] 的所有示例似乎都使用静态变量名称,但我需要动态设置它。

这是应该有效但无效的:

 Write-Host "##vso[task.setvariable variable=$($myVariable)]$($myValue)"
Run Code Online (Sandbox Code Playgroud)

我也尝试过仅使用 [Environment]::SetEnvironmentVariable (与用户一起),并且它似乎不会在同一作业中的两个不同任务中持续存在。

[Environment]::SetEnvironmentVariable($myVariable, $myValue, 'User')
Run Code Online (Sandbox Code Playgroud)

(后续任务中为空)

有什么方法可以动态创建在任务之间持续存在的发布变量吗?我尝试在开发者社区中搜索并发现一个问题,但没有答案。

m00*_*0.0 5

实际上看起来问题不是变量未设置,而是使用 task.setvariable 后,该变量仅在后续任务中可用(而不是当前任务)。

所以我想说这是在 Azure DevOps 中设置变量的最佳方法:

当需要在同一任务/脚本步骤中使用变量时,请使用:

[Environment]::SetEnvironmentVariable(...)
Run Code Online (Sandbox Code Playgroud)

或者只是在 PowerShell 中使用变量。

当需要在多个步骤中使用变量时,请使用:

$myVariable = "some name"
$myValue = "some value"

# Note that passing in $($variableName) should work with this call
Write-Host "##vso[task.setvariable variable=$($myVariable)]$($myValue)"

# Note that trying to use a Write-Host for $env:myVariable will return empty except in tasks after this one
Write-Host "Setting $($myVariable) to $($myValue)
Run Code Online (Sandbox Code Playgroud)