Skip to main content

部署

部署是把构建产物发布到用户可访问环境的过程。核心目标:让发布可重复、可回滚、可观测

关注点

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/CDGitHub Actions、GitLab CI、Jenkins
CDN阿里云 OSS+CDN、腾讯云、Cloudflare
进程管理PM2(单机首选
容器Docker、Kubernetes、Container Apps
IaCTerraform、Pulumi

详见:

避坑指南

  1. 入口 HTML 不带 hash:保证发版能立即生效
  2. 静态资源永久缓存:文件名带 hash 即可
  3. 回滚优先于修复修复永远没有回滚快
  4. CI 缓存依赖:能省一半时间
  5. 构建可复现:固定 package-lock.json,加 --frozen-lockfile
  6. 不要在 CI 里手动登录:用 secrets 注入