当我在新的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
答案 0 :(得分:10)
您可以使用Visual Studio Marketplace中的VSTS Variable Tasks extension。
在“变量”屏幕中定义变量并使用其他变量作为值时,它们不会被展开(如您所料)。而是将文字文本传递给工作流中的任务。如果没有这个小任务,以下配置将不起作用:
Variable Value Build.DropLocation \\share\drops\$(Build.DefinitionName)\$(Build.BuildNumber)
通过将Expand变量任务添加到工作流程的顶部,它将负责扩展,因此它下面的任何任务都将获得您所追求的价值。
https://github.com/jessehouwing/vsts-variable-tasks/wiki/Expand-Variable
PS:新代理(版本2.x)现在自动扩展变量。
答案 1 :(得分:4)
可以实现。
您可能需要使用Geckofx-Winforms
代替% %
来调用$
中的变量来打印结果。还需要在命令的前面添加cmd
。这是一个简单的例子:
注意:<{strong> call
在System.DefaultWorkingDirectory
中不可用(不确定原因);您需要使用cmd
代替。可以在日志中查看详细信息。
答案 2 :(得分:2)
我遇到了同样的问题 - 希望拼凑一个由几个内置变量组成的路径并将其传递给PS脚本。
解决方法强>:
我最终通过相应的生成环境变量(例如$env:BUILD_SOURCESDIRECTORY
)将实际脚本中的变量组合在一起。
不是我原本想到的,但它起码至少。缺点 - 如果我需要更改路径,我总是需要更改PS脚本而不是构建变量。