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

时间:2019-11-12 06:25:37

标签: powershell azure-devops

我有 n 个变量,需要在Release管道中将它们分配为Azure DevOps变量,而且看起来语法不正确。

变量可能具有不同的值(变量名),使得它们可以是: -{guid 1} -{guid 2} ...

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

这是应该起作用的,但不起作用:

 Write-Host "##vso[task.setvariable variable=$($myVariable)]$($myValue)"

我也尝试过仅使用[Environment] :: SetEnvironmentVariable(与用户一起使用),并且似乎在同一作业中的两个不同任务之间没有持久性。

[Environment]::SetEnvironmentVariable($myVariable, $myValue, 'User')

(在后续任务中为空)

我是否可以通过某种方式动态创建在任务之间持续存在的发布变量?我尝试搜索,并在开发人员社区中找到一个问题,但没有答案。

3 个答案:

答案 0 :(得分:1)

有效。这是我的构建任务中的示例:

    $myVariableNewValue = '##vso[task.setvariable variable=myVariable]' + $newValue
    Write-Host $myVariableNewValue

答案 1 :(得分:0)

要在任务之间传递变量,我认为您需要使用任务的Output Variables部分。

enter image description here

在“输出变量”部分中,为生产任务指定参考名称。然后,在下游步骤中,可以使用格式$(<ReferenceName>.<VariableName>)来引用输出变量。

有关详细信息,您可以参考此document

答案 2 :(得分:0)

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

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

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

[Environment]::SetEnvironmentVariable(...)

或者只是在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)