部署
部署是把构建产物发布到用户可访问环境的过程。核心目标:让发布可重复、可回滚、可观测。
关注点
1. CI/CD 流水线
- CI(持续集成):merge 后自动跑 lint、test、build
- CD(持续部署):自动把构建产物发布到对应环境
标准流水线:
代码 push → 安装依赖 → lint → 单测 → 构建 → 上传产物 → 触发发布
2. 部署策略
| 策略 | 描述 | 适用 |
|---|---|---|
| 全量发布 | 一次性替换所有机器 | 内部系统、低风险场景 |
| 灰度发布 | 按比例放量(1% → 10% → 100%) | 通用,最推荐 |
| 蓝绿发布 | 切流量,旧版保留回滚 | 重要业务、电商 |
| A/B 测试 | 多版本共存,按用户分流 | 产品验证 |
| 金丝雀发布 | 单机试跑 → 观察 → 放量 | 服务端场景 |
3. 产物管理
- 入口 HTML:
/index.html(不带 hash,走协商缓存) - 静态资源:
/static/js/app.[contenthash].js(带 hash,永久缓存) - 版本目录:
v1.2.0/、v1.2.1/,保留最近 N 个版本便于回滚
部署目标
- 静态资源:CDN(阿里云、Cloudflare、AWS CloudFront)
- SSR 服务:K8s / PM2 / Docker
- H5 / 移动端:蒲公英、TestFlight、内部应用商店
选型决策树
你的服务是什么类型?
├─ 纯静态站(SPA / 文档 / 博客)
│ └─ CDN(**成本最低、首屏最快**)
│
├─ SSR / Node 服务
│ └─ 机器数?
│ ├─ 1 台 → PM2(**最轻**)
│ ├─ 2~5 台 → Docker + PM2 / Docker Compose
│ └─ 10+ 台 → Kubernetes / 托管 K8s(ACK / TKE / EKS)
│
└─ 微前端 / 多服务
└─ 直接上 K8s / Service Mesh
2025+ 国内云厂商推荐:托管 K8s(阿里云 ACK / 腾讯云 TKE)——把运维交给云厂商,自己只管业务。
主流工具
| 类型 | 工具 |
|---|---|
| CI/CD | GitHub Actions、GitLab CI、Jenkins |
| CDN | 阿里云 OSS+CDN、腾讯云、Cloudflare |
| 进程管理 | PM2(单机首选) |
| 容器 | Docker、Kubernetes、Container Apps |
| IaC | Terraform、Pulumi |
详见:
避坑指南
- 入口 HTML 不带 hash:保证发版能立即生效
- 静态资源永久缓存:文件名带 hash 即可
- 回滚优先于修复:修复永远没有回滚快
- CI 缓存依赖:能省一半时间
- 构建可复现:固定
package-lock.json,加--frozen-lockfile - 不要在 CI 里手动登录:用 secrets 注入