文章摘要
微软.NET团队反思了现有的构建和发布流程,发现随着版本迭代加快和需求变化,原有系统已无法高效支持多版本并行开发和紧急修复。团队意识到需要重新设计工程系统以适应更灵活的开发节奏和跨栈功能开发。
文章总结
.NET构建与交付方式的革新:统一构建项目
背景与挑战
2015-2016年,.NET从闭源的.NET Framework和Silverlight转型为开源项目,初期采用多仓库分布式开发模式(如CoreCLR、CoreFX等独立仓库)。虽然这种模式支持团队自治和渐进式更新,但随着产品复杂度增加(如ASP.NET Core、WindowsDesktop等组件加入),构建和交付效率问题凸显:
- 协调成本高:安全补丁等关键更新需跨团队同步,依赖流(dependency flow)耗时长达36小时以上。
- 构建开销大:38.5%的构建时间消耗在非生产性任务(如排队、克隆仓库)。
- 复杂度失控:依赖图包含数百个节点,维护和验证成本激增。
解决方案:统一构建(Unified Build)
受Linux发行版Source Build(单仓库离线构建)启发,.NET团队推出统一构建项目,核心改进包括:
虚拟单体仓库(VMR)
- 将所有组件代码整合到dotnet/dotnet仓库,保持提交一致性。
- 保留开发者原有仓库工作流,同时支持跨组件修改。
垂直构建(Vertical Build)
- 按目标平台(如Windows x64、Linux arm64)划分35-40个“垂直构建单元”,单机完成全栈构建。
- 减少跨平台依赖,构建时间从24小时缩短至7小时(签名版本)。
双向代码流(Code Flow)
- 正向流:组件仓库变更自动同步至VMR。
- 反向流:VMR中的跨组件修改回传至原始仓库,避免代码分裂。
场景测试验证
- 新增端到端测试,覆盖核心功能,确保构建产物质量。
成果与收益
- 灵活性:紧急补丁可快速集成,无需等待依赖流同步。
- 效率提升:构建速度提高70%,验证频率达每日3次。
- 维护简化:Linux发行版构建维护成本降低,100%满足开源合规要求。
未来方向
- AI辅助:通过智能代理监控代码流,自动诊断构建问题。
- 消除剩余连接点:进一步优化跨平台构建,目标实现4小时内完成全量构建。
总结
统一构建项目通过单体化仓库和垂直构建,解决了分布式模型的复杂度和开销问题,显著提升了.NET的交付速度和可靠性。这一变革不仅服务于微软内部,也为开源社区贡献了可复用的基础设施经验。
(注:详细代码流算法将另文发布,敬请关注。)
作者:Matt Mitchell(.NET基础设施团队首席工程师)
评论总结
以下是评论内容的总结,平衡呈现不同观点:
对.NET团队的赞赏
- 认为.NET团队在性能优化和开源跨平台方面表现出色(评论5:"They often publish great in-depth articles and their pursuit for performance is relentless")
- 特别提到ASP.NET成功处理重大变更(评论5:"ASP.NET is one of the few large projects which managed to survive a large breaking changes")
- 对微软投入资源改进技术栈表示肯定(评论4:"this is how it's done!";评论5:"Feels good to have 3 trillion dollars interested in improving the stack")
技术选型讨论
- 认为.NET是Node流行之前后端开发的可靠选择(评论2:".NET was a solid choice for backend builds before Node became so popular")
- 指出.NET性能优于Node(评论2:".NET is generally more performant than Node")
- 对Node生态供应链攻击表示担忧(评论2:"after the recent supply chain attacks on the Node ecosystem")
对系统复杂性的思考
- 质疑过多版本变体的必要性(评论3:"Why so many variants?")
- 指出过度抽象可能导致问题(评论7:"this mentality of high level, abstract organization is the root of the problem")
- 建议自下而上的解决方案可能更有效(评论7:"bottom up approach could even eradicate myriads of issues")
开源跨平台的积极影响
- 强调Linux发行版构建系统的基础作用(评论6:"the foundation for this effort was the linux distro build system")
- 认为开源使所有人受益(评论6:"made everyone's lives easier")
对工程努力的认可
- 对协调一致的改进工作表示欣赏(评论4:"a coordinated effort to actually and effectively make things better")
- 认为这是软件工程的优秀范例(评论1:"Must have been an amazing effort";评论4:"this is worth reading")