devops/deployment-process · v2.2.0 · 2026-10-27 · sha256 28196e31bc8c756a
devops/deployment-process v2.2.0A
Immutable. This exact content never changes and is served at /api/v1/blob/28196e31bc8c756a.
---
name: devops/deployment-process
description: 部署流程与CI/CD配置,包含部署平台选择、部署策略和环境管理
version: 2.2.0
agent: devops
type: methodology
user-invocable: false
agent-invocable: true
dependencies:
- shared/tech-stack-detection
triggers:
- 需要配置部署流程时
- 需要设置CI/CD时
- 需要选择部署平台时
metadata:
internal: true
---
# 部署流程与 CI/CD
## 部署平台选择
**核心原则:先检测现有部署配置,再决定流程。** 项目可能已经有 `vercel.json` / `render.yaml` 等配置,应直接复用,不要重复推荐。
### 现有部署配置检测(第一步)
扫描项目根目录,按以下优先级匹配已有配置:
| 检测到的文件 | 判定平台 | 对应 Skill |
|-------------|----------|------------|
| `vercel.json` 或 `.vercel/` | Vercel | `devops/deploy-vercel` |
| `wrangler.toml` / `wrangler.json` | Cloudflare | `devops/deploy-cloudflare` |
| `render.yaml` / `render.yml` | Render | `devops/deploy-render` |
| `netlify.toml` / `netlify.json` | Netlify | `devops/deploy-netlify` |
| `railway.json` / `railway.toml` | Railway | `devops/deploy-railway` |
| `fly.toml` | Fly.io | `devops/deploy-flyio` |
| `Dockerfile`(无上述平台配置) | Render 或 Fly.io | `devops/deploy-render` / `devops/deploy-flyio` |
**检测命令**:
```bash
ls vercel.json wrangler.toml render.yaml render.yml netlify.toml railway.json railway.toml fly.toml Dockerfile 2>/dev/null
```
- 检测到平台配置 → **直接使用该平台**,加载对应 Skill
- 未检测到任何配置 → 进入下一步,按项目类型推荐
### 平台选择决策表(第二步,无现有配置时)
| 项目类型 | 推荐平台 | 备选平台 | 对应 Skill |
|----------|----------|----------|------------|
| Next.js / React / Vue 前端 | Vercel | Netlify / Cloudflare Pages | `devops/deploy-vercel` |
| 静态站点(HTML/CSS/JS) | Vercel | Netlify / Cloudflare Pages | `devops/deploy-vercel` |
| 边缘计算 / Serverless API | Cloudflare | Vercel | `devops/deploy-cloudflare` |
| 全栈应用 + 数据库 | Render | Railway | `devops/deploy-render` |
| Node.js 后端 API | Railway | Render / Fly.io | `devops/deploy-railway` |
| Python/Django/FastAPI 后端 | Railway | Render / Fly.io | `devops/deploy-railway` |
| Go/Rust 后端 | Fly.io | Railway / Render | `devops/deploy-flyio` |
| Java/Spring Boot 后端 | Railway | Fly.io | `devops/deploy-railway` |
| Docker 化应用 | Fly.io | Render | `devops/deploy-flyio` |
| 有状态服务(需 Volume) | Fly.io | - | `devops/deploy-flyio` |
| 全球边缘后端 | Fly.io | Cloudflare | `devops/deploy-flyio` |
| 静态站点 + Serverless Functions | Netlify | Vercel | `devops/deploy-netlify` |
### 平台能力对比
| 能力 | Vercel | Cloudflare | Render | Netlify | Railway | Fly.io |
|------|--------|-----------|--------|---------|---------|--------|
| 前端 SPA | ✅ 原生 | ✅ Pages | ✅ Static | ✅ 原生 | ⚠️ 可部署 | ⚠️ 可部署 |
| Next.js SSR | ✅ 最佳 | ⚠️ 需 adapter | ✅ | ⚠️ 需 adapter | ✅ | ⚠️ 需 Docker |
| Node.js 后端 | ⚠️ Functions | ✅ Workers | ✅ | ⚠️ Functions | ✅ 原生 | ✅ |
| Python 后端 | ❌ | ❌ | ✅ | ❌ | ✅ 原生 | ✅ |
| Go/Rust 后端 | ❌ | ❌ | ✅ | ❌ | ✅ 原生 | ✅ 最佳 |
| Java 后端 | ❌ | ❌ | ✅ | ❌ | ✅ 原生 | ✅ |
| Serverless Functions | ✅ | ✅ Workers | ✅ | ✅ | ❌ | ❌ |
| 托管 PostgreSQL | ❌ | ✅ D1 | ✅ | ❌ | ✅ | ✅ |
| 托管 MySQL | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ |
| 托管 Redis | ❌ | ❌ | ✅ | ❌ | ✅ | ⚠️ Upstash |
| Docker 支持 | ❌ | ❌ | ✅ | ❌ | ✅ | ✅ 原生 |
| 持久化 Volume | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ |
| 边缘计算 | ✅ Edge | ✅ Workers | ❌ | ✅ Edge | ❌ | ✅ 全球 |
| 免费额度 | generous | generous | 有限 | generous | $5 试用 | 有限 |
| 全球 CDN | ✅ | ✅ | ❌ | ✅ | ❌ | ✅ |
### 选择逻辑
1. **检测现有部署配置**:扫描根目录的 `vercel.json` / `wrangler.toml` / `render.yaml` / `netlify.toml` / `railway.json` / `fly.toml` / `Dockerfile`
2. **命中现有配置** → 直接使用该平台,加载对应 Skill
3. **未命中** → 检测项目类型,按决策表推荐平台
4. **加载平台 Skill**:使用 `Skill(skill: "devops/deploy-<platform>")` 获取具体部署命令
5. **执行部署**:按平台 Skill 的步骤执行
## 部署策略
| 策略 | 说明 | 适用场景 |
|------|------|----------|
| 蓝绿部署 | 两套环境切换 | 需要快速回滚 |
| 滚动部署 | 逐步替换实例 | 零停机部署 |
| 金丝雀部署 | 小流量验证 | 风险较高的更新 |
## CI/CD 流程
```
代码提交 → 自动构建 → 自动测试 → 部署到预览环境 → 合并后部署到生产环境
```
### GitHub Actions 通用模板
```yaml
name: CI/CD
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npm ci
- run: npm test
- run: npm run build
# 部署步骤由平台 Skill 提供
```
## 环境配置
| 环境 | 用途 | 数据 |
|------|------|------|
| local | 本地开发 | 测试数据 |
| dev | 开发测试 | 测试数据 |
| staging | 预发布 | 生产数据副本 |
| prod | 生产环境 | 真实数据 |
## 环境变量管理原则
1. **模板文件**:确保 `.env.example` 包含所有必需变量(不含真实值)
2. **文档记录**:在 deploy-report.md 中列出所有环境变量及其用途
3. **安全原则**:
- 敏感变量(数据库密码、API 密钥)必须通过环境变量注入,不得硬编码
- `.env` 文件必须在 `.gitignore` 中
- 生产环境使用平台的 Secrets 管理