build - 持续构建和交付仅更改的组件

标签 build msbuild continuous-integration teamcity

我的团队构建了一个基于 .NET 的软件和几个其他组件。目前使用 TeamCity 进行持续集成,MSBuild 用于简单地编译 .sln 文件(加上一些其他小任务,例如单元测试)。

我们的源代码控制以某种方式构建,使得 repo 包含许多小型“插件”项目,这些项目在一次提交后得到编译。

这使得仅仅构建更改的组件变得困难,而且也难以仅交付那些稍后作为构建工件的组件。

将构建目标设置为“Build”而不是“Rebuild”等解决方案可能会有所帮助,但它似乎有点太脆弱了,尤其是在处理分布式构建环境时,构建可能会在任意数量的构建中进行“代理”,即使是那些没有先前编译输出的代理。

我想知道解决这种情况的正确方法是什么?显然,这是一个已知问题,可能已经被许多人处理过。

我们希望构建和交付(每个构建)一组由当前构建(通过代码 checkin )修改的 DLL/组件。

我们可以实现哪些技术来实现这一目标?

最佳答案

这被称为增量构建,长期以来一直是 SCM 流程的一部分。 您的 Nant/msbuild 脚本应该能够从 CLI 执行增量构建和完整构建,否则它不被称为您的发布过程的完整独立build设置。

将这些脚本连接到 CIE,例如 buildforge、jenkins、cnuisecontrol 等。

实现这一点的最好方法是在 Nant/Ant/msbuild 中使用一个开关,这样当您运行增量构建时,它不会删除旧的二进制文件,而是只编译最新的更改以创建仅代码更改相关的二进制文件.

RTC Enterprise build 确实有一个功能,可以在成功编译后构建您的本地工作空间后,将其发布到您的流/分支,包括增量构建和完整构建。

但我建议我们使用构建脚本来实现这一点,而不是尝试通过 CIE 工具来实现,这样开发利益相关者就可以完全控制他们的构建和打包逻辑,并消除对构建工程师(第三方独立实体)的依赖谁不了解应用程序编译逻辑,并且会从错误构建、人为错误等大多数固有问题中节省大量时间。

关于build - 持续构建和交付仅更改的组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13503009/

相关文章:

gradle - 如何在外部文件中定义函数?

python - 由于 g++ 编译器错误,NS-3 构建失败

continuous-integration - CruiseControl.Net:如何清除过时的 build 历史?

ios - iOS机器人错误:过早退出系统,操作从未完成引导-

continuous-integration - 如何使用 Github Action 配置工作服?

java - 清理并构建,但我的音频文件消失了

go - http.ServeFile 获取不到静态源,但是命令运行可以获取

msbuild - 如何从 assemblyInfo.cs 读取程序集版本?

silverlight - 如何使用 Microsoft.Build.BuildEngine 构建 Silverlight 项目?

c# - SonarQube 不检测 cs 代码中的重复