首页/开发/CI/CD 与发布速查/部署与发布的解耦
发布策略60 条

部署与发布的解耦

把「代码进入环境(deploy)」和「用户可见行为变化(release)」拆成两件事:先部署默认关闭的功能,再用开关或流量规则决定何时对谁生效。

CI/CD 与发布速查开发更新于 2026-10-13

部署与发布的区别

把「部署」与「发布」拆成两件事:部署是代码进入环境、随流水线自动执行;发布是对用户生效的时机与范围,由开关或流量规则决定。先部署默认关闭的功能,观察稳定后再放开,部署频率与业务时机因此解耦,回滚也从「回滚制品」变成「关闭开关」,操作代价小得多。

基本信息

部署制品安装到环境、随流水线自动执行
发布对用户生效的时机与范围
解耦手段功能开关、流量权重、用户白名单
收益部署不再承担业务时机压力,回滚更快
约束数据库结构变更要与新旧两个版本兼容

典型使用场景

  • 暗发布:新功能先上线但仅内部可见,观察资源与日志。
  • 灰度放开:按用户比例或地区逐步打开开关。
  • 紧急关闭:出问题时关开关止血,不必回滚制品。
  • 解耦节奏:部署跟随流水线,发布跟随业务窗口。
  • 降低回滚:多数问题用开关处理,回滚是最后手段。

示意

示意
# 部署完成但功能关闭
FEATURE_NEW_CHECKOUT=false ./deploy.sh
# 观察后再放开
FEATURE_NEW_CHECKOUT=true ./deploy.sh --reload-config

两者对照

维度部署发布
定义制品安装到环境对用户生效的时机与范围
触发流水线自动执行开关、流量、名单
失败处理回滚制品或前滚关闭开关
频率可每日多次按业务节奏决定
解耦后「发布失败」更多是业务开关未达预期,可直接关闭开关恢复,不必回滚制品。
开关要有唯一入口与审计:散落在各处的配置读取会让「关闭」动作遗漏某处。
数据库变更天然难以「未发布」:结构变更要设计成与新旧两个版本同时兼容。

易错点

  • 把开关当长期架构:发布开关不设退役日期,半年后没人敢删也没人敢关。
  • 开关组合爆炸:N 个布尔开关有 2 的 N 次方种状态,只验证部分组合。
  • 部署与发布混为一谈:每次上线都排停服窗口,自动化收益被抵消。
  • 开关状态不进监控:线上处于哪种组合无从判断,排查无从下手。
  • 开关默认值随手写 true:异常回退语义反转,回退动作失效。
  • 发布时靠手工改配置:操作无审计、易出错,开关要走配置管理。

数据来源与参考

  • Humble & Farley《Continuous Delivery》第 10 章
  • martinfowler.com《Feature Toggles》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌