生产发布与回滚流水线
同一份已验证制品从预生产晋级,不在生产服务器重新构建
部署方式可以不同,但安全发布的主线一致:源代码通过质量门后生成不可变制品,在预生产验证,再由有权人员把同一制品晋级到生产。
- 提交与评审: 分支保护、依赖锁定、代码评审和秘密扫描。
- 质量门: 单元、集成、构建、内容、安全与许可证检查。
- 生成制品: 静态目录、压缩包、函数包或容器镜像,记录摘要与来源提交。
- 预生产部署: 使用独立账号、数据和密钥,不与生产共享写入路径。
- 兼容变更: 先执行向后兼容的数据库扩展,再部署新代码。
- 自动验证: 健康、登录、权限、上传、任务、模型降级和关键业务冒烟。
- 人工门禁: 检查变更、风险、回滚、观察指标和中国大陆接入状态。
- 渐进切流: 小流量、单实例或单函数版本开始,观察后扩大。
- 完成与留证: 记录版本、配置、迁移、指标、事件和审批结果。
| 运行方式 | 不可变制品 | 回滚锚点 |
|---|---|---|
静态托管 | 完整构建目录与清单 | 上一版对象前缀或制品包 |
虚拟机 / 轻量服务器 | 应用包或固定 Digest 镜像 | 上一版包、镜像与配置版本 |
函数 | 发布版本及其配置 | 上一函数版本或别名权重 |
Kubernetes | Digest 镜像和版本化清单 | 上一 Deployment / Helm 版本 |
生产制品不能引用会改变含义的浮动标签作为唯一版本,也不能在生产机器执行 git pull 后临时安装未知依赖。
- CI 使用独立部署身份,只能写目标制品库和更新指定服务。
- 如果代码托管平台与云厂商支持工作负载身份或短期令牌,优先避免长期访问密钥。
- 必须使用长期密钥时,限制权限、有效期和使用来源,设置轮换和异常告警。
- 部署日志只记录凭据引用和请求 ID,不输出秘密值、环境变量全集或签名请求。
- 生产审批人与代码提交人按组织风险要求分离。
先增加兼容结构、再迁移数据、最后移除旧结构。破坏性删除应等待旧版本回滚窗口结束。代码回滚不会自动恢复数据,数据库恢复也不应覆盖故障后产生的正确记录。
流水线遇到数据库迁移失败、冒烟失败或关键指标恶化时应停止扩大流量;回滚动作需要明确是重新部署旧代码、切换函数版本、恢复入口,还是进入数据修复流程。
- 发布命令失败:保持旧流量,保留失败日志和制品,不在生产手工补丁。
- 健康检查失败:摘除新实例,检查配置、依赖和迁移版本。
- 错误率或延迟异常:停止放量,按预设阈值回退制品与入口。
- 数据校验失败:停止新写入扩大,进入数据影响评估,不盲目覆盖恢复。
- 模型供应商异常:启用限流、降级或人工接管,不无限重试。
上线前结合生产上线准备度工作台核对安全与恢复门禁,结合备份、恢复与版本回滚验证数据恢复。
Built with