部署检查器Skill deployment-checker

部署检查器技能用于自动化验证软件部署前的就绪性,包括代码质量、安全检查、性能验证和基础设施检查,生成部署就绪报告,适用于DevOps流程,关键词:部署验证、安全检查、性能测试、自动化部署、CI/CD。

DevOps 0 次安装 0 次浏览 更新于 3/11/2026

名称: 部署检查器 描述: 部署前验证清单和自动化就绪评估。

部署检查器技能

部署前验证清单和自动化就绪评估。

指令

您是一个部署就绪专家。当调用时:

  1. 部署前验证

    • 代码质量检查通过
    • 所有测试通过
    • 构建成功
    • 依赖项更新且安全
    • 环境变量配置
    • 数据库迁移就绪
  2. 安全检查

    • 代码中无秘密
    • 安全头配置
    • 身份验证/授权测试
    • 输入验证实施
    • HTTPS启用
    • 速率限制配置
  3. 性能验证

    • 负载测试完成
    • 资源限制配置
    • 缓存策略实施
    • 数据库索引优化
    • CDN配置(如适用)
  4. 基础设施检查

    • 健康检查配置
    • 监控和告警设置
    • 日志配置
    • 备份策略就位
    • 回滚计划文档化
    • DNS和SSL配置
  5. 生成检查清单:创建部署就绪报告,包含是否部署决策

部署检查清单

部署前(发布前)

代码质量

  • [ ] 所有测试通过(单元、集成、端到端)
  • [ ] 代码审查完成并批准
  • [ ] 代码检查通过(无警告)
  • [ ] 代码覆盖率满足阈值(>80%)
  • [ ] 无已知严重bug
  • [ ] 破坏性变更文档化
  • [ ] API合约验证

构建与依赖项

  • [ ] CI/CD中构建成功
  • [ ] 依赖项更新
  • [ ] 安全漏洞解决
  • [ ] 包大小在可接受范围内
  • [ ] 源映射生成(如适用)
  • [ ] Docker镜像构建并推送

数据库

  • [ ] 迁移在测试环境测试
  • [ ] 迁移回滚计划就绪
  • [ ] 迁移前备份创建
  • [ ] 数据库索引优化
  • [ ] 数据验证脚本运行
  • [ ] 连接池配置

环境配置

  • [ ] 环境变量文档化
  • [ ] 秘密安全存储(不在代码中)
  • [ ] 功能标志配置
  • [ ] CORS设置验证
  • [ ] API密钥轮换(如需要)
  • [ ] 第三方服务配置

安全

  • [ ] 身份验证测试
  • [ ] 授权规则验证
  • [ ] 输入验证实施
  • [ ] SQL注入预防验证
  • [ ] XSS预防实施
  • [ ] CSRF令牌配置
  • [ ] 安全头设置
  • [ ] 速率限制启用
  • [ ] HTTPS强制
  • [ ] 秘密管理器配置

性能

  • [ ] 负载测试完成
  • [ ] 性能基准满足
  • [ ] 数据库查询优化完成
  • [ ] 缓存策略实施
  • [ ] CDN配置(如适用)
  • [ ] 资源限制设置
  • [ ] 自动扩缩配置

部署期间(发布时)

基础设施

  • [ ] 健康检查端点工作
  • [ ] 监控仪表板就绪
  • [ ] 告警配置
  • [ ] 日志集中化
  • [ ] 错误跟踪启用(Sentry等)
  • [ ] 备份策略验证
  • [ ] SSL证书有效
  • [ ] DNS记录更新
  • [ ] 负载均衡器配置

部署策略

  • [ ] 部署方法选择(蓝绿、金丝雀、滚动)
  • [ ] 回滚计划文档化
  • [ ] 数据库迁移策略定义
  • [ ] 停机时间窗口沟通(如有)
  • [ ] 部署操作手册准备
  • [ ] 测试环境部署成功

沟通

  • [ ] 利益相关者通知
  • [ ] 变更日志准备
  • [ ] 文档更新
  • [ ] 支持团队简报
  • [ ] 维护窗口安排(如需要)
  • [ ] 状态页面更新

部署后(发布后)

验证

  • [ ] 冒烟测试通过
  • [ ] 健康检查通过
  • [ ] 错误率正常
  • [ ] 响应时间可接受
  • [ ] 数据库迁移完成
  • [ ] 功能标志验证

监控

  • [ ] 应用日志审查
  • [ ] 错误跟踪检查
  • [ ] 性能指标审查
  • [ ] 用户反馈监控
  • [ ] 资源使用正常
  • [ ] 告警配置和测试

文档

  • [ ] 发布说明发布
  • [ ] API文档更新
  • [ ] 已知问题文档化
  • [ ] 回滚程序测试
  • [ ] 事件响应计划就绪

使用示例

@部署检查器
@部署检查器 --环境 生产
@部署检查器 --检查清单
@部署检查器 --自动化
@部署检查器 --报告

自动化检查脚本

Node.js 示例

// deployment-check.js
const chalk = require('chalk');

class DeploymentChecker {
  constructor() {
    this.checks = [];
    this.passed = 0;
    this.failed = 0;
  }

  async runChecks() {
    console.log(chalk.bold('
🚀 部署就绪检查
'));

    await this.checkTests();
    await this.checkBuild();
    await this.checkDependencies();
    await this.checkEnvironment();
    await this.checkSecurity();
    await this.checkDatabase();

    this.printSummary();
    return this.failed === 0;
  }

  async checkTests() {
    console.log(chalk.blue('📋 运行测试...'));
    try {
      await this.exec('npm test');
      this.pass('所有测试通过');
    } catch (error) {
      this.fail('测试失败', error.message);
    }
  }

  async checkBuild() {
    console.log(chalk.blue('
🔨 构建应用...'));
    try {
      await this.exec('npm run build');
      this.pass('构建成功');
    } catch (error) {
      this.fail('构建失败', error.message);
    }
  }

  async checkDependencies() {
    console.log(chalk.blue('
📦 检查依赖项...'));
    try {
      const result = await this.exec('npm audit --audit-level=high');
      if (result.includes('0 vulnerabilities')) {
        this.pass('无高/严重漏洞');
      } else {
        this.fail('发现安全漏洞');
      }
    } catch (error) {
      this.fail('依赖项检查失败', error.message);
    }
  }

  async checkEnvironment() {
    console.log(chalk.blue('
🌍 检查环境...'));

    const required = [
      'DATABASE_URL',
      'JWT_SECRET',
      'API_KEY',
      'REDIS_URL'
    ];

    for (const envVar of required) {
      if (process.env[envVar]) {
        this.pass(`${envVar} 已设置`);
      } else {
        this.fail(`${envVar} 缺失`);
      }
    }
  }

  async checkSecurity() {
    console.log(chalk.blue('
🔒 安全检查...'));

    // 检查代码中的秘密
    try {
      const result = await this.exec('git secrets --scan');
      this.pass('代码中未发现秘密');
    } catch (error) {
      this.fail('检测到代码中的秘密');
    }

    // 检查HTTPS
    if (process.env.FORCE_HTTPS === 'true') {
      this.pass('HTTPS强制启用');
    } else {
      this.fail('HTTPS未强制启用');
    }
  }

  async checkDatabase() {
    console.log(chalk.blue('
💾 数据库检查...'));

    // 检查迁移是否最新
    try {
      await this.exec('npm run db:check-migrations');
      this.pass('数据库迁移就绪');
    } catch (error) {
      this.fail('数据库迁移问题');
    }
  }

  pass(message) {
    console.log(chalk.green(`  ✓ ${message}`));
    this.passed++;
  }

  fail(message, details = '') {
    console.log(chalk.red(`  ✗ ${message}`));
    if (details) {
      console.log(chalk.gray(`    ${details}`));
    }
    this.failed++;
  }

  printSummary() {
    console.log(chalk.bold('
📊 摘要
'));
    console.log(chalk.green(`  通过: ${this.passed}`));
    console.log(chalk.red(`  失败: ${this.failed}`));

    if (this.failed === 0) {
      console.log(chalk.green.bold('
✅ 就绪部署
'));
    } else {
      console.log(chalk.red.bold('
❌ 未就绪部署
'));
      process.exit(1);
    }
  }

  async exec(command) {
    const { execSync } = require('child_process');
    return execSync(command, { encoding: 'utf8' });
  }
}

// 运行检查
const checker = new DeploymentChecker();
checker.runChecks();

部署报告模板

# 部署就绪报告

**环境**: 生产
**日期**: 2024-01-15
**版本**: v2.3.0
**发布经理**: @username

---

## 总体状态

🟢 **就绪部署**

**分数**: 95/100
- ✅ 关键检查: 10/10
- ✅ 高优先级: 18/20
- ⚠️  中等优先级: 28/30
- ✅ 低优先级: 39/40

---

## 关键检查 (10/10) ✅

- ✅ 所有测试通过 (1,234 测试, 0 失败)
- ✅ 构建成功
- ✅ 无严重漏洞
- ✅ 数据库迁移测试
- ✅ 环境变量配置
- ✅ HTTPS启用
- ✅ 健康检查工作
- ✅ 回滚计划文档化
- ✅ 监控配置
- ✅ 测试环境部署成功

---

## 高优先级 (18/20) ✅

- ✅ 代码审查批准
- ✅ 安全扫描通过
- ✅ 性能基准满足
- ✅ 负载测试完成
- ✅ 错误跟踪启用
- ✅ 速率限制配置
- ✅ 备份策略验证
- ✅ SSL证书有效
- ⚠️  API文档需要更新 (2 端点)
- ⚠️  缓存预热脚本未测试

---

## 中等优先级 (28/30) ⚠️

- ✅ 代码检查通过
- ✅ 代码覆盖率: 87% (目标: 80%)
- ✅ 包大小: 245KB (在限制内)
- ⚠️  搜索端点轻微性能问题
- ⚠️  1 个TODO注释在关键路径

---

## 测试结果

**单元测试**: ✅ 856 通过, 0 失败
**集成测试**: ✅ 234 通过, 0 失败
**端到端测试**: ✅ 144 通过, 0 失败
**总计**: 1,234 测试在 2m 34s

**覆盖率**:
- 语句: 87.4%
- 分支: 82.1%
- 函数: 89.3%
- 行: 86.8%

---

## 安全扫描结果

**依赖项**: ✅ 无严重/高漏洞
**秘密扫描**: ✅ 未检测到秘密
**HTTPS**: ✅ 强制启用
**安全头**: ✅ 配置
- X-Frame-Options: DENY
- X-Content-Type-Options: nosniff
- Strict-Transport-Security: max-age=31536000

**身份验证**: ✅ 测试
**速率限制**: ✅ 100 请求/15分钟 每IP

---

## 性能指标

**负载测试结果** (10,000 并发用户):
- 平均响应时间: 234ms ✅ (目标: <500ms)
- P95 响应时间: 456ms ✅ (目标: <1s)
- P99 响应时间: 789ms ✅ (目标: <2s)
- 错误率: 0.02% ✅ (目标: <0.1%)
- 吞吐量: 12,345 请求/秒 ✅

**数据库**:
- 查询响应时间: <50ms ✅
- 连接池: 配置 (最小: 5, 最大: 50) ✅
- 索引: 优化 ✅

---

## 基础设施状态

**健康检查**: ✅ 全部通过
- /health: 200 OK (5ms)
- /ready: 200 OK (8ms)
- 数据库: 连接
- Redis: 连接
- 外部API: 可达

**监控**: ✅ 配置
- 应用指标: Datadog
- 错误跟踪: Sentry
- 日志: CloudWatch
- 运行时间监控: Pingdom

**告警配置**:
- 错误率 > 1%
- 响应时间 P95 > 1s
- CPU > 80%
- 内存 > 85%
- 数据库连接 > 45

---

## 数据库迁移

**状态**: ✅ 就绪

要应用的迁移:
1. `20240115_add_user_preferences` - 测试 ✅
2. `20240115_create_notifications_table` - 测试 ✅

**回滚计划**: ✅ 文档化
**备份**: ✅ 创建 (15GB, 2024-01-15 10:00 UTC)

---

## 部署计划

**策略**: 蓝绿部署
**估计时长**: 15 分钟
**停机时间**: 无
**回滚时间**: 2 分钟

**步骤**:
1. 部署到绿色环境
2. 运行冒烟测试
3. 切换10%流量到绿色
4. 监控10分钟
5. 切换50%流量到绿色
6. 监控10分钟
7. 切换100%流量到绿色
8. 保持蓝色环境24小时(快速回滚)

---

## 部署前操作项

### 必须修复(阻碍)
- 无 ✅

### 应该修复(推荐)
- ⚠️  更新新端点的API文档
- ⚠️  测试缓存预热脚本

### 可选修复
- 考虑为边缘案例添加更多端到端测试
- 更新变更日志最新变更

---

## 风险评估

**总体风险**: 🟢 低

**识别风险**:
1. **数据库迁移** (低风险)
   - 缓解: 测试环境测试, 回滚计划就绪

2. **流量峰值** (低风险)
   - 缓解: 负载测试, 自动扩缩配置

3. **第三方API** (中等风险)
   - 缓解: 断路器实施, 回退配置

---

## 回滚计划

**触发条件**:
- 错误率 > 5%
- 响应时间 P95 > 2s
- 关键功能损坏

**回滚步骤**:
1. 切换流量回蓝色环境 (30 秒)
2. 调查问题
3. 修复并重新部署

**数据回滚**:
- 数据库备份可用 (15 分钟恢复)
- 迁移回滚脚本测试

---

## 沟通计划

**通知发送**:
- ✅ 工程团队
- ✅ 产品团队
- ✅ 支持团队
- ✅ 利益相关者

**状态页面**: 更新
**变更日志**: 就绪发布
**文档**: 更新

---

## 签字确认

**技术负责人**: ✅ 批准 - @tech-lead
**QA**: ✅ 批准 - @qa-lead
**DevOps**: ✅ 批准 - @devops-lead
**产品**: ✅ 批准 - @product-manager

---

## 最终推荐

🟢 **批准部署**

所有关键检查通过。识别的小问题不阻碍部署。
建议按计划进行部署。

**计划部署**: 2024-01-15 14:00 UTC
**部署窗口**: 14:00 - 14:30 UTC

最佳实践

蓝绿部署

  • 零停机
  • 即时回滚
  • 切换前完整测试
  • 保持旧环境快速恢复

金丝雀部署

  • 渐进式推出 (1% → 10% → 50% → 100%)
  • 每个阶段监控指标
  • 错误时自动回滚
  • 低风险

滚动部署

  • 逐个实例更新
  • 无停机
  • 自动健康检查
  • 比蓝绿慢

数据库迁移

  • 始终先在测试环境测试
  • 创建回滚脚本
  • 迁移前备份
  • 可能时避免破坏性变更
  • 使用功能标志进行模式变更

备注

  • 除非关键,否则不在周五部署
  • 始终有回滚计划
  • 部署后第一小时密切监控
  • 文档化一切
  • 尽可能自动化
  • 在类生产环境测试
  • 使用功能标志进行渐进式推出
  • 保持部署小而频繁
  • 部署期间团队可用
  • 庆祝成功部署!