我的团队使用per-release和per-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*
有两个构建定义。一个指向当前发布分支,另一个指向当前发布分支。
此设置运行良好,但每次我们为新版本分支新的sprint和分支时,更新构建中的所有分支路径都会变得有点耗时且容易出错。每个构建在这些地方都有分支路径:
构建仅指向tfs中的一个分支位置,并且每次更改的该分支路径的唯一部分是与当前sprint或release相关联的编号。例如,构建可能会从指向/developement/2.10_1/切换到/developement/2.10_2 /.
有没有办法在构建定义中定义一次基本路径,然后在整个定义中使用它?那样每次我们切换分支时我们只需要在一个地方指定分支路径?更好的是,该变量的值是否可以在构建定义之外进行管理,以便它可以被多个构建定义使用?根据项目的活动迭代,变量值是否可能是动态的?
或者构建定义中的路径条目是否可以以相对于分支的方式定义?
有什么建议吗?谢谢!
答案 0 :(得分:3)
我已经设置了我们的构建,以便它们使用自定义的$(BranchToBuild)参数,该参数插入到构建中的所有构建路径中。这消除了您在定义的“项目构建”部分中遇到的问题。
然后可以通过在“队列构建”对话框中的构建参数中添加/p:BranchToBuild=2.10_2
来将此参数传递到构建中,这样您就可以手动选择要构建的任何分支以及您排队的每个构建。
您还可以在构建定义中设置默认参数,使其对于每个构建默认为/p:BranchToBuild=2.10_2
- 每次将新分支设置为“当前”分支时,您只需更改此默认值和所有后续构建将自动使用正确的分支(但您仍然可以返回并轻松地构建任何以前的分支,例如,如果您必须将错误修复合并到以前的版本中)
唯一的麻烦就是(正如您所发现的那样)您还必须将分支的代码映射到构建服务器上,以便从源代码控制中获取它。但是有一个快捷方式 - 在构建定义中,选择旧分支(10.1_1)的所有映射并复制它们。粘贴到文本编辑器中,您将看到每个只是简单的文本行。现在,您可以使用10.1_2全局搜索并替换10.1_1,然后将整个映射集复制并粘贴回构建定义。与手动编辑映射中的每一行相比,里程更快,更不容易出错。
以上所有意味着设置新分支需要大约30秒。
需要注意的是,构建定义指向控制构建的vcproj文件,它在运行构建本身之前获取此文件。因此,将构建定义放在分支中是有问题的。通常这不是问题,但偶尔当您需要更新构建定义时,它可能会破坏您的分支,除非您还手动将构建定义指向vcproj的正确变体。一般来说,我通过避免破坏构建中的变化来解决这个问题,所以它在过去的7年里只抓过我一次。