我有 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')
(在后续任务中为空)
我是否可以通过某种方式动态创建在任务之间持续存在的发布变量?我尝试搜索,并在开发人员社区中找到一个问题,但没有答案。
答案 0 :(得分:1)
有效。这是我的构建任务中的示例:
$myVariableNewValue = '##vso[task.setvariable variable=myVariable]' + $newValue
Write-Host $myVariableNewValue
答案 1 :(得分:0)
要在任务之间传递变量,我认为您需要使用任务的Output Variables
部分。
在“输出变量”部分中,为生产任务指定参考名称。然后,在下游步骤中,可以使用格式$(<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)