用途
该技能用于帮助团队安全地将功能或变更发布到生产环境。目标不仅是完成部署,而是做到安全部署:具备监控、回滚方案,并清楚了解成功的标准。每次发布都应当可回滚、可观测、可增量推进。
适用场景包括:首次将功能部署到生产环境、向用户发布重大变更、迁移数据或基础设施、开放测试版或早期访问计划,以及任何带有风险的部署。
主要能力
发布前检查清单
技能提供覆盖多个维度的检查清单:
- 代码质量:所有测试通过(单元、集成、端到端)、构建无警告、lint 与类型检查通过、代码已审查批准、无遗留 TODO、生产代码中无 console.log 调试语句、错误处理覆盖预期失败模式。
- 安全:代码与版本控制中无密钥、依赖审计(npm audit、pip-audit、cargo audit 等)无严重或高危漏洞、所有面向用户的端点有输入验证、认证与授权检查到位、配置安全响应头(CSP、HSTS 等)、认证端点限流、CORS 限定具体来源而非通配符。
- 性能:Core Web Vitals 处于“Good”阈值内、关键路径无 N+1 查询、图片优化(压缩、响应式尺寸、懒加载)、包体积在预算内、数据库查询有适当索引、静态资源与重复查询配置缓存。
- 可访问性:所有交互元素支持键盘导航、屏幕阅读器可传达页面内容与结构、颜色对比度满足 WCAG 2.1 AA(文本 4.5:1)、模态框与动态内容的焦点管理正确、错误消息描述清晰并与表单字段关联、axe-core 或 Lighthouse 无无障碍警告。
- 基础设施:生产环境变量已设置、数据库迁移已应用或准备就绪、DNS 与 SSL 已配置、静态资源 CDN 已配置、日志与错误上报已配置、健康检查端点存在且可响应。
- 文档:README 更新新设置要求、API 文档最新、架构决策记录(ADR)已编写、变更日志已更新、面向用户的文档已更新(如适用)。
功能开关策略
通过功能开关将部署与发布解耦。示例代码:
// Feature flag check
const flags = await getFeatureFlags(userId);
if (flags.taskSharing) {
// New feature: task sharing
return <TaskSharingPanel task={task} />;
}
// Default: existing behavior
return null;
功能开关生命周期:
- 部署时开关关闭 → 代码在生产但未激活
- 为团队/测试版启用 → 在生产环境内部测试
- 逐步放量 → 5% → 25% → 50% → 100% 用户
- 每个阶段监控 → 观察错误率、性能、用户反馈
- 清理 → 全量发布后移除开关与死代码路径
规则:每个功能开关都有负责人与过期日期;全量发布后 2 周内清理;不要嵌套功能开关;在 CI 中测试开关的开与关两种状态。
分阶段发布
发布顺序:
- 部署到预发环境:在预发环境运行完整测试套件,手动冒烟测试关键流程。
- 部署到生产(功能开关关闭):验证部署成功(健康检查),检查错误监控(无新错误)。
- 为团队启用(内部用户开关打开):团队在生产中使用该功能,24 小时监控窗口。
- 金丝雀发布(5% 用户开关打开):监控错误率、延迟、用户行为,对比金丝雀与基线指标,24-48 小时监控窗口,仅当所有阈值通过才推进。
- 逐步增加(25% → 50% → 100%):每一步同样监控,可随时回滚到前一百分比。
- 全量发布(所有用户开关打开):监控 1 周,清理功能开关。
发布决策阈值
用于决定推进、暂停或回滚的阈值:
| 指标 | 推进(绿) | 暂停调查(黄) | 回滚(红) |
|---|---|---|---|
| 错误率 | 基线 10% 以内 | 高于基线 10-100% | 超过基线 2 倍 |
| P95 延迟 | 基线 20% 以内 | 高于基线 20-50% | 高于基线 50% 以上 |
| 客户端 JS 错误 | 无新错误类型 | 新错误低于会话 0.1% | 新错误高于会话 0.1% |
| 业务指标 | 中性或正向 | 下降低于 5%(可能是噪声) | 下降超过 5% |
回滚时机
出现以下情况立即回滚:错误率超过基线 2 倍、P95 延迟增加超过 50%、用户报告问题激增、检测到数据完整性问题、发现安全漏洞。
监控与可观测性
需要监控的内容:
- 应用指标:错误率(总体与按端点)、响应时间(p50、p95、p99)、请求量、活跃用户、关键业务指标(转化、参与度)。
- 基础设施指标:CPU 与内存利用率、数据库连接池使用、磁盘空间、网络延迟、队列深度(如适用)。
- 客户端指标:Core Web Vitals(LCP、INP、CLS)、JavaScript 错误、客户端视角的 API 错误率、页面加载时间。
错误上报示例:
// Set up error boundary with reporting
class ErrorBoundary extends React.Component {
state = { hasError: false };
static getDerivedStateFromError() {
return { hasError: true };
}
componentDidCatch(error: Error, info: React.ErrorInfo) {
// Report to error tracking service
reportError(error, {
componentStack: info.componentStack,
userId: getCurrentUser()?.id,
page: window.location.pathname,
});
}
render() {
if (this.state.hasError) {
return <ErrorFallback onRetry={() => this.setState({ hasError: false })} />;
}
return this.props.children;
}
}
// Server-side error reporting
app.use((err: Error, req: Request, res: Response, next: NextFunction) => {
reportError(err, {
method: req.method,
url: req.url,
userId: req.user?.id,
});
// Don't expose internals to users
res.status(500).json({
error: { code: 'INTERNAL_ERROR', message: 'Something went wrong' },
});
});
发布后验证
发布后第一小时内:检查健康端点返回 200;检查错误监控仪表盘(无新错误类型);检查延迟仪表盘(无退化);手动测试关键用户流程;确认日志正常流动且可读;确认回滚机制有效(如可能进行演练)。
错误预算发布门禁
服务的错误预算——SLO 允许失败请求或时间的比例——决定是否可以安全发布。将其作为客观门禁:
- 预算剩余 > 20% → 正常发布,密切监控
- 预算剩余 0–20% → 仅慢速发布,不做高风险变更
- 预算耗尽 → 冻结功能工作,专注可靠性
- 预算重置 → 恢复正常节奏,固化恢复所用的修复
金丝雀期间的高燃烧率(消耗预算快于基线速度)是上表中的暂停信号,与错误率升高同等对待。
回滚策略
每次部署前都需要回滚计划:
## Rollback Plan for [Feature/Release]
### Trigger Conditions
- Error rate > 2x baseline
- P95 latency > [X]ms
- User reports of [specific issue]
### Rollback Steps
1. Disable feature flag (if applicable)
OR
1. Deploy previous version: `git revert <commit> && git push`
2. Verify rollback: health check, error monitoring
3. Communicate: notify team of rollback
### Database Considerations
- Migration [X] has a rollback: <verified command or runbook link>
- Data inserted by new feature: [preserved / cleaned up]
### Time to Rollback
- Feature flag: < 1 minute
- Redeploy previous version: < 5 minutes
- Database rollback: < 15 minutes
使用方式
该技能以检查清单和流程指南的形式使用。在准备部署到生产环境前,逐项完成发布前检查清单;配置功能开关并制定分阶段发布计划;设置监控仪表盘与错误上报;编写回滚计划;发布后按验证步骤逐项确认。技能还提供了常见合理化借口的反驳与红旗警示,帮助团队避免跳过关键步骤。
适用场景
- 首次将功能部署到生产环境
- 向用户发布重大变更
- 迁移数据或基础设施
- 开放测试版或早期访问计划
- 任何带有风险的部署
限制
该技能为流程与检查清单指南,不包含自动化部署工具或平台特定配置。具体阈值(如 P95 延迟的 X 毫秒)需根据项目实际情况填写。部分引用文档(如 definition-of-done.md、security-checklist.md、performance-checklist.md、accessibility-checklist.md、observability-and-instrumentation)为外部引用,本资料未提供其内容。