智汇 IT
城启新篇

蹲在发布现场摸透DevOps流水线中的质量门禁

上周帮朋友排查他们团队的流水线卡了三个小时的问题,最后发现是质量门禁配错了——本来单元测试覆盖率到60%就放行,结果脚本里写的是覆盖率低于90%直接中断,一个刚上线的老项目,历史代码覆盖率才32%,直接把整个发布堵死了。

这事说出来可笑。十家做DevOps的团队里,有八家都在质量门禁上踩过同款坑。

门禁不是越严越好

很多团队一上来就把门禁配得巨严,什么代码重复率低于3%,安全漏洞零容忍,测试用例通过率100%,覆盖率必须到80%以上,听起来特别完美对吧?但实际跑起来,要么就是开发天天绕开门禁,要么就是流水线动不动就卡半天,没人敢碰。

说白了,质量门禁本质是个过滤器,不是拦路虎。你要拦的是会把生产搞炸的问题,不是拦着开发不让干活。之前跟一个做电商的团队聊,他们刚上门禁的时候,把所有安全扫描的结果都拦在流水线里,有次扫出来一个前端依赖的低危漏洞,根本不影响交易流程,直接卡了发布。那天刚好赶上618前的最后一次版本迭代,全团队熬到凌晨两点,就为了等那个扫描工具的误报。

门禁的阈值设置,永远是“当前阶段能接受的最差底线”,不是理想中的满分标准。

DevOps流水线质量门禁阈值配置界面截图
DevOps流水线质量门禁阈值配置界面截图

很多人对质量门禁的误解,就是把它当成一个自动的“守门员”,只要配好规则就万事大吉。麻烦在于,规则是死的,业务是活的。比如你给一个内部工具的项目,配和核心支付链路一样的门禁标准,那不是给自己找事吗?内部工具可能三个月才发一次版,出了问题也就是几个行政同事填不了报销单,根本没必要上静态安全扫描、全量回归测试那一套。

别把门禁做成黑盒

很多团队的质量门禁,是运维或者平台组的人关起门来配的,开发根本不知道卡在哪了。上次碰到个开发,提交代码之后等了四十分钟,流水线显示“质量检查未通过”,点进去啥日志没有,啥提示没有,找平台组的人查,查了半小时才发现是代码里多写了个console.log,触发了代码规范的拦截规则。

这就很离谱。所有门禁触发的拦截,必须给开发明确的、可落地的修改提示,不能只丢一句“检查不通过”就完事。你要是卡了覆盖率,就得告诉开发哪个文件的覆盖率不够;你要是卡了安全漏洞,就得告诉开发是哪个依赖包有问题,升级到哪个版本能解决;你要是卡了性能阈值,就得告诉开发哪个接口的响应时间超了多少。

不然开发除了骂平台组,根本不会想着真的去改代码,只会到处找后门绕开门禁。之前有个团队做的特别好,他们的门禁触发拦截之后,直接在通知里附了可以一键修复的链接:比如代码规范问题,点一下就自动跑格式化脚本;比如依赖漏洞,点一下就自动升级到兼容的安全版本;比如覆盖率不够,点一下就能直接跳转到对应的未覆盖的测试行。就这么个小改动,他们团队的流水线拦截后的平均修复时间,从之前的两个小时降到了十二分钟。

流水线质量门禁拦截后给开发的提示界面示例
流水线质量门禁拦截后给开发的提示界面示例

真的,很多时候门禁不好用,不是规则不对,是你没把开发当人。你光让他干活,不给他递工具,他当然要跟你对着干。我见过最离谱的团队,流水线的门禁规则里,居然加了“提交的commit message字数必须大于20字”,有个开发赶时间,写了个“fix”,直接被卡了,硬生生把十分钟能搞定的热修复,拖了两个小时——就为了凑那二十个字的commit描述。这种规则有啥用?除了折腾人,半毛钱质量提升都没有。

门禁不是一劳永逸的

很多团队配完门禁之后,就再也不管了。半年前的项目,代码都重构过两回了,门禁的阈值还是刚上DevOps那天拍脑袋定的。之前有个做SaaS的团队,刚搭流水线的时候,项目刚起步,代码量少,他们定的门禁是单元测试覆盖率70%,结果做了两年,代码量翻了十几倍,团队从3个人变成30个人,门禁阈值还是70%。现在每次发版,开发光补测试用例就要花一天时间,真正写业务代码的时间反而少了。

这事没那么玄。质量门禁的规则,要每季度跟着团队的阶段目标调一次,没有放之四海而皆准的固定标准。比如刚起步的小团队,先把最核心的生产事故拦下来就行,覆盖率哪怕只有30%都没关系,先把流水线跑通;等团队规模上来了,再慢慢把阈值往上提;如果是在赶版本的关键节点,甚至可以临时把非核心的门禁规则关掉,别为了几个不影响生产的规则耽误上线时间。

还有个常见的坑,就是很多团队把所有的检查都堆在流水线的同一个阶段,比如提交代码之后,一下子跑单元测试、静态扫描、安全扫描、性能测试、全量回归,一次跑四十分钟,开发提交个代码,等半天才能看到结果,那谁受得了?正确的做法是把门禁拆成层级:代码刚提交的时候,先跑最快的代码规范检查、单元测试,有问题马上反馈,五分钟以内出结果;等代码合并到主干了,再跑静态扫描、安全漏洞检查;等预发环境部署完了,再跑全量回归、性能测试。这样开发不用等太久,也不会把所有问题都堆到最后才发现。

其实说穿了,DevOps流水线中的质量门禁,从来不是什么高大上的技术架构。它就是帮团队省点麻烦,别让本来不该出现在生产环境的问题,顺顺当当流到用户面前。你要是把它做成了团队的对立面,再完美的规则,最后都会被人绕得一干二净。

免责声明:市场有风险,选择需谨慎!此文仅供参考,不作买卖依据。如有侵权请联系删除。
文章名称:蹲在发布现场摸透DevOps流水线中的质量门禁
文章链接:https://www.itcdj.com/it/374.html