DevOps 流程¶
DevOps 是 Vibe Coding 的高价值场景——CI/CD 配置、Dockerfile、IaC 代码有清晰的规范,AI 能高效生成。
CI/CD 配置¶
GitHub Actions 工作流¶
背景:Next.js 项目,部署到 Vercel,
测试使用 Vitest,类型检查使用 tsc。
目标:创建 CI 工作流,在 PR 时自动运行
步骤:
1. 安装依赖(使用 pnpm,缓存 node_modules)
2. 类型检查(tsc --noEmit)
3. Lint(eslint)
4. 单元测试(vitest run)
5. 构建检查(next build)
触发条件:PR 到 main 分支,push 到 main 分支
约束:
- 使用 pnpm(不是 npm 或 yarn)
- Node.js 版本从 .nvmrc 读取
- 并行运行类型检查和 Lint(节省时间)
- 失败时在 PR 上添加注释
验收:在测试 PR 上触发工作流,所有步骤通过
容器化¶
背景:Python FastAPI 应用,需要容器化部署
目标:创建生产级 Dockerfile
要求:
- 多阶段构建(builder + runtime)
- 非 root 用户运行
- 最小化镜像体积(目标 < 200MB)
- 健康检查端点:GET /health
基础镜像:python:3.11-slim
依赖文件:requirements.txt(已存在)
约束:
- 不在镜像中包含测试依赖
- 敏感配置通过环境变量注入,不硬编码
验收:
docker build -t app . 成功
docker run -p 8000:8000 app
curl http://localhost:8000/health 返回 200
基础设施即代码¶
Terraform¶
背景:AWS 环境,需要为新服务创建基础设施
现有模块:[附上现有 Terraform 模块结构]
目标:创建 ECS Fargate 服务
资源:
- ECS Task Definition(CPU: 256, Memory: 512)
- ECS Service(期望实例数: 2)
- ALB Target Group
- CloudWatch Log Group(保留 30 天)
约束:
- 沿用现有的 VPC 和安全组(通过 data source 引用)
- 使用现有的 ECR 仓库
- 标签规范:{ Environment, Project, ManagedBy = "terraform" }
验收:
terraform plan 无错误
terraform apply 后服务健康检查通过
监控告警¶
背景:Prometheus + Grafana 监控栈,
应用已暴露 /metrics 端点
目标:为 API 服务创建告警规则
告警项:
1. 错误率 > 1%(5 分钟窗口)
2. P99 延迟 > 1 秒(5 分钟窗口)
3. 实例数 < 2(服务降级)
4. 内存使用 > 80%
通知:发送到 PagerDuty(严重)和 Slack(警告)
约束:
- 使用 Prometheus alerting rules 格式(YAML)
- 告警需要有 runbook_url 注释
- 避免告警风暴(添加合理的 for 时间)
验收:在测试环境触发告警,确认通知正常发送
DevOps 特有的验证要求¶
| 验证项 | 说明 |
|---|---|
| 幂等性 | 重复执行不产生副作用 |
| 回滚方案 | 每个变更都有对应的回滚步骤 |
| 最小权限 | IAM 角色、容器用户遵循最小权限原则 |
| 密钥管理 | 无硬编码密钥,使用 Secrets Manager |
| 变更影响 | 评估对现有服务的影响范围 |
常见陷阱¶
陷阱:直接应用到生产环境
所有 IaC 变更必须先在测试环境验证,再通过 PR 审查,最后才能应用到生产。
陷阱:忽略回滚方案
在任务简报中要求 AI 同时提供回滚步骤,而不是事后再想。
陷阱:硬编码账号 ID 和区域
要求 AI 使用变量或 data source,而不是硬编码 AWS 账号 ID、区域等环境特定值。