紧急补丁需绕过全量ci但保留关键检查:用hotfix/分支跳过e2e、只跑相关单元测试;构建须统一环境+固定依赖;验证需真实链路+生产配置;合并后须规范标注部署信息并保留原始提交。

补丁必须绕过完整 CI 流程,但不能跳过关键检查
线上出问题要秒级修复,等全量 CI 跑完 15 分钟?不行。但直接 git push --force 到生产分支或跳过单元测试,等于给线上埋雷。
实操建议:
立即学习“Python免费学习笔记(深入)”;
- 保留
pre-commit钩子中的black、isort和pylint基础检查(不跑耗时的集成测试) - 用临时分支命名规范,比如
hotfix/user-login-500-20240412,CI 系统识别到hotfix/前缀后自动跳过test_e2e,但强制运行test_unit_auth(只跑与该补丁强相关的模块) - 禁止在补丁中修改非相关文件——CI 可加脚本校验:
git diff --name-only origin/main...HEAD | grep -v '^auth/' && echo "ERROR: non-auth files modified" && exit 1
补丁包必须可回滚,且不能依赖本地构建环境
紧急发布最怕“修一个 bug 引出三个”,而回滚失败往往是因为打包环境不一致:开发机装了 cython==3.0.9,线上是 3.0.7,二进制 wheel 直接 import 失败。
实操建议:
立即学习“Python免费学习笔记(深入)”;
- 所有 hotfix 必须走统一构建节点,用 pinned 的
requirements.txt(含hashes),禁用pip install -r requirements.txt --no-deps这类模糊操作 - 补丁包名强制带 hash,例如
myapp-hotfix-20240412-8a3f2c1.whl,部署脚本通过pip install --force-reinstall --no-deps myapp-hotfix-20240412-8a3f2c1.whl安装,回滚只需重装上一版同名包 - 禁止在补丁里新增
setup.py或修改pyproject.toml中的构建配置——这些改动必须走常规发布流程
上线前必须做最小路径验证,不是“能跑就行”
python -c "import mymodule; print(mymodule.fix_login_bug())" 输出 True 就敢推?线上调用链可能经过 Celery、gRPC、API 网关三层转发,单模块 import 成功毫无意义。
实操建议:
立即学习“Python免费学习笔记(深入)”;
- 验证脚本必须模拟真实入口:比如补丁修的是登录接口,就用
curl -X POST http://localhost:8000/api/v1/login -d '{"user":"test","pwd":"123"}',且检查响应头X-Trace-ID是否存在、状态码是否为200、返回 JSON 里"token"字段是否非空 - 验证必须在和线上一致的配置下运行:加载
config.production.yaml,连接真实 Redis 实例(但用独立 db,如db: 15),避免 mock 掩盖配置缺失问题 - 禁止在验证阶段改日志级别(比如临时加
logging.basicConfig(level=DEBUG))——这会干扰线上日志采集规则,导致告警失效
补丁合并后,原 issue 必须标记 “hotfix-applied”,并附部署时间戳
很多人 merge 完就切走,结果两天后另一个同学在相同位置又提了个 PR,因为没看到已有修复;或者 SRE 查故障时翻 commit log,发现 fix login 500 没写任何上下文,不敢确认是否真覆盖了当时的现象。
实操建议:
立即学习“Python免费学习笔记(深入)”;
- GitHub/GitLab PR 描述第一行必须是:
hotfix: [ISSUE-123] fix login 500 on expired token (deployed 2024-04-12T14:22Z) - 合并后立即在对应 issue 里评论:
@team deployed to prod-v3.2.1 at 2024-04-12T14:22Z, confirmed via /api/v1/login smoke test - 禁止把 hotfix 提交 rebase 到 main 后 squash —— 时间戳和原始 author 信息必须保留在 git history 里,这是事后审计唯一可信依据
补丁发布不是“代码改完就结束”,真正难的是让所有人——包括三天后的自己——一眼看懂这个变更动了什么、怎么验证、什么时候生效、出了问题往哪回。漏掉任意一环,紧急发布就变成紧急救火。










