我们在实施Team Foundation Build Server时遇到了性能问题,而且我对如何加快速度的想法已经不多了。我们已经添加了一些PropertyGroup元素来提高几个步骤(SkipClean,SkipLabel,SkipInitializeWorkspace)的性能,但我认为我们需要进行重大的重组才能解决问题。这是我们的设置:
这是我们遇到的基本问题
在过去的几个月里,我们已经放弃了嗜睡并忽略了这个问题,但现在建造时间超过一小时到一个半小时。
我正在考虑学习和切换到Cruise Control以获得更好的控制权。有人不同意吗?
非常感谢任何帮助。谢谢!
答案 0 :(得分:3)
所以这就是我所做的,而且我的构建时间缩短为9分钟。对于我正在编译的项目数量,我很好。
要执行移动,我只是覆盖TFSBuild.proj文件中的CoreDropBuild目标:
<Target Name="CoreDropBuild"
Condition=" '$(SkipDropBuild)'!='true' and '$(IsDesktopBuild)'!='true' "
DependsOnTargets="$(CoreDropBuildDependsOn)" >
<Exec Command="move $(BinariesRoot)\Release d:\BuildOutput\$(BuildNumber)\Release"/>
</Target>
答案 1 :(得分:2)
首先,听起来好像您的所有网络应用都包含在同一个团队项目中。如果这是真的,将它们分成逻辑分组。通常,单个团队项目应包含单个部署模型。
其次,将共享程序集拆分为自己的团队项目。一旦移动,您有几个选择,您可以将源或已编译的DLL分支到需要它们的团队项目。他们可以拥有自己的单元测试,如果您愿意,可以扩展团队构建以自动合并成功测试。
总而言之,您需要简化构建策略。
答案 2 :(得分:1)
您真的需要在每个网络应用中构建所有内容吗?如果共享程序集没有更改,为什么要一遍又一遍地构建它们?
这是一个想法:
现在,除非发生变化,否则构建不应该开始,并且构建将不包括共享程序集。
这里的想法是让共享程序集项目只知道中央文件夹。这将简化复制构建所需的任何构建后操作。
必须管理中央文件夹,以便将所有更改复制到所有引用的Web应用程序。
答案 3 :(得分:0)
根据CruiseControl建议的个人经验 - 记住它是一个持续集成的“框架”。它不能解决您开箱即用的所有问题(组件化构建,触发每个组件更改,序列化构建虽然会使事情变得更好)。它需要一些配置(甚至可能是定制)来获得你想要的东西,所以要准备投入一些时间。当然,如果你的构建时间缩短,你将从长远来看获得巨大回报 - 如果你不能再忽视这个问题,那么值得投入一些时间来研究更好的CI解决方案。
请注意,任何CI工作都只能与您现有的政策一样好。在版本标记,发布,依赖关系,二进制文件的beta版本,归档版本以及当时我们甚至没有考虑过的许多其他问题上,我们有巨大的政策空白。
此外,准备至少投入一些资源来维护这件事。这不是一份全职工作(我喜欢这样做,因为它可以产生持续的流程改进)。我们的定制使我们从第一个产品的2小时单片构建到20多个产品中的400多个组件,在20分钟内在多台机器上并行构建,因此非常值得。