如何在不阻止热修复的情况下强制执行策略

发布: (2025年12月26日 GMT+8 14:05)
4 分钟阅读
原文: Dev.to

Source: Dev.to

Cover image for How to Enforce Policies Without Blocking Hotfixes

热修复的本质

  • 紧急 – 生产已经受到影响。
  • 小幅 – 目标是止血,而不是重新设计系统。
  • 高风险 – 它们在压力下触及实时系统。
  • 高影响 – 即使是一行代码的更改也可能影响成千上万甚至数百万用户。

许多团队仍然对拥有数周背景的大型功能 PR 以及在事故期间凌晨 2 点的 一行生产修复 使用相同的规则。这种不匹配会产生摩擦,最终导致政策违规。

“跳过检查标签” 反模式

大多数组织都有这种痛感,因而采用一种常见的变通办法:引入手动标签,如 skip-ciemergencyhotfix,以禁用必需的检查。这些标签通常是未记录的约定,仅为高级工程师所知。

表面上看,这似乎加快了速度。实际上,它是对政策的悄然侵蚀。

当跳过检查成为常态时:

  • 责任感下降
  • 审计变得困难
  • 安全团队失去对 CI 信号的信任
  • “紧急”变成一种习惯,而非例外

问题不在于对速度的渴求,而在于标签移除了防护栏,而不是对其进行重新塑造。

两阶段流水线检查

现代工程系统依赖基于 Git 的工作流,即使是热修复也通过受必需检查保护的拉取请求(PR)进行。为避免阻塞紧急修复,许多组织将验证拆分为两个有意的阶段:

合并前检查

快速、轻量的检查,验证更改不会立即导致测试失败或违反基本政策。

检入前检查

合并前检查通过后,开发者即可进行检入前检查。成功的检入前检查会自动合并 PR,消除人工延迟,同时仍确保每个热修复遵循受控且可审计的路径。

在大多数公司,合并更改需要同时通过 合并前检查检入前检查。对于热修复,可以使用 规则集分支保护规则 使合并前检查更可靠。

优秀热修复规则集的示例

  • 仍然需要拉取请求(禁止直接推送)
  • 更少且更快的必需检查(单元测试、冒烟测试、机密扫描)
  • 需要批准,但仅限于值班人员/发布负责人
  • 仍然阻止强制推送
  • 仅允许极少数人绕过,并且始终记录日志
Back to Blog

相关文章

阅读更多 »