Build 只生成已更改的项还是全部生成,在持续集成中首选哪一种?
我们的软件分为多个组件 Msbuild脚本自动生成和批处理脚本以调用它。 我们每天都在构建我们的组件,即使我们有一些小的变化。 我们希望转向持续集成,这样每当签入时,就会触发构建 我们的msbuild脚本是这样编写的,它将为组件构建所有sln文件。 在持续集成中,我是否只需要构建经过修改的SLN 如果只生成更改的项,是否必须为每个sln编写msbuildBuild 只生成已更改的项还是全部生成,在持续集成中首选哪一种?,build,msbuild,continuous-integration,build-process,teamcity,Build,Msbuild,Continuous Integration,Build Process,Teamcity,我们的软件分为多个组件 Msbuild脚本自动生成和批处理脚本以调用它。 我们每天都在构建我们的组件,即使我们有一些小的变化。 我们希望转向持续集成,这样每当签入时,就会触发构建 我们的msbuild脚本是这样编写的,它将为组件构建所有sln文件。 在持续集成中,我是否只需要构建经过修改的SLN 如果只生成更改的项,是否必须为每个sln编写msbuild 我可以简单地使用teamcity中现有的msbuild脚本吗?无论构建的粒度如何,我的偏好是对整个组件进行完整、干净的构建。如果CI循环的构建
我可以简单地使用teamcity中现有的msbuild脚本吗?无论构建的粒度如何,我的偏好是对整个组件进行完整、干净的构建。如果CI循环的构建时间过长,请考虑将该组件分解为依赖于彼此的二进制文件的较小部分。在这种情况下,您将构建更改的组件以及依赖于更改的组件的任何其他组件。在.Net世界中,我听说Nuget在管理这些二进制依赖项方面越来越流行
我在我的第二次练习中更多地讨论了这个策略 无论构建的粒度如何,我的偏好是对整个组件进行完整、干净的构建。如果CI循环的构建时间过长,请考虑将该组件分解为依赖于彼此的二进制文件的较小部分。在这种情况下,您将构建更改的组件以及依赖于更改的组件的任何其他组件。在.Net世界中,我听说Nuget在管理这些二进制依赖项方面越来越流行 我在我的第二次练习中更多地讨论了这个策略 两者都有。 我们每天进行计划的完整构建,每天进行增量构建(门控签入) 这一切都取决于你的构建到底有多大和复杂,但如果你选择其中一个或另一个,你就应该朝着完整的方向走。 我们每天进行计划的完整构建,每天进行增量构建(门控签入)
这一切都取决于你的构建有多大和复杂,但如果你选择其中一个,你就应该走向完整。我两者都做过,两者都有优点和缺点: 增量构建(仅更改的内容) 这是MSBuild的默认行为。即使在VisualStudio中构建,它也只构建更改的内容(除非选择“全部重建”) 赞成的意见
- 越快反馈越快越好
- 构建服务器磁盘和网络上的负载更少,因为您不必每次都检查源代码管理之外的所有内容。这在高负载构建集群中可能很重要
- 可能的源代码管理问题我们遇到了一些问题,源代码树的复杂重命名或重组导致签出失败。我们使用的是subversion,所以更新失败了。如果我们一直在进行干净的签出,这就不会发生(当然,干净的签出意味着我们必须进行完整的重建)
- 误报的可能性。我们遇到了一个案例,我们没有完全擦除生成代理的源文件并从源文件中签出新副本。有人更改了构建文件,使得它在测试二进制文件之前没有正确地复制它们,但是由于旧的二进制文件仍然存在于磁盘上,所以它正在从它们运行测试。这个构建被破坏了,但它正在运行旧的二进制测试,所以直到一周后我发现了这个问题,我们才意识到我们引入了bug
- 更稳健您排除了源代码管理更新问题和误报的可能性,因为您每次都是从一张干净的板书开始的。这将消除以前的生成可能会影响此生成的可能性
- 要慢得多这需要等待源代码的完整签出,如果项目很大,这可能需要很长时间。另外,它需要从头开始构建整个源代码树
- 生成代理、磁盘和网络的负载更高因为您正在签出和重建所有内容,因此会对生成代理的cpu和磁盘以及网络(以及源代码管理系统)产生更大的负担
- 比完全签出快,实际上只比增量构建稍微慢一点。与执行完整签出或运行测试所需的时间相比,构建时间通常很短
- 由于您重建了所有源代码,因此更加健壮,但误报仍然可能潜入
- 可能的源代码管理问题请参阅我对增量构建的评论
- 误报概率请参阅我对增量构建的评论
这取决于您对快速反馈(速度)的需求与网络和构建代理的资源约束之间的平衡。如果您有很多资源,并且想要快速反馈和完整重建的健壮性,那么您可以构建两次。可能在签入时,执行增量生成,但每晚执行完全签出和重新生成。我已经完成了这两项工作,两者都有优点和缺点: 增量构建(仅更改的内容) 这是MSBuild的默认行为。即使在VisualStudio中构建,它也只构建更改的内容(除非选择“全部重建”) 赞成的意见
- 越快你的反馈循环越快,赌注就越大