TFS - 使用频繁更改的分支路径构建定义

Posted

技术标签:

【中文标题】TFS - 使用频繁更改的分支路径构建定义【英文标题】:TFS - build definition with frequently changing branch path 【发布时间】:2015-04-21 08:11:31 【问题描述】:

我的团队使用按版本和按 sprint 分支的方法。因此,对于当前的 sprint,我们通常有一个 Main (集成)的新分支,并且每个版本都有一个 Main 的分支。

Main Branch
|
 -- Development Folder
|   |
|   -- Sprint 2.10_1 Branch
|   -- Sprint 2.10_2 Branch   *current*
|
 -- Release Folder
|   |
|   -- Release 2.8.0 Branch
|   -- Release 2.9.0 Branch   *current*

有两个构建定义。一个指向当前的 dev 分支,另一个指向当前的 release 分支。

此设置运行良好,只是每次我们为新的 sprint 分支并为新版本分支时更新构建中的所有分支路径变得有点耗时且容易出错。每个构建在这些地方都有分支路径:

源设置 > 源控制文件夹(多个活动和隐藏路径)

流程参数 > 构建 > 要构建的项目(多个路径 项目)

构建只指向 tfs 中的一个分支位置,并且每次更改的分支路径的唯一部分是与当前 sprint 或发布相关联的编号。因此,例如,构建可能会从指向 /developement/2.10_1/ 切换到 /developement/2.10_2/。

有没有办法在构建定义中定义一次基本路径,然后在整个定义中使用它?这样每次我们切换分支时,我们只需要在一个地方指定分支路径?更好的是,该变量的值是否可以在构建定义之外进行管理,以便它可以被多个构建定义使用?根据项目的活动迭代,变量值是否可能是动态的?

或者可以将构建定义中的路径条目定义为相对于分支吗?

有什么建议吗?谢谢!

【问题讨论】:

如果您使用 Jason 下面指定的其他方法解决此问题,请分享一下 【参考方案1】:

我已经设置了我们的构建,以便它们使用自定义 $(BranchToBuild) 参数,该参数插入到构建中的所有构建路径中。这消除了您在定义的“要构建的项目”部分中遇到的问题。

然后可以通过在“队列构建”对话框中将/p:BranchToBuild=2.10_2 添加到构建参数中来将此参数传递到构建中,这样您就可以在每次排队时手动选择要构建的任何分支。

您还可以在构建定义中设置默认参数,以便在每次构建时默认为/p:BranchToBuild=2.10_2 - 每次将新分支设为“当前”分支时,您只需更改此默认值,所有后续构建将自动使用正确的分支(但您仍然可以返回并轻松构建任何以前的分支,例如,如果您必须将错误修复合并回以前的版本)

唯一的麻烦是(正如您所发现的)您还必须将分支的代码映射到构建服务器上,以便从源代码管理中获取它。不过有一个快捷方式 - 在构建定义中,选择旧分支 (10.1_1) 的所有映射并复制它们。粘贴到文本编辑器中,您会看到每个都变成了简单的文本行。现在您可以全局搜索 10.1_1 并将其替换为 10.1_2,然后将整个映射集复制并粘贴回构建定义。比手动编辑映射中的每一行更快,更不容易出错。

以上所有意味着建立一个新的分支需要我大约 30 秒。

需要注意的是,构建定义指向控制构建的 vcproj 文件,它会在运行构建之前获取此文件。因此,将您的构建定义放入分支是有问题的。通常这不是问题,但有时当您需要更新构建定义时,它可能会破坏您的分支,除非您还手动将构建定义指向 vcproj 的正确变体。一般来说,我通过避免对构建进行重大更改来解决这个问题,所以在过去的 7 年里它只咬过我一次。

【讨论】:

以上是关于TFS - 使用频繁更改的分支路径构建定义的主要内容,如果未能解决你的问题,请参考以下文章

PowerShell 和 TFS |使用本地路径与使用服务器路径的 PowerShell ISE 从 TFS 获取更改集列表

MSBuild 脚本中的 TFS 2013 分支名称

TFS 2013 使用动态解决方案计数构建定义

如何拒绝提交到 TFS 2015 上的远程主分支?

预构建脚本路径和预构建脚本参数

使用 (XALM) 构建过程模板在 TFS 2013 中将工具路径设置为 MSBuild 2019