线上严重缺陷需要紧急修复时,发布流程要比常规发布更短,记录却要更严。可执行的做法是:先确认故障等级与影响范围,从当前线上版本拉出热修复分支做最小改动,经针对性验证与灰度后发布,并全程留存问题单、变更记录、验证证据、发布与回滚记录。把“快”压缩在审批和流转环节,把“可追溯”固定在记录环节,是这条通道的基本设计原则。
要点总览(TL;DR)
- 热修复通道的准入看三个条件:缺陷是否阻断核心业务或造成资金、数据损失,影响面是否较大,是否存在可接受的临时规避手段;三者同时成立再启动。
- 流程主线为问题确认与定级、从线上版本拉热修复分支、最小改动修复、针对性验证与回归、灰度放量、正式发布、回滚预案与事后归档七个阶段。
- 可以压缩的是审批与流转环节,不能省的是问题单与定级依据、分支与提交关联、验证证据、灰度观察数据、发布与回滚记录、复盘结论。
- 回滚触发线要在发布前书面确认,例如核心业务成功率跌破阈值、错误率持续上升超过设定时长或出现新的阻断性缺陷,触发后立即回滚、先恢复业务再分析原因。
- 角色分工提前定到人:值班负责发现与初判,开发负责修复与自测,测试负责验证,发布负责人负责发布与回滚执行,业务方负责影响确认与对外沟通,审批采用预先授权并事后补齐留痕。
热修复通道的核心规则与整体流程
热修复通道解决的是“线上已经出问题、必须尽快恢复”的场景,它的起点是故障确认,终点是记录归档与代码收口。是否走这条通道,先看三个条件:缺陷严重程度是否达到阻断核心业务或造成资金、数据损失;影响面是否覆盖较大比例用户、订单或关键接口;是否存在可接受的临时规避手段。若已有低成本的临时方案(如关闭某个开关、切换备用链路),可以先止损,再评估是否仍需热修复。三个条件同时成立时,启动热修复;只有轻微影响或可通过常规版本解决的问题,回到常规发布节奏处理。
整条流程可以归纳为七个阶段,顺序如下表。表中同时标出哪些环节可以压缩、哪些记录不能省。
| 阶段 | 输入 | 动作 | 输出 | 完成标志 |
|---|---|---|---|---|
| 1. 问题确认与定级 | 监控告警、用户反馈、值班初判 | 复现现象、评估影响范围、确定严重等级、判断是否需要热修复 | 问题单(含定级与影响范围) | 问题单已建、责任人已指定、热修复决定已确认 |
| 2. 建立修复分支 | 线上运行版本号、问题单号 | 从线上版本对应基线拉分支,按命名规则创建 | 热修复分支 | 分支已关联问题单,基线版本已记录 |
| 3. 最小改动修复 | 问题单、复现步骤 | 定位根因,做最小范围修改,开发自测 | 修复提交、改动说明 | 提交已关联问题单,改动范围经复核 |
| 4. 针对性验证 | 修复分支、验证用例 | 复现用例验证、受影响链路回归、接口与数据校验 | 验证记录与证据 | 验证用例全部通过,证据已附 |
| 5. 灰度放量 | 待发布制品、灰度方案 | 小范围放量,观察错误率、业务成功率、延迟等指标 | 灰度观察记录 | 观察期内指标达标,无新增阻断缺陷 |
| 6. 正式发布 | 灰度结论、发布方案 | 按发布窗口执行全量发布,值守监控 | 发布操作记录 | 发布完成,核心指标稳定 |
| 7. 回滚预案与归档 | 发布记录、验证证据、复盘材料 | 确认回滚方案可用,归档全部记录,完成代码收口 | 归档记录、复盘结论 | 记录齐全,热修复分支已合并主干 |
可以压缩的环节主要是审批与流转:审批由预先授权的值班负责人或发布负责人当场确认,不必层层会签;问题单、分支、验证、发布之间的交接可以在同一个协作空间内完成,减少等待。不能省的记录包括问题单与定级依据、分支与提交的关联、验证证据、灰度观察数据、发布与回滚记录、复盘结论。这些记录既是事后追溯的依据,也是判断本次热修复是否合规的凭证。
热修复与常规发布、产品功能版本规划之间要有清晰边界。热修复只处理线上缺陷,改动范围以恢复业务为限,不承担新功能、不夹带需求变更;修复完成后合并回主干,纳入下一个常规版本统一验证与发布。功能排期、路线图调整属于版本规划范畴,不在热修复通道内处理。
问题确认与修复分支的建立
问题确认阶段的目标是把“感觉出问题了”变成一条可追溯的问题单。定级不能凭印象,要按影响对象和范围填写字段,让后续的审批、验证强度、发布窗口都有依据。建议的问题确认记录字段如下:
- 故障现象:用户看到什么、系统表现是什么,附截图或日志片段。
- 发现时间与发现渠道:监控告警、客服反馈、业务方通知。
- 影响范围:受影响用户数或比例、订单或交易笔数、涉及接口与功能模块。
- 严重等级:按团队既定分级标准填写,并写明定级理由。
- 临时规避手段:是否已启用、效果如何、是否可维持到修复发布。
- 责任人:问题负责人、修复开发、验证测试、发布负责人。
- 关联问题单号与线上版本号:作为拉分支的基线依据。
热修复分支必须从当前线上运行版本对应的代码基线拉出,不能从开发主干或其他人正在开发的分支拉取,否则会把未发布代码带入线上。命名规则建议包含问题单号与基线版本号,例如 hotfix/问题单号-版本号,让分支本身就能说明它服务于哪个问题、基于哪个版本。分支创建后,在问题单中登记分支名与基线提交号,形成双向关联。
改动范围遵循最小可修复原则:只改与缺陷根因直接相关的代码,不做顺手重构、不调整无关配置、不夹带需求变更。若修复过程中发现必须扩大改动,先回到问题单更新说明,由问题负责人确认后再继续。提交信息中引用问题单号,保证从问题单能查到全部提交,从提交能回溯到问题。对于确实无法在热修复中彻底解决的问题,记录为遗留项,转入常规修复排期。
验证、灰度与发布执行
修复完成后的验证要覆盖三类内容:复现原缺陷的用例必须通过,证明问题已解决;受影响核心链路的回归用例必须通过,证明修复没有破坏主流程;与本次改动相关的接口和数据校验必须通过,证明数据读写正确。回归范围取最小集,即本次改动可能波及的模块与依赖,不做全量回归,但最小集要在问题单中写明,便于事后判断验证是否充分。
灰度或分批放量是控制风险的关键一步。放量前确定观察指标与观察时长,指标至少包括错误率、关键业务成功率、接口延迟,观察时长按业务流量周期设定,保证覆盖一个完整的业务高峰。观察期内指标达标且无新增阻断性缺陷,才进入全量发布。灰度期间的值守人要明确,发现异常立即上报,不在灰度环境现场调试。
正式发布要记录发布窗口、发布负责人、值守人、发布操作步骤与执行结果。发布失败的判定条件和回滚触发线必须在发布前写清楚,例如核心业务成功率跌破阈值、错误率持续上升超过设定时长、出现新的阻断性缺陷。触发回滚线后立即执行回滚,先恢复业务,再分析原因,避免在故障现场反复尝试修复。
| 检查项 | 通过条件 | 记录要求 |
|---|---|---|
| 复现用例验证 | 原缺陷不再出现 | 用例编号与执行结果 |
| 核心链路回归 | 受影响链路全部通过 | 回归范围清单与结果 |
| 接口与数据校验 | 读写结果符合预期 | 校验脚本或截图 |
| 灰度观察 | 错误率、成功率、延迟达标 | 观察时段与指标数据 |
| 发布执行 | 全量完成,指标稳定 | 发布窗口、操作人、结果 |
| 回滚触发线 | 发布前已书面确认 | 阈值与判定条件 |
回滚方案与事后记录归档
回滚方案要在发布前写好,不能等出问题再想。必备内容包括:回滚包或回滚版本号,明确回到哪个版本;数据兼容性说明,判断本次改动是否涉及表结构或数据格式变化,回滚后数据能否正常读取;回滚执行人与备份执行人;预计回滚耗时;回滚成功的判定方法,例如核心接口恢复、关键指标回到基线。涉及数据变更的热修复,回滚方案要单独说明数据处理方式,必要时准备数据修复脚本。
有条件时做一次回滚预验证,在预发或隔离环境执行回滚步骤,确认回滚包可用、步骤可执行、耗时符合预期。没有独立环境时,至少在发布前由执行人核对回滚步骤与依赖,记录核对结果。
事后必须归档的记录清单包括:问题单及定级依据、热修复分支与提交记录、改动说明、验证用例与证据、灰度观察数据、发布操作记录、回滚方案与是否触发的记录、复盘结论与后续改进项。归档不是把文件堆在一起,而是保证从问题单出发能串起上述全部记录,任何人接手都能还原这次热修复的完整过程。
收口动作决定热修复是否真正闭环:补上针对该缺陷的自动化测试用例,补充或更新相关文档,将热修复分支合并回主干并纳入下一个常规版本验证。热修复分支长期分叉会积累合并风险,合并完成后按团队规则关闭分支。复盘结论中的改进项要指定负责人和完成时间,避免停留在结论层面。
角色分工与各环节交付物
紧急情况下最容易出现职责真空,角色分工要提前定好,并在每次热修复开始时明确到人。值班或一线负责发现问题和初判,开发负责定位与修复,测试负责验证,发布负责人负责发布与回滚执行,业务方负责影响确认与对外沟通。审批采用预先授权方式:由值班负责人或发布负责人当场确认即可启动,事后在问题单中补齐审批留痕,审批本身不取消。
| 角色 | 主要环节 | 交付物 | 交接时点 |
|---|---|---|---|
| 值班/一线 | 问题发现与初判 | 问题单初稿、影响现象描述 | 问题单建立后移交问题负责人 |
| 开发 | 分支建立、修复、自测 | 热修复分支、提交记录、改动说明 | 自测通过后移交测试 |
| 测试 | 针对性验证与回归 | 验证记录与证据 | 验证通过后移交发布负责人 |
| 发布负责人 | 灰度、发布、回滚执行 | 灰度观察记录、发布记录、回滚记录 | 发布完成后移交复盘组织人 |
| 业务方 | 影响确认与对外沟通 | 影响范围确认、对外说明口径 | 发布前后同步 |
跨团队协作时,信息同步围绕问题单进行:状态变更、验证结论、发布进展都更新到同一处,避免在多个群聊里分散传递。需要其他团队配合时,在问题单中写明配合事项、对接人和期望时间。问题单、分支关联、验证记录与发布记录如果分散在不同工具里,事后追溯成本会很高;在研发管理平台中把问题单、代码提交、验证证据和发布记录关联到同一工作项,可以让热修复过程自然留痕。ONES 支持工作项与代码托管、流水线等研发对象的关联,发布与验证记录可以随工作项状态流转保留,便于复盘时按问题单回溯。具体集成方式以团队实际使用的工具链为准。
示例:一次支付故障的热修复全过程
以下为演示情景,用于说明各阶段记录的实际形态,不代表真实案例。
故障现象与定级。某日 14:20 监控告警显示支付下单接口错误率从 0.2% 升至 18%,客服同步收到用户反馈“支付失败”。值班人员复现后确认:部分渠道的支付请求返回超时,影响约 12% 的下单用户,涉及订单量每小时数百笔。按团队分级标准定为 P1,定级理由为核心交易链路受阻且影响面较大。临时规避手段评估为暂无,决定启动热修复。问题单记录发现时间、影响范围、定级依据、责任人,并关联线上版本号 v3.8.2。
分支拉取与改动内容。开发从 v3.8.2 对应基线拉出分支 hotfix/PAY-1042-v3.8.2,在问题单中登记分支名与基线提交号。定位根因为某渠道回调超时配置取值错误,改动仅涉及一处配置读取逻辑,共修改 6 行代码,提交信息引用问题单号 PAY-1042。复核确认无其他改动夹带。
验证与灰度观察结果。测试执行复现用例,原超时现象消失;回归受影响的下单、支付回调、订单状态同步三条链路,全部通过;接口校验确认回调数据写入正确。灰度阶段先放量 5% 流量,观察 30 分钟,错误率回落至 0.3%,支付成功率恢复至基线水平,延迟无异常;再放量至 30% 观察 30 分钟,指标稳定。验证记录与灰度数据均附在问题单中。
发布、回滚预案与事后归档。发布前确认回滚方案:回滚版本为 v3.8.2,本次改动不涉及表结构,回滚预计耗时 10 分钟,执行人为发布负责人,回滚成功判定为错误率回到 1% 以下。发布窗口选在当日 16:00 低峰前,值守人全程监控。全量发布后指标稳定,未触发回滚。事后归档问题单、分支与提交记录、验证证据、灰度数据、发布记录、复盘结论;补充该配置项的自动化校验用例,分支合并回主干并纳入 v3.8.3 常规版本。
完成检查:热修复流程是否可用的自检项
流程设计层面的检查项用于判断通道是否具备可用性,建议每季度或发生组织调整后核对一次:热修复的触发条件与定级标准是否书面化;是否明确从线上版本拉分支的规则与命名规范;验证最小集与灰度观察指标是否有默认模板;回滚触发线是否要求发布前书面确认;审批授权是否落到具体岗位并保留事后留痕;记录归档是否有统一入口。
单次热修复执行后的记录完整性检查项:问题单是否包含定级依据与影响范围;分支是否关联问题单并记录基线版本;提交是否引用问题单号;验证证据是否齐全;灰度观察数据是否留存;发布与回滚记录是否完整;复盘结论与改进项是否指定负责人和时间。任何一项缺失,都应视为本次热修复记录不完整,需要补齐后再关闭问题单。
常见缺口包括:审批口头确认后未补留痕、灰度观察时长不足、回滚方案只写版本号未写数据兼容说明、热修复分支长期未合并主干。这些情况应设为阻断条件,在问题单关闭前拦截。流程定期复盘的触发条件可设为:发生 P1 及以上故障、触发过回滚、单季度热修复次数明显上升、复盘发现同类问题重复出现。复盘聚焦流程与记录中的实际卡点,输出可执行的改进项,而不是重复既有规定。
常见问题
线上问题已经用开关或备用链路临时止住了,还需要走热修复吗?
临时规避手段生效后,先评估它能否稳定维持到下一个常规版本发布。如果规避手段可靠、影响面可控、根因不涉及数据错误,可以转入常规修复排期,不必启动热修复。如果规避手段只是暂时缓解、存在失效风险,或根因会导致数据持续出错,仍应启动热修复,并在问题单中记录临时手段的启用时间、效果和预计可维持时长,作为后续修复的输入。
热修复过程中发现改动范围必须扩大,怎么处理才不失控?
先停下来回到问题单更新说明,写清扩大改动的原因、涉及模块和新增风险,由问题负责人确认后再继续。扩大范围意味着验证最小集和回滚方案都要同步调整,测试需要补充对应链路的回归用例,回滚方案要重新核对数据兼容性。确实无法在本次热修复中彻底解决的部分,记录为遗留项转入常规修复排期,避免热修复分支越改越大。
灰度观察多久才算够,指标看哪些?
观察时长按业务流量周期设定,至少覆盖一个完整的业务高峰,让低频但关键的场景也能暴露问题。观察指标至少包括错误率、关键业务成功率、接口延迟,必要时补充与本次改动直接相关的业务指标。观察期内指标达标且无新增阻断性缺陷,才进入下一批放量或全量发布;指标出现波动时延长观察或回退放量比例,不在灰度环境现场调试。
热修复分支合并回主干后,还需要做哪些收口动作?
合并回主干只是收口的一部分。还需要补上针对该缺陷的自动化测试用例,防止同类问题再次出现;补充或更新相关文档,让后续维护者了解改动背景;把热修复纳入下一个常规版本的统一验证与发布,确认合并后功能正常;按团队规则关闭热修复分支,避免长期分叉积累合并风险。复盘结论中的改进项要指定负责人和完成时间。
紧急情况下审批能不能直接跳过?
审批可以简化,但不能取消。常见做法是预先授权值班负责人或发布负责人当场确认即可启动,把层层会签压缩为一次确认,事后在问题单中补齐审批留痕,写明确认人、确认时间和确认依据。这样既保证紧急情况下能快速启动,又保留事后追溯的凭证。授权范围和额度需要团队提前书面定义,避免每次临时判断。
