一次回滚失败之后,我把发布流程重写了
那天的顺序是:发布,报错,回滚,回滚也失败。原因是这次发布包含一个数据库迁移,而回滚脚本只回滚了代码,没有回滚 schema。
教训不是「迁移要小心」,而是「回滚路径必须和发布路径一起设计」。凡是发布时会改的东西,回滚时都得有对应的逆向操作,包括数据。
重写后的流程有三条硬规则:迁移必须向前兼容(旧代码能读新 schema)、每一步都可单独回退、回滚脚本必须在预发环境跑过至少一次。
第三条听起来多余,但它是唯一能证明回滚可用的方式。写在文档里没被执行的脚本,等于不存在。