Team Foundation Server中的增量构建问题

时间:2019-01-05 10:45:44

标签: tfs msbuild tfsbuild

进行TFS构建时,是否可以更改构建输出,以便仅将输出限制为更改,以减少部署有效负载?示例:

  • 构建解决方案时,我应该只获得未全部更改的dll(包括从未更改过的Microsoft和其他第三方dll。

在TFS 2015中配置CI解决方案以及未经检查的干净选项,因为TFS 2015/2017始终交付所有文件-更改和未更改,但我只需要更改。此技巧无法解决问题:

Build (TFS Build), only what is changed

还有其他几个来源。

enter image description here

应用了这些技巧以用PropertyGroup定义下的很少设置(IncrementalBuild =TrueForceGet=FalseSkipInitilizeWorksplace=TrueSkipClean=True)将项目更新到TFSBuild.proj文件的末尾。

但是问题仍然存在,我们无法在build文件夹中仅生成更改的二进制文件,始终有所有文件。

请帮助我实现所需的构建输出。

1 个答案:

答案 0 :(得分:0)

增量构建仅重建不依赖于已更改文件的程序集。但是它确实复制了所有项目输出(依赖它的后续项目可能取决于这些程序集和文件在那里)。

这将使增量构建速度更快,但它不“仅交付已更改的文件”。它始终交付所有文件,无论它们是已更改还是未更改。最重要的是,您可以有多个代理,每个代理可以有多个工作文件夹,增量构建可以将其中任何一个用作增量构建的基础,不能保证更改的文件在您之前的构建和当前的构建之间一个。

您必须自己实现此功能,它从未成为MsBuild或TFS Build的一部分。这将涉及在TFS中查询最后一个放置文件夹,并在运行增量构建后执行比较。然后只复制更改的文件和已删除文件的日志。

PS:不推荐使用TFSBuild.proj类型的版本。从那时起,它们已被TFS 2010中的XAML构建所超越,并被视为“传统”。随后,新的VSTS / Azure DevOps构建系统超越了它们,该系统已弃用XAML构建。在旧版XAML工作流中执行TFSBuild.proj项目时,与源代码管理交互的大多数属性都将被忽略。相反,XAML代理负责在将控制权传递给MsBuild之前获取源。这些新的VSTS / Azure Devops构建任务现在也获得了基于Git的源代码控制存储库的YAML支持。