15

当我在新的 TFS 2015 团队构建中定义自定义变量时,如下所示:
名称:SomeOutput
值:$(System.DefaultWorkingDirectory)\Some

...它似乎没有扩大$(System.DefaultWorkingDirectory)
有没有解决的办法?

编辑:
至少它似乎并没有到处扩展。

例如,在 MSBuild-Arguments 中,/p:OUTPUT="$(SomeOutput)"扩展为,/p:OUTPUT="C:\TfsData\BuildAgents\_work\3\s\Some"但是当我添加一个带有工具集cmd和参数集的 cmd 行构建任务时/k set,它会打印
SOMEOUTPUT=$(System.DefaultWorkingDirectory)\Some

编辑2:这是我的变量
变量

这是我的工作流程步骤
工作流程

这就是构建打印的内容
构建输出

4

3 回答 3

10

您可以使用 Visual Studio Marketplace 中的VSTS 变量任务扩展

当您在“变量”屏幕中定义一个变量并使用其他变量作为值时,它们不会被扩展(正如您所预料的那样)。而是将文字文​​本传递给工作流中的任务。如果没有这个小任务,以下配置将无法工作:

Variable              Value
Build.DropLocation    \\share\drops\$(Build.DefinitionName)\$(Build.BuildNumber)

通过将 Expand variable(s) 任务添加到工作流的顶部,它将负责扩展,因此它下面的任何任务都将收到您所追求的值。

https://github.com/jessehouwing/vsts-variable-tasks/wiki/Expand-Variable

PS:新代理(2.x 版)现在自动扩展变量。

于 2016-04-14T01:08:36.450 回答
4

这是可以实现的。

您可能需要使用% %而不是$ 调用变量cmd来打印结果。还需要call 在命令前面加上。这是一个简单的例子: cmd 提示扩展变量示例

注意: System.DefaultWorkingDirectory不可用cmd(不知道为什么);你需要使用System_DefaultWorkingDirectory 。可以在日志中查看详细信息。

于 2015-12-03T09:48:36.173 回答
2

我有同样的问题 - 想拼凑由几个内置变量组成的路径并将其传递给 PS 脚本。

解决方法:我最终通过相应生成的环境变量(例如$env:BUILD_SOURCESDIRECTORY)组合了实际脚本中的变量。

不是我最初的想法,但它至少有效。缺点 - 如果我需要更改路径,我总是必须更改 PS 脚本而不是构建变量。

于 2015-12-03T10:08:19.187 回答