持续集成技术:为什么它能根治互联网人最头疼的上线噩梦
持续集成技术到底解决了什么烂摊子?
在上世纪那个软件还是按版本交付的年代,几十上百个开发同时改一套代码,最后合并的时候,冲突堆成山,改个一周太正常了。 有时候冲突太多,直接把分支搞坏,半个月的开发进度直接打水漂。说出来你可能不信,早年很多项目就是死在集成这一步。
持续集成技术的核心说穿了一点都不玄乎:不要把问题攒到最后算总账。开发者每提交一次代码,就自动合并到主干,自动跑一遍构建、测试,有问题立刻发现,立刻改,不用等几个月大家合代码的时候一起爆雷。
传统软件开发合并代码冲突记录截图
很多人刚接触这个概念的时候会说,不就是频繁合并代码吗?我天天合也没怎么样啊。 不对。你自己合完自己测,和自动全量测,完全是两码事。 你改了支付模块的一行代码,你只测了支付,你不知道你改的这个接口,刚好动了推荐模块的依赖,推荐模块的开发三天后才发现,那时候谁还记得自己改了啥? 持续集成就是把所有环节自动化,只要你合进来,所有依赖它都给你测一遍,出了错直接弹回给你,一分钟就能定位到是哪次提交出的问题。省多少事?
2024年的持续集成技术,早就不是你认识的样子了
早几年说持续集成,就是搭个Jenkins跑脚本,跑一次半小时,慢的要死,大家还都忍了。 现在呢?技术迭代快到离谱。 云原生加持下,现在的CI都改成容器化按需创建了,不用等资源,起个环境十秒钟,跑完直接销毁,资源利用率翻好几倍,成本还降了。 更绝的是现在AI都嵌进去了,智能测试用例筛选,你改了哪部分代码,它就只跑相关的测试用例,原来全量跑要40分钟,现在七八分钟就能出结果,程序员不用对着CI进度条发呆,效率提升不是一点半点。
云原生持续集成流水线运行界面
说实话,现在很多小团队还觉得持续集成是大厂的奢侈品,真不是。现在GitHub Actions、Gitlab CI,免费额度够小团队用一年,搭个基础流水线,复制粘贴改几个参数,十分钟就能搞定。 你改完代码提交,自动跑测试,自动打包,自动发预览环境,测试不用等开发出包,打开链接就能测,这不香吗?
去年我帮一个朋友的五人小团队搭了基础持续集成,原来他们每次上线要两个小时核对版本,现在上线点一下就行,半个月就少熬了三次通宵,他们老板非要请我吃饭,就这点事,你说值不值?
落地持续集成技术,最容易踩的三个坑
落地持续集成技术,最容易踩的三个坑
第一个坑,上来就搞大而全。 刚上就要把单元测试、集成测试、安全扫描、性能测试全塞进流水线,结果跑一次快一小时,程序员改完代码要等一小时才能合,谁愿意等?最后大家都偷偷绕开,CI变成摆在那看的摆设,不到半年就荒废了。 我见过太多团队为了落地DevOps,花几十万买商业工具,最后使用率不到10%,钱全打了水漂,说出去都好笑。
第二个坑,规则留口子。 明文规定合主干必须过CI,结果一到赶版本,领导就说这次先过,下次再说,有人直接强制绕过规则合并,规则成了纸老虎。 一次两次之后,大家都知道规则可以绕,CI自然就没人当回事了,本来就是防错的机制,你自己给它开个后门,那不如不做。
第三个坑,做完就不管了。 CI脚本写好,流水线搭完,就再也没人维护了。依赖版本升级了,运行环境变了,接口地址换了,CI天天红,没人改,久而久之大家都习惯了CI红,真出了问题也看不见,等于白做。
其实落地真的没那么难,从核心模块开始,先搭个能跑单元测试的基础流水线,两三分钟就能出结果,大家用着舒服了,再一点点加规则加环节,慢慢来比一口吃成胖子靠谱太多。
不过话说回来,技术永远是服务于人的,持续集成也不是什么银弹,它解决不了需求乱改的问题,也解决不了代码写的烂的问题。但它能把你从合并冲突、上线炸锅的烂事里解放出来,让你能把时间花在真正该做的事上。 越早发现问题,解决问题的成本就越低,这个道理,不止写代码,放哪都对。