TFS版本管理中的自定义变量

时间:2018-06-04 19:41:41

标签: powershell tfs tfs2017 azure-pipelines-release-pipeline

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

添加了一个Execute PowerShell任务,用于将发布变量存储到环境变量中:

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

在远程计算机任务上添加了Execute 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)

我在这里缺少什么?

2 个答案:

答案 0 :(得分:0)

非秘密变量已存储为环境变量;你不需要做任何特殊的事情来访问它们。您可以使用$ENV:VariableName访问它们。期间被下划线替换。因此Foo.Bar将是$env:FOO_BAR

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

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

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

答案 1 :(得分:0)

我已经使用TFS 2017.3.1测试了您的场景,并且在将环境变量作为参数传递时它可以正常工作。您可以先升级TFS,然后重试。附上我的步骤供您参考:

1。enter image description here

2。enter image description here

3

enter image description here

    4。

    enter image description here