【问题标题】:Dynamically set Azure DevOps variable in scripts在脚本中动态设置 Azure DevOps 变量
【发布时间】:2019-11-12 06:25:37
【问题描述】:

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

变量可能具有不同的值(变量名称),因此它们可以是: - {指导 1} - {向导 2} ...

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

以下是应该有效但无效的方法:

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

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

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

(后续任务为空)

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

【问题讨论】:

    标签: powershell azure-devops


    【解决方案1】:

    实际上看起来问题不在于未设置变量,而在于使用 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)
    

    【讨论】:

    • 非常感谢,提示“变量将仅在后续任务中可用(而不是当前任务)”是我问题的关键。我使用一个独特的 cmd 任务来运行命令,变量总是返回一个空值,现在有两个任务(一个用于创建 de 变量,另一个用于打印值)问题已解决。 :)
    【解决方案2】:

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

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

    【讨论】:

    • 谢谢,这很接近!看起来问题的一部分是我试图在同一个脚本中使用 GetEnvironmentVariable,但结果是空的(我也会链接到显示这个的东西),但仍然可以在后续任务中使用。
    猜你喜欢
    • 2019-06-16
    • 2022-10-25
    • 2019-07-13
    • 2019-12-31
    • 2014-07-06
    • 2021-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多