SuperAPI AI 工具集

shipping-and-launch

部署与运维

查看项目

更新于 10-15 08:24

技能介绍

用途

该技能用于帮助团队安全地将功能或变更发布到生产环境。目标不仅是完成部署,而是做到安全部署:具备监控、回滚方案,并清楚了解成功的标准。每次发布都应当可回滚、可观测、可增量推进。

适用场景包括:首次将功能部署到生产环境、向用户发布重大变更、迁移数据或基础设施、开放测试版或早期访问计划,以及任何带有风险的部署。

主要能力

发布前检查清单

技能提供覆盖多个维度的检查清单:

  • 代码质量:所有测试通过(单元、集成、端到端)、构建无警告、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;

功能开关生命周期:

  1. 部署时开关关闭 → 代码在生产但未激活
  2. 为团队/测试版启用 → 在生产环境内部测试
  3. 逐步放量 → 5% → 25% → 50% → 100% 用户
  4. 每个阶段监控 → 观察错误率、性能、用户反馈
  5. 清理 → 全量发布后移除开关与死代码路径

规则:每个功能开关都有负责人与过期日期;全量发布后 2 周内清理;不要嵌套功能开关;在 CI 中测试开关的开与关两种状态。

分阶段发布

发布顺序:

  1. 部署到预发环境:在预发环境运行完整测试套件,手动冒烟测试关键流程。
  2. 部署到生产(功能开关关闭):验证部署成功(健康检查),检查错误监控(无新错误)。
  3. 为团队启用(内部用户开关打开):团队在生产中使用该功能,24 小时监控窗口。
  4. 金丝雀发布(5% 用户开关打开):监控错误率、延迟、用户行为,对比金丝雀与基线指标,24-48 小时监控窗口,仅当所有阈值通过才推进。
  5. 逐步增加(25% → 50% → 100%):每一步同样监控,可随时回滚到前一百分比。
  6. 全量发布(所有用户开关打开):监控 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)为外部引用,本资料未提供其内容。