我的团队构建了一个基于 .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/