TFS 构建和 Powershell:如何访问预定义的构建变量

Posted

技术标签:

【中文标题】TFS 构建和 Powershell:如何访问预定义的构建变量【英文标题】:TFS Build and Powershell: how to acces predefined build variables 【发布时间】:2020-06-14 01:08:49 【问题描述】:

我在从 powershell 脚本访问构建变量时遇到问题,例如我想访问 Agent.BuildDirectory。 我试过了:

$Build.SourcesDirectory
$(Build.SourcesDirectory)

没有任何作用。

我知道我可以使用 $Env:TF_BUILD_SOURCESDIRECTORY,但并非所有变量都可以通过这种方式使用。

你有什么建议吗?

【问题讨论】:

嗨@Darqer,你能告诉我们你使用的是哪个版本的TFS吗? 我使用的是 15.117 版 【参考方案1】:

所以这是 TFS 2017 Update 3。你应该能够做你想做的事。您在哪里尝试使用变量,作为构建中的参数还是实际在 PowerShell 脚本中?这些变量可以用作参数,并在运行时由代理替换并传递给脚本,但如果您尝试在 $(...) 之类的脚本中访问它们,它将不起作用。您确实需要使用 $env:VARIABLE。变量部分中的所有变量都会在运行时转换为带有名称的环境变量。因此,例如,如果您正在运行如下图所示的内联 PowerShell,您可以使用 $(..)

或者,如果您想将参数传递给 PowerShell 脚本,您也可以

但你不能从脚本内部。

【讨论】:

这可以解释我的问题,我尝试在 ps1 脚本中使用变量。非常感谢您的回答:)。【参考方案2】:

您应该使用$(Agent.BuildDirectory) 而不是$(Agent.SourcesDirectory)。从以下链接检查代理变量:

https://docs.microsoft.com/en-us/azure/devops/pipelines/build/variables?view=azure-devops&tabs=yaml#agent-variables

更新: 添加截图:

【讨论】:

是的,我在我的问题中犯了一个错误,在我的脚本中有 $(Build.SourcesDirectory) 但对于 $(Agent.BuildDirectory) 我有同样的效果,它不起作用。 我使用的是 ps1 脚本文件,而不是内联脚本。我不知道这些方法之间的数据访问存在差异。谢谢你的帮助:)。

以上是关于TFS 构建和 Powershell:如何访问预定义的构建变量的主要内容,如果未能解决你的问题,请参考以下文章

TFS 构建通过 REST API 和 PowerShell 发布测试结果 TRX

TFS2015 构建定义 Powershell 错误

TFS中的Robocopy构建PowerShell步骤报告失败但没有错误

在线构建 TFS 后如何访问工件文件夹?

如何基于Fortify扫描结果使TFS构建失败

目标机器上的 TFS2015 Powershell