持续集成与持续交付的短板及其应对方法|践行者第53期
- 2024-10-10 14:50:00
- 晓彤 原创
- 276
持续集成(Continuous Integration,CI)与持续交付(Continuous Delivery,CD)是现代软件开发中至关重要的实践,它们旨在提高团队的生产效率、软件质量和交付速度。然而,这些实践也存在一些短板。
本期践行者,我们有幸邀请到独立DevOps咨询师——董越老师,与我们一起聊聊持续集成与持续交付的短板及其应对方法。
一、《践行者》系列直播
《践行者》是一档主打实战落地的访谈栏目,旨在通过对研发实践、项目管理实践践行者的访谈,帮助大家了解到项目管理的实践及其实际应用场景;通过践行者本人的心路历程向大家展示更加生动真实的实践落地过程。
二、持续集成与持续交付的短板及其应对方法
1. 持续集成的短板及应对方法
1)持续集成的定义
“持续集成是一种软件开发实践,即团队的成员频繁地集成他们的工作,通常每个成员每天至少集成一次,这导致每天发生多次集成。每次集成都通过自动化的构建(包括编译、发布、自动化测试)来验证,从而尽快地检测出集成错误。”--Martin Fowler
2)持续集成的价值
• 小批量,减少等待;
• 问题早发现、早修复,代价小;
• 频繁同步,减少冲突。
3)持续集成可能遇到的问题
• 场景1:未完成的特性A导致已完成的特性B无法发布;
• 场景2:未完成的特性A干扰了已完成的特性B的测试;
• 场景3:有问题的特性A难以摘除。
4)如何实现特性隔离?
• 特性分支:为每个特性创建一个单独的分支,避免它们相互干扰;
• 特性开关:使用开关决定一个特性是否显现;
• Keystone Interface:在前端不提供入口,从而隐藏未完成的功能;
• 单一提交:确保每个commit只包含一个特性的代码,简化代码管理和回滚;
• 单一特性:一次只开发一个特性,避免多个特性同时进行导致的混乱。
2. 持续交付的短板及应对方法
1)持续交付的定义
“持续交付是一种软件开发实践,令软件可随时发布上线,为此需要持续地集成软件开发成果,构建可执行程序,并运行自动测试以发现问题,进而把可执行程序逐步推送到越来越像生产环境的各个测试环境中(并测试),以保证它最终可以在生产环境中运行。”--Martin Fowler
2)持续交付的核心机制
持续交付的核心机制是版本晋级机制,即每个版本必须通过一系列自动化测试和验证步骤才能发布。
这个过程包括:构建和测试、环境部署、功能测试和业务验收。在这个过程中,持续交付需要涵盖集成后的更多测试工作,直到软件能够成功发布上线。
3)持续交付可能遇到的问题
• 测试频率受限:如果自动化测试和人工测试耗时长,也难以像持续集成那样频繁开展;
• 版本晋级受阻:部分特性未通过测试或因业务原因不能发布,会拖累其他特性发布;
• 固定成本高:提高发布频率可能导致总成本上升;
• 多微服务兼容难:不同团队的多微服务版本难以协调。
4)特性间如何进一步解耦?
• 特性摘除:有问题特性可从集成分支摘除,如使用 Git 命令或版本控制界面的回退按钮;
• 混合测试:特性先在混合测试环境测,通过后再合到发布分支,避免特性之间的互相等待;
• 逐特性交付:各特性分支都有专属的测试环境,实现特性单独开发、测试和发布。
三、送给大家一句话
董越老师:持续集成、持续交付、持续进步!
四、结尾
感谢董越老师的分享,持续集成和持续交付虽然有很多优点,但也存在短板。通过特性隔离、特性摘除、混合测试、逐特性交付等方法,可以实现特性间的解耦,提高软件研发的效率和质量。
在实际应用中,需要根据项目的具体情况选择合适的方法。同时,我们不能止于持续集成和持续交付,更要持续进步,不断探索和改进软件研发的方法和流程。