用途
Deployment & CI/CD 是一份关于应用部署与持续集成/持续交付(CI/CD)的技能资料,旨在帮助开发者可靠、自动化地发布代码。资料以“部署流水线”为主线,将代码从提交到生产的过程拆解为可自动化的阶段,并给出配套的配置示例。
部署理念
资料提出部署流水线为:代码 → 构建 → 测试 → 预发 → 生产,并强调该过程应自动化、可重复。其列出的原则包括:
- 自动化一切,不保留手动步骤;
- 快速失败,尽早发现问题;
- 随时可回滚,始终保留退路;
- 环境一致性,开发 ≈ 预发 ≈ 生产;
- 可观测性,了解系统运行状态。
主要能力
GitHub Actions
资料提供多种工作流示例:
- 基础 CI 工作流:在 push 到 main 和 pull request 时触发,包含检出代码、安装 Node.js(带 npm 缓存)、安装依赖、运行 linter、运行测试、构建等步骤。
- 矩阵构建:在多个 Node.js 版本(18、20、22)和多个操作系统(ubuntu-latest、macos-latest)上并行测试。
- 推送主分支自动部署:构建后通过 amondnet/vercel-action 部署到 Vercel 生产环境。
- 密钥管理:通过
${{ secrets.* }}引用敏感信息,并在 GitHub 的 Settings → Secrets and variables → Actions 中配置。 - 缓存:使用 actions/cache 缓存 node_modules,以 package-lock.json 的哈希作为 key。
Docker
资料给出 Node.js 多阶段 Dockerfile 示例,分为构建阶段(builder)和生产阶段(runner),生产阶段仅复制必要产物并设置 NODE_ENV=production。同时提供 Docker Compose 示例,定义 app 与 postgres 数据库服务、端口映射、环境变量、数据卷和依赖关系,并给出 .dockerignore 应忽略的文件列表。
平台部署
资料包含三个平台的配置示例:
- Vercel(Next.js):vercel.json 中配置框架、构建命令、输出目录、环境变量和 API 路由的缓存头。
- Railway:railway.toml 中配置构建器、构建命令、启动命令、健康检查路径与超时、重启策略。
- Fly.io:fly.toml 中配置应用名、主区域、Dockerfile、HTTP 服务端口、强制 HTTPS、自动启停机器及服务端口处理。
环境管理
资料列出 .env、.env.local、.env.development、.env.production、.env.test 等环境文件的用途,并给出使用 Zod 校验环境变量的模式示例,确保 DATABASE_URL、API_KEY、NODE_ENV 等变量符合预期。
数据库迁移
资料以 Prisma 为例,说明创建迁移(npx prisma migrate dev --name init)、在 CI/CD 中应用迁移(npx prisma migrate deploy)和生成客户端(npx prisma generate)的命令,并给出在 CI/CD 步骤中运行迁移的示例。
回滚策略
资料介绍蓝绿部署(验证后将流量切换到新版本)、金丝雀部署(先放少量流量到新版本并监控,再逐步增加)以及 Vercel 的即时回滚(vercel rollback 或通过仪表盘将历史部署提升为生产)。
健康检查
资料给出健康检查端点示例,通过查询数据库验证连接,返回 healthy 状态、时间戳和版本号;失败时返回 503 与错误信息。
完整 CI/CD 流水线
资料最后提供一条完整流水线示例,包含 lint、test、build、deploy-preview(仅 pull request)、deploy-production(仅 main 分支)等作业,并展示作业间的依赖关系、环境指定和产物上传。
使用方式
资料以配置文件和命令示例为主,使用者可按需将对应片段复制到自己的项目中,例如将 GitHub Actions 工作流放入 .github/workflows/ 目录,将 Dockerfile 和 docker-compose.yml 放在项目根目录,将平台配置文件放在对应平台要求的位置。具体使用步骤需结合自身项目调整。
适用场景
适合需要为 Web 应用(尤其是 Node.js/Next.js 项目)搭建自动化构建、测试与部署流程的开发者,也适合需要容器化、配置多环境变量、管理数据库迁移或设计回滚方案的团队参考。
限制
资料未提供关于收费、价格、平台支持范围、性能效果或具体使用步骤的完整说明;部分内容(如各平台配置)仅为示例,实际使用需根据项目情况调整。资料中未提及的内容暂未提供。