我可以控制TFS构建中“获取源”的任何选项吗?

我可以控制TFS构建中“获取源”的任何选项吗?,tfs,tfsbuild,Tfs,Tfsbuild,我有三个版本 建造一个 从A克隆生成B 构建从B克隆的C 构建A构建了我们的整个环境,构建B和C被克隆,但随后被剥离为仅构建特定的部分和来自不同分支的部分。自从这样做以来,我们已经看到了构建一个三元组的构建时间。它在每个构建上运行tf-vc-workspace/delete 构建C也会删除它的工作区,但构建B不会。在repository选项卡上,所有三个都将Clean设置为false 是否有任何地方可以查看/设置获取源任务的选项?什么会导致一个构建不执行此操作,而另两个执行此操作?在TFS构建管

我有三个版本

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

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

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

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

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

首先,建议您检查是否在Visual Studio生成任务中设置了Clean=true,您需要在此处取消选中它

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

此外,还可以在生成定义中禁用默认的获取源代码步骤。并使用您自己的脚本执行获取源代码/拉取文件以绕过工作区映射问题。如何,请遵循:

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

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

首先,建议您检查是否在Visual Studio生成任务中设置了Clean=true,您需要在此处取消选中它

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


此外,还可以在生成定义中禁用默认的获取源代码步骤。并使用您自己的脚本执行获取源代码/拉取文件以绕过工作区映射问题。如何回答,请按照下面的说明:

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

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


通过删除子文件夹映射,我的获取源任务从11分多钟下降到了几秒。

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

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


通过删除子文件夹映射,我的“获取源代码”任务从11分钟以上下降到了几秒钟。

您使用的是什么版本的TFS?System.Debug设置为true时,“获取源代码”任务的输出是什么?您的工作区映射是否有任何前导空格字符?我已经在TFS 2018和TFS 2017中发现了TFVC工作区映射的一个bug,如果工作区映射中存在领先的空间,则可能是TFS 2017。我们将发布2017版本1。将debug设置为true确实使主题更加清晰。它似乎正在搜索特定的工作区,当它找到它时,映射已关闭:映射的预期数量:“48”。实际:“44”我运行了一个clean=true的构建,尝试清除映射,然后再次将其设置为false,但仍然关闭。所以我想我需要查看存储库,看看是否有什么问题?在我最初给出的示例中,构建B已经删除了大量存储库,因此我想这也应该是一个线索?System.Debug设置为true时,“获取源代码”任务的输出是什么?您的工作区映射是否有任何前导空格字符?我已经在TFS 2018和TFS 2017中发现了TFVC工作区映射的一个bug,如果工作区映射中存在领先的空间,则可能是TFS 2017。我们将发布2017版本1。
将debug设置为true确实使主题更加清晰。它似乎正在搜索特定的工作区,当它找到它时,映射已关闭:映射的预期数量:“48”。实际:“44”我运行了一个clean=true的构建,尝试清除映射,然后再次将其设置为false,但仍然关闭。所以我想我需要查看存储库,看看是否有什么问题?在我最初给出的示例中,Build B删除了大量存储库,因此我想这也应该是一个线索。我不一定要删除或替换Get任务。我只是想理解为什么它总是在删除工作区,即使它已经存在。对于system.debug=true,我看到了更多信息,包括定义工作空间的未命名XML文档。它首先在那里检查,但是当它不符合它想要的时,它会清除工作区并获得所有。当我在存储库上设置clean=true时,我不知道为什么它不更新XML。@MitchelWB似乎是一个映射问题。感谢您在下面的分享,很高兴听到问题得到解决。当你修好自己的时候总是更好,因为你知道它是如何工作的。你可以将你的回复标记为答案,这也将帮助社区中的其他人。我不一定要删除或替换Get任务。我只是想理解为什么它总是在删除工作区,即使它已经存在。对于system.debug=true,我看到了更多信息,包括定义工作空间的未命名XML文档。它首先在那里检查,但是当它不符合它想要的时,它会清除工作区并获得所有。当我在存储库上设置clean=true时,我不知道为什么它不更新XML。@MitchelWB似乎是一个映射问题。感谢您在下面的分享,很高兴听到问题得到解决。当你修好自己的时候总是更好,因为你知道它是如何工作的。您可以将您的答复标记为答案,这也将帮助社区中的其他人。