热修复(hotfix)——对生产环境关键错误的紧急修复,在常规发布周期之外执行。与计划发布不同,热修复跳过部分QA和测试阶段,以最短时间将修复交付给用户。根据Atlassian Git Workflow Guide,热修复分支从最新的发布标签创建,应用后合并回main和develop分支。Hotfix process包含最少的检查集,足以确保没有回归问题。
要点
热修复——针对应用程序生产版本的紧急补丁,在常规发布之外发布,用于解决关键问题。热修复在数小时内(而非数天)交付给用户,专门用于应用程序不可用、数据丢失或用户安全受到威胁的情况。
热修复的典型场景:特定设备上启动时崩溃(上次发布后的回归)、因授权不当导致个人数据泄露、支付集成故障(收入损失)、违反GDPR/CCPA合规性。所有这些情况在事件分类中均为P0或P1严重级别。计划任务——优化、重构、新界面——绝不以热修复方式进行。
重要规则:热修复包含最少的更改(1-2个文件,10-20行代码)。差异越小,引入新错误的风险越低。如果修复需要更改架构或添加新模块——这不是热修复,而是紧急发布,需要完整的代码审查和QA。
热修复与计划发布的主要区别在于速度、更改量和检查级别。计划发布可能包含数十个功能,经历完整的QA周期(回归+集成+UI测试),从代码冻结到部署需要1-2周。热修复包含一到两个修复,经过加速审查(2个批准而非3个)和最少的冒烟测试。
从Git流程的角度来看,热修复是从发布标签创建的,而不是从develop分支。这确保了热修复只包含解决问题所需的更改,而不会意外捕获develop中未完成的功能。部署后,热修复合并回main和develop(通过cherry-pick或merge)。
| 标准 | 计划发布 | 热修复 |
|---|---|---|
| 范围 | 多个功能和错误修复 | 1-2个关键修复 |
| 分支 | 从develop创建的发布分支 | 从发布标签创建的热修复分支 |
| 代码审查 | 3个批准,完整流程 | 2个批准,快速通道 |
| QA | 完整回归套件 | 冒烟测试+受影响区域 |
| 部署时间 | 1-4周 | 1-24小时 |
| 回滚 | 通过revert提交 | 通过重建上一个标签 |
重要提示:并非每个紧急任务都是热修复。如果经理说“急需添加一个按钮”——这不是热修复,而是优先级变更。真正的热修复由对用户的严重性决定,而非业务紧迫性。标准:如果应用程序没有崩溃且数据没有泄露,任务应等待计划发布。
检测到关键问题的第一步是triage——快速评估严重性。值班开发人员确认错误,检查日志和崩溃报告,确定问题是上次发布的回归还是长期存在的错误。如果严重性为P0——启动热修复流水线。Triage阶段不应超过15分钟。
第二步——从最新发布标签创建分支(v2.5.0 → hotfix/v2.5.1)。开发人员进行最小修复,提交时添加HOTFIX前缀,推送并打开带有[HOTFIX]标记的PR。快速通道代码审查:通过CODEOWNERS自动分配两名审查者,审查时间不超过30分钟。如果20分钟后没有更改——跳过当前审查者,分配下一个。
第三步——通过CI/CD进行构建和部署。热修复流水线与常规不同:跳过耗时的集成测试(耗时数小时),仅运行冒烟测试套件(10-15个关键场景,5-10分钟)。部署后监控:崩溃率、错误率、API延迟——在30分钟内。热修复的DORA指标:恢复时间(MTTR)应少于1小时。
# .github/workflows/hotfix-deploy.yml
name: Hotfix Deploy Pipeline
on:
pull_request:
types: [labeled]
branches: [hotfix/*]
jobs:
hotfix-checks:
runs-on: ubuntu-latest
if: contains(github.event.label.name, 'hotfix-critical')
steps:
- uses: actions/checkout@v4
- name: Validate diff size
run: bash .github/scripts/diff-check.sh 30
- name: Build
run: ./gradlew assembleRelease
- name: Smoke test
run: ./gradlew smokeTest
- name: Deploy to staging
run: fastlane deploy_staging
- name: Approve & deploy to production
if: success()
run: fastlane deploy_production
env:
HOTFIX_MODE: true
在此流水线中,关键优化包括:差异检查(不超过30行)、跳过集成测试、冒烟测试成功后自动部署到staging和生产环境。HOTFIX_MODE环境变量在运行时启用额外检查——例如,扩展日志记录以快速诊断问题。
热修复分支的工作策略在Gitflow Workflow中有描述。基本规则:热修复分支从最新的发布标签创建(git checkout -b hotfix/v2.5.1 tags/v2.5.0),而不是从develop或main。这确保了热修复基于当前生产环境的相同代码状态,不会捕获develop中未完成的更改。
修复完成后,热修复分支合并到main(或master)和develop。对于main——常规merge提交,带有新的补丁版本标签(v2.5.1)。对于develop——合并或cherry-pick,取决于团队策略。如果develop包含比main更多的更改,建议cherry-pick热修复的特定提交以避免冲突。GitFlow建议先将热修复合并到main,然后将main合并到develop。
# 从最新的发布标签创建热修复分支
git checkout -b hotfix/v2.5.1 tags/v2.5.0
# 应用修复
git commit -m "HOTFIX: Fix crash on Android 14 notification permission"
# 合并到主分支并标记发布
git checkout main
git merge --no-ff hotfix/v2.5.1
git tag -a v2.5.1 -m "Hotfix release v2.5.1"
# 也合并到开发分支
git checkout develop
git merge --no-ff hotfix/v2.5.1
# 清理临时分支
git branch -d hotfix/v2.5.1
重要提示:如果热修复修复的是当前develop分支中存在的错误(错误是在几个sprint前引入的),那么在将热修复合并到main和develop后,develop已经包含修复。如果错误仅存在于发布分支中(通过cherry-pick累积了错误),则develop可能不需要修复。根因分析有助于确定是否需要在develop中进行cherry-pick。
热修复的主要风险——由于匆忙而引入新的、更严重的错误。根据Stripe(2021)的研究,15%的热修复会导致回归并需要第二次热修复。这就是墨菲定律:修复得越快,出错的可能性就越高。风险最小化通过严格限制差异大小(不超过30行)和强制性自动冒烟测试来实现。
第二个风险——技术债务的积累。如果团队定期使用热修复而非计划发布,代码库将退化:热修复提交不会经过重构,临时解决方案不会被正确替换,文档不会更新。健康检查:如果热修复发布频率超过每月一次——发布流程需要重新审视。
第三个风险——心理因素。频繁的热修复会使团队疲惫不堪:值班开发人员持续处于压力之下,代码审查流于形式(所有人都想尽快完成),质量文化下降。成熟团队正常的热修复频率为每季度1-2次。如果更多——问题不在于热修复本身,而在于计划发布的质量。
热修复部署和指标稳定后,进行事后总结(无指责回顾)。团队回答四个问题:发生了什么,为什么检查没有发现错误,做了哪些修复,如何防止再次发生。事后总结在热修复后24-48小时内进行,趁细节记忆犹新。无指责文化——关键原则:讨论流程,而非个人。
事后总结的结果是具体的行动项,附带责任人和截止日期。典型的行动项包括:为遗漏的用例添加单元测试、扩展冒烟测试套件、改进监控(为指标添加告警)、更新类似事件的runbook。行动项必须在下一个计划发布之前完成。
常见问题
不完全一样。补丁发布是按常规计划交付的小修复集合。热修复是计划外的紧急修复。补丁发布经过完整的QA周期,热修复则经过简化的周期。但技术上两者都可以使用补丁版本号提升(v2.5.0 → v2.5.1)。
不可以,热修复始终在Git中记录以实现可追溯性。例外情况是配置层面的紧急修复(功能开关、远程配置),不需要更改代码。每个热修复都必须关联一个带有清晰信息的提交,并在事件工单中引用。
对于iOS,通过App Review的热修复需要1-24小时(可以申请加急审核)。对于Android——通过Google Play Console需要1-4小时。部署时间取决于应用商店的政策以及是否有紧急审核流程。
由值班工程师根据严重性标准决定。如果严重性为P0——热修复无需额外审批即可启动。P1——需要技术主管批准。团队授权:值班工程师有权启动热修复,无需经过繁琐流程。
对于成熟团队——每季度1-2次热修复。频率超过每月一次表明QA流程、测试覆盖率或发布策略存在问题。正常频率热修复是开发流程质量的KPI。
总结
我们将开发一款交钥匙移动应用程序
IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。