TFS 发布管理中的自定义变量

Custom variables in TFS Release Management

我正在使用 TFS 2017.1 构建和发布功能。 在我的发布定义中,我有几个发布变量,我需要在我的 PowerShell 任务(在远程机器上执行)中引用它们。到目前为止,我已经尝试了以下选项,但无法正常工作。

添加了执行 PowerShell 任务以将发布变量存储到环境变量中:

$releaseVaraiables = Get-ChildItem Env: | Where-Object { $_.Name -like "ACL_*" } 
Write-Host "##vso[task.setvariable variable=aclVariables]$releaseVaraiables"

添加了在远程机器上执行 PowerShell 任务:

这里我无法读取环境变量(可能是因为这是远程机器任务?)

Write-Verbose "problem reading $env:aclVariables" -Verbose

然后我尝试将环境变量作为参数传递,但这也不起作用

param
(
    $RbacAccessTokenParams
)

$RbacAccessTokenParams.GetEnumerator() | % {$_.Name}
$RbacAccessTokenParams | % {
    Write-Verbose "variable is $_" -Verbose
    Write-Verbose "name is $_.Name" -Verbose
    Write-Verbose "value is $_.Value" -Verbose
}

这就是我作为参数传递的方式

-RbacAccessTokenParams $(aclVariables)

我在这里缺少什么?

非机密变量已存储为环境变量;您无需执行任何特殊操作即可访问它们。您可以使用 $ENV:VariableName 访问它们。句点替换为下划线。所以 Foo.Bar 将是 $env:FOO_BAR

秘密变量应该传递给需要它们的脚本。

但是,这仅适用于代理。如果您使用 PowerShell On Target Machines 任务来 运行 脚本,您需要将变量作为参数传递给脚本。没有办法解决这个问题,除非您选择使用部署组。

或者,更好的是,遵循配置即代码约定,并将特定于应用程序的值存储在脚本读取的源代码控制配置文件中,这样您就不会与部署编排平台紧密耦合。

我已经用 TFS 2017.3.1 在我这边测试了你的场景,当将环境变量作为参数传递时它可以工作。您可以先升级您的 TFS,然后再试一次。附上我的步骤供大家参考:

1.

2.

3.

    4.