【问题标题】:Can I control any options for 'Get Sources' on a TFS build?我可以在 TFS 构建上控制“获取源”的任何选项吗?
【发布时间】:2023-04-07 10:20:02
【问题描述】:

我有三个版本。

  • 构建 A
  • 构建 B(从 A 克隆)
  • 构建 C(从 B 克隆)

构建 A 构建我们的整个环境,构建 B 和 C 被克隆,但随后被剥离以仅构建特定部分并来自不同的分支。自从这样做以来,我们已经看到了 Build A 三倍的构建时间。它在每个构建中运行tf vc workspace /delete

构建 C 也会删除它的工作区,但构建 B 不会。在存储库选项卡上,所有三个都将 Clean 设置为 false。

是否有任何地方可以查看/设置“获取源”任务的选项?什么会导致一个构建不执行此操作而其他两个构建执行此操作?

【问题讨论】:

  • 您使用的是什么版本的 TFS?将System.Debug 设置为true 的Get Sources 任务的输出是什么?您的工作区映射是否有任何前导空格字符?如果工作空间映射中存在前导空格,我已发现 TFS 2018(可能还有 TFS 2017)中的 TFVC 工作空间映射存在错误。
  • 我们使用的是 2017 Release 1。将调试设置为 true 确实让我们对这个主题有了更多的了解。它似乎正在搜索特定的工作区,当它找到它时,映射已关闭:“预期的映射数量:'48'。实际:'44'”我使用 clean=true 运行构建以尝试清除映射,然后再次将其设置为 false,但仍处于关闭状态。所以我想我需要查看存储库以查看是否有问题?在我最初给出的示例中,Build B 已经删除了大量存储库,所以我想这也应该是一个线索。

标签: tfs tfsbuild


【解决方案1】:

在 TFS 构建管道的获取源步骤中只有三个 TFVC options

没有任何其他额外的选项来控制获取源任务。

首先建议你检查一下你是否在Visual Studio Build任务中设置了Clean = true,这里需要取消勾选。

如果您不选中 Clean 选项,并且构建始终刷新本地构建服务器上的工作区,并且构建代理始终清理 TFVC 存储库。尝试此解决方案:完全擦除代理目录并重新启动,这可能会解决问题。另一种方法是重新配置您的构建代理并再次触发构建。

此外,您还可以在构建定义中禁用默认的获取源步骤。并使用您自己的脚本来获取源/拉文件以绕过工作区映射问题。怎么做,请关注:Is it able to ignore/disable the first step Get source in vNext Build?

【讨论】:

  • 我不一定要删除或替换获取任务。我只是想了解为什么它总是在删除工作区,即使它已经存在。使用 system.debug = true 我可以看到更多信息,包括似乎是定义工作空间的未命名 XML 文档。它首先检查那里,但是当它与它想要的不匹配时,它会擦除​​工作区并获取所有内容。我不知道为什么我在存储库上设置 clean=true 时它没有更新 XML。
  • @MitchelWB 似乎是映射问题。感谢以下分享,很高兴听到问题已解决。当你修复自己时总是更好,因为你可以知道它是如何工作的。您可以将您的回复标记为答案,这也将有助于社区中的其他人。
【解决方案2】:

我找到了答案。通过添加 System.debug = true 我能够查看工作区中的实际映射。然后我将其与构建存储库中所有映射的列表进行匹配。我发现,当我们映射一个文件夹及其子文件夹之一时,工作空间定义中只创建了父文件夹映射。

Get Sources 运行时,它会查找匹配的工作区名称,然后首先进行简单的计数检查。当存储库中的映射数量与工作空间中的映射数量不匹配时,它会失败并立即删除并重建工作空间。

通过删除子文件夹映射,我的 Get Sources 任务从 11 多分钟缩短到几秒钟。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-19
    • 2017-07-27
    • 2015-11-28
    • 1970-01-01
    • 2019-01-05
    • 2010-12-12
    • 2012-09-16
    相关资源
    最近更新 更多