c# - 改进 CI 构建时间 (.NET)

我们正在开发使用 TeamCity 作为 CI 服务器的应用程序框架 +“插件”。

项目详情

  1. 4 个 Visual Studio 解决方案
  2. ~70 个项目(并且还在增加)
  3. 目前使用 TeamCity 运行 2 个构建:CI 和 FULL 构建。

CI - 在每次提交时触发。

FULL - 每晚运行。

我想提高两个构建的性能(尤其是 CI 构建,因为它需要尽快提供输出)。

对于可以有效且轻松改进的方面是否有一般性指导?

构建过程只是构建一个 .sln 文件并运行一些单元测试。

考虑的方向:

  • MSBuild 并行化
  • 覆盖 CopyFilesToLocal

不确定这些是否适用/是否会带来性能提升。

我正在寻找更多方法来缩短构建时间(大约需要 3-4 分钟)。

最佳答案

尽量减少 ci 构建的工作量。

  • 设置工作区,隐藏所有不需要的文件夹,以尽量减少需要从源代码管理中获取的文件数量。如有必要,重新组织您的源结构,以便通过隐藏功能轻松将整个数据文件夹从构建中剔除。

  • 确保 ci 构建使用增量获取和增量构建。

  • 只构建您需要的解决方案/项目。如果您的库只是不经常更改,您可以预编译它们并将二进制文件检查到源代码控制中吗?如果一个项目当前没有被积极开发,请不要费心在 ci 构建中构建它。

  • 您是否需要为每次 checkin 运行单元测试?我们只运行一个简单的 ci 代码构建,一个单独的测试构建作为 ci 运行,但频率不超过每小时一次。这减少了我们的 ci 构建时间,但如果我们破坏了任何单元测试,仍然可以在一小时内让我们知道。

  • 同样,不要构建文档、混淆、构建安装程序、使用证书签署程序集等,并禁用任何将输出复制到放置文件夹的构建过程。 CI 构建会告诉您是否尽快破坏了构建,您不必关心生成有用的二进制输出。

  • 总体优化构建 - 将项目合并在一起,使用多线程构建,使用多个构建代理,因此 ci 构建不必等待其他构建类型完成。仅在一夜之间进行完整构建,因此您的构建服务器在您工作时专用于 ci。保持源文件整洁(删除未使用的代码而不是仅仅将其注释掉,删除未使用的 usings/includes 等)

  • 投资于更好的构建服务器硬件。如果您没有顶级规范的机器,请将更多 RAM 和 SSD 放入其中以降低速度。确保您的构建服务器专用于 ci 构建,并且没有用于任何可能减慢它的速度。确保构建服务器和 tfs 服务器之间的网络是千兆的。确保您的服务器上没有运行任何防病毒软件,或者至少确保它的计划扫描在夜间运行,并且您的构建文件夹在实时扫描排除列表中。

  • 如果 ci 构建失败,请使用 tfs checkin 策略阻止开发人员 checkin ,以便您立即停止并修复损坏。

https://stackoverflow.com/questions/8633313/

相关文章:

build - Jenkins/Hudson 中有哪些属性可用于构建配置?

android - 在 iOS 中,我们在 Android 上是否有类似 Gradle Build

android - 在 Eclipse 中构建多个(测试/生产)版本的 Android APK

java - Eclipse ADT appcompat... 它是什么?

javascript - 与 webpack/browserify 捆绑时如何排除代码路径?

build - 是否可以将 Jenkins 自由式作业转换为多配置作业?

c# - Visual Studio 开始构建前的漫长等待

c++ - 如何使用语言支持等进行 "light"构建的 GCC 修剪?

visual-studio - VS中平台和平台目标的区别

visual-studio-2010 - Visual Studio 未知生成错误。完全限定名称必须