【问题标题】:How does TFS choose which check-ins to associate with a build?TFS 如何选择与构建关联的签入?
【发布时间】:2016-10-31 18:03:18
【问题描述】:

我们的构建通常有一堆混杂的工作项和与之相关的提交,我不知道 TFS 如何确定要添加的内容。我们正在使用 TFS 2015 更新 3 和 TFVC。

当构建运行时,它会从 TFVC 的分支和文件夹中的某个位置获取代码。通常,像“root\dev\src\component name”这样的东西,我们避免在我们的存储库中获取所有代码,并且我们设置了 CI 以运行,以便此文件夹中的任何更改都会导致 CI​​ 构建运行。

我们还运行每日构建,运行更多测试并创建一个供 TFS 发布管理使用的发布包。我希望在为此构建设置存储库时定义的文件夹内的任何代码更改都包含在构建的关联更改集中。我还希望在这些分支之外签入的任何更改都不会关联。但这种情况并非如此。我们可以看到来自整个项目的提交。

有人知道这应该如何工作吗?

我不确定这是否应该出现在问题或答案中,但由于以下答案中提供的提示,我找到了一些额外的信息。

看来源设置将采用存储库设置的映射文件夹之间的公共根目录,所以如果我有 2 个文件夹 $/Relo/Dev/B1/src/Claims.Services 和 $/Relo/Dev/B1/ src/PSScripts 它将公共根目录 $/Relo/Dev/B1/src 作为源设置,并将该文件夹中的任何更改包含在构建中。谁能证实这一点?当然那不是我想要发生的事情。在构建定义的历史选项卡中,如果我查看差异,我可以在 json 中看到一个字段“defaultBranch”,这似乎是控制它的值,有没有办法直接更新这个字段?

【问题讨论】:

    标签: tfs tfsbuild tfs-2015


    【解决方案1】:

    TFS 根据构建定义中的源存储库映射 (Build vNext) 和上一次成功构建来确定应将哪些变更集映射到构建。

    因此,您将看到一个变更集列表,其中包含在任何映射文件夹包括所有后代的最低公共基础中提交的文件,因为最近一次成功建造。每当您获得成功的构建(我希望它比失败的构建更频繁地发生 ;-))列表会缩短并且只显示最后一次签入。

    下面的示例映射将导致对 $/Relo/Dev/B1/src 以下的任何内容进行任何更改集(因为它是最低的公共基础):

    • $/Relo/Dev/B1/src/Claims.Services
    • $/Relo/Dev/B1/src/PSScripts

    类似地,它会选择上述变更集的所有相关工作项。

    这是应该发生的。如果您看到其他内容,我会仔细查看构建定义的存储库映射或源设置。

    【讨论】:

    • “源设置”是什么意思?你的意思是存储库映射?我有 2 个文件夹映射 $/Relo/Dev/B1/src/Claims.Services 映射到 $(build.sourcesDirectory\Claims.Services 和 $/Relo/Dev/B1/src/PSScripts 映射到 $(build.sourcesDirectory\PSSCripts ,但我有与构建相关联的变更集,其中包括来自这些文件夹外部的文件,没有来自内部的文件。
    • 是的,存储库映射在构建 XAML 构建中称为源设置(对不起,我仍在旧系统上)-我已更新答案以包含此名称。您的变更集是否包含来自某个映射文件夹的后代的文件?
    • 不,正如我在上面编辑问题时试图解释的那样,TFS Build 似乎会将“源分支”或“defaultBranch”更改为映射存储库中最低的公共文件夹。在我的 cmets 部分的示例中,最低的公共文件夹是“$/Relo/Dev/B1/src”,这当然是我的根源代码文件夹,因此包含构建之间的所有更改。
    • 对不起@Noel,我忘记了映射存储库的公共基础。那个也让我想知道:-)。
    【解决方案2】:

    @Noel - 我猜你正在使用 vNext 构建而不是 XAML 构建。还是您在使用 XAML 和 vNext 的组合?

    一般来说,计划的 TFS 构建将关联在同一构建的最后一次成功运行中未关联的所有更改。

    我建议您再次检查 CI build 和 Daily build 的源文件夹位置是否相同?

    【讨论】:

    • 我们正在使用 vNext 构建。
    • @Noel - 是否只有两个构建定义 - 1 个用于 CI,1 个用于 Daily?您是否确认在构建定义的触发器部分下,两个构建定义的路径相同?
    • 当前没有设置触发器。我正在手动运行它们。同一个解决方案有多个定义,但我相信我已经按照上面在问题中添加的附加信息中的描述进一步缩小了问题范围。
    • 好的。我将运行一次您的场景。您曾提到您有一个 CI 构建。 CI 构建是触发器设置为“持续集成”的地方。
    • 我确实有一个 CI 构建,但这不是我所说的构建。我说的是没有任何触发器的构建,它是手动运行的
    猜你喜欢
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-01
    • 2014-03-21
    • 2012-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多