我们的软件分为多个组件。
Msbuild 脚本自动化我们的构建和批处理脚本来调用它。即使我们有微小的变化,我们也会每天构建我们的组件。我们希望转向持续集成,以便每当签入发生时都会触发构建。
我们的 msbuild 脚本是这样编写的,它将为组件构建所有 sln 文件。在持续集成中,我是否只需要构建修改后的 sln?
如果我只构建更改的项目,我是否必须为每个 sln 编写一个 msbuild?
我可以简单地使用 teamcity 中现有的 msbuild 脚本吗?
我们的软件分为多个组件。
Msbuild 脚本自动化我们的构建和批处理脚本来调用它。即使我们有微小的变化,我们也会每天构建我们的组件。我们希望转向持续集成,以便每当签入发生时都会触发构建。
我们的 msbuild 脚本是这样编写的,它将为组件构建所有 sln 文件。在持续集成中,我是否只需要构建修改后的 sln?
如果我只构建更改的项目,我是否必须为每个 sln 编写一个 msbuild?
我可以简单地使用 teamcity 中现有的 msbuild 脚本吗?
我都做过,两者都有优点和缺点:
这是 MSBuild 的默认行为。即使您在 Visual Studio 中构建,它也只会构建已更改的内容(除非您选择“全部重建”)。
在这种情况下,您仅从源代码管理中提取增量更改,但执行完全重建。
这取决于您对快速反馈(速度)的需求与网络和构建代理的资源限制之间的平衡。如果您有大量资源并且想要快速反馈和完整重建的稳健性,您可以构建两次。也许在签入时,进行增量构建,但每晚执行完整的签出和重建。
两者,有点。我们每天进行计划的完整构建,并在白天进行增量构建(门控签入)。
一切都取决于您的构建实际上有多大和多复杂,但是如果您要选择其中一个,则应该朝着完整的方向发展。
无论您的构建粒度是什么,我的偏好都是对整个组件进行完整、干净的构建。如果 CI 循环的构建时间过长,请考虑将该组件分解为依赖于彼此二进制文件的较小部分。在这种情况下,您将构建更改的内容以及依赖于更改的组件的任何其他组件。在 .Net 世界中,我听说 Nuget 在管理这些二进制依赖项方面越来越受欢迎。
在我的CI 疼痛缓解系列的练习 2 中,我更多地谈论了这个策略。