TFS - 使用频繁变化的分支路径构建定义

标签 tfs branch build-process

我的团队使用每个版本和每个 sprint 分支方法。所以我们通常有一个新的 Main 分支(集成)用于当前 sprint,每个版本都有一个 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 和新版本分支时更新构建中的所有分支路径变得有点耗时且容易出错。每个构建在这些地方都有分支路径:
  • 源设置 > 源控制文件夹(多个事件路径和隐藏路径)

  • enter image description here
  • 流程参数 > 构建 > 要构建的项目(多个路径
    项目)

  • enter image description here

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

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

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

    有什么建议?谢谢!

    最佳答案

    我已经设置了我们的构建,以便它们使用自定义的 $(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 - 使用频繁变化的分支路径构建定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28615585/

    相关文章:

    TFS:将单个文件的更改合并回最新版本

    linux - 如何找到 GCC 支持的所有 EABI 版本以及如何找到目标系统的 EABI 版本?

    .net - 如何自动从 TFS 在线下载最后一个版本?

    svn - 使用 subversion 将更改提交到与当前 checkout 的分支不同的分支

    svn 分支提交 - 实验性提交

    ios - XCode 中 ios 应用程序的确切构建过程是什么?

    c# - TFS 错误 : item has pending changes but does not exist locally

    c# - TFS Force 通过 SDK 以编程方式获取

    tfs - 如何锁定过时的团队项目

    git:所有本地分支都在远程后面。我怎样才能将它们全部带到远程状态?