TFS 2015构建:是否可以在存储库映射中使用变量?

Pau*_*ain 7 build tfs-2015 asp.net-core

在TFS 2015上创建vNext构建时,您可以定义变量,然后在构建步骤中使用这些变量,也可以在构建运行的脚本中用作环境变量.

我正在开发的构建运行从映射位置提取文件的脚本,所以如果我可以定义一个变量并在映射中使用它,那将是很好的,例如,如果我更新项目构建中的引用,我可以简单地使用新位置更新变量,并使存储库映射和脚本全部从新位置正确拉出,而无需在多个位置进行更改.

我已经尝试通过设置变量和映射如下, 在此输入图像描述 在此输入图像描述 但是当您尝试保存构建时会产生错误,抱怨映射中有两个"$"字符.有办法做到这一点还是目前不可能?

小智 5

这也让我好一阵子了。

对于初学者,此功能有一个uservoice请求。您可以在此处添加投票和输入内容,以使Microsoft启用此功能:https : //visualstudio.uservoice.com/forums/330519-team-services/suggestions/14131002-allow-variables-in-repository-variables-and-特里格

其次,我们已经开发出一种变通方法,可以帮助我们实现目标。它不是完美的,但是如果您对折衷感到满意或可以解决缺陷,则对您可能有用。

首先关闭构建的“标签源”选项,然后将“服务器路径”字段映射到基础构建。您将想要向Build Definition添加一个自定义变量,以告诉构建实例要从哪个TFS位置提取。例如,我们有一个基础项目,然后有该项目的多个分支,因此我们的源代码的结构如下

$\Team Project\Project1
$\Team Project\Project1Branch1
$\Team Project\Project1Branch2
$\Team Project\Project1Branch3
Run Code Online (Sandbox Code Playgroud)

然后创建一个名为“ Branch”的变量,可以将其设置为“ Branch1”,“ Branch2”,依此类推。

当我们要构建基础项目时,在启动构建时将Branch变量保留为空白。对于分支构建,我们将其设置为要构建的分支的名称。

然后我们的构建步骤如下所示

  • 将工作区文件夹重新映射到分支文件夹
  • 获取指定分支的文件-我们必须在重新映射工作区后手动执行此操作
  • 在指定分支中编译源
  • 从指定的分支发布构建工件
  • 手动标记指定分支的代码

重新映射任务运行命令

tf workfold "$/Team Project/Project1$(Branch)" "$(build.sourcesDirectory)\$(Build.DefinitionName)$(Branch)"
Run Code Online (Sandbox Code Playgroud)

手动获取任务运行以下命令

get /recursive /noprompt "$/Team Project/Project1$(Branch)"
Run Code Online (Sandbox Code Playgroud)

生成使用Branch变量指向指定分支的解决方案文件的正确位置。

$(build.sourcesDirectory)\$(Build.DefinitionName)$(Branch)\SolutionFile.sln
Run Code Online (Sandbox Code Playgroud)

“发布工件”任务在“内容”字段和“路径”字段中都使用Branch变量。

**\$(Build.DefinitionName)$(Branch)\bin
Run Code Online (Sandbox Code Playgroud)

标签代码任务使用以下命令

tf label "$(build.buildNumber)" "$/Team Project/Project1$(Branch)" /recursive
Run Code Online (Sandbox Code Playgroud)

此设置的缺点是您不会将关联的更改和工作项捕获到子分支,因为“服务器路径”字段始终设置为主要位置。如果您始终在启动要投入生产的构建之前从分支机构合并到主要位置,则这可能不是问题。您能做些什么来弥补这一点,实际上取决于您的用例。

通过一些调整,如果需要,您也可以使用相同的格式来指定完整路径。


Pat*_*SFT 3

不可能。正如错误消息中提到的:映射中有两个“$”字符。这意味着您的应用程序的路径不应因构建而异。

存储库页面上的映射用于指定源代码管理文件夹,其中包含需要在构建定义中构建的项目。您可以通过单击省略号 (...) 按钮来设置它,但是,您不能在映射路径中包含变量。

有一个类似的问题:Variables in TFS Mappings on Visual Studio Online Team Builds

  • 您在该功能上是正确的,但在路径不应在构建之间更改的断言上是错误的。在开发过程中通常有多个环境,理想情况下构建这些环境的过程应该是相同的。通过手动输入这些单独的子树/分支,这会成为一个故障点,并且还会因执行完全相同操作的重复条目而使构建环境变得混乱。这相当于将重复数据输入数据库(例如客户地址),是一个严重的设计缺陷。 (3认同)