我正在使用TFS 2017.我有一些在Mac OSX Agent上运行的iOS应用程序的Build定义。这些Build def包含一个或多个Shell(Bash)脚本和命令行任务。在这些任务中,我试图使用物理Mac计算机上的环境变量。问题是,要使用Mac的环境变量,我需要通过TFS构建任务发送“$”。当TFS将其发送到Mac代理时,它似乎在翻译中丢失(我假设因为Build def使用“$”作为自己的变量)。这是我想要做的一个例子:
命令行任务:
工具
/TEE/tf
参数
checkin -comment:"Advance Version Number - $(SolutionName) to $(< newversion.txt) (TFS BuildNumber: $(Build.BuildNumber))" "$(Build.SourcesDirectory)/$(Info.plist.Path)" -login:$(TfsLogin),$(TfsPassword)
TFS中产生的变更集:
Advance Version Number - MyiOSSolution to $(< newversion.txt) (TFS BuildNumber: 20180124.53)
以前的Build任务是一个Bash脚本,用于更新iOS项目的版本号(在info.plist文件中),并创建文件“newversion.txt”。 “newversion.txt”包含带有新版本号的单行。事实证明,一旦前一个Bash脚本终止,就很难持久化环境变量。所以我试图将新的版本号写入一个可以在后续构建任务中获取的文件。
此命令行任务的目标是使用TEE(Team Explorer Everywhere)签入已更改的info.plist文件。并在签到评论中使用新版本号。
在终端中使用“$(&lt; newversion.txt)”可以正常工作。但是当作为TFS命令行构建任务的一部分执行时,“$(&lt; newversion.txt)”被解释为文字文本。我假设TFS没有正确发送/执行参数,因为它知道“$(&lt; newversion.txt)”不是有效的TFS变量 - 因此它将该片段作为文字发送。
答案 0 :(得分:0)
您可以尝试使用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