主题
CI/CD 自动部署
🎯 什么是 CI/CD?
一句话理解
CI/CD 就是「自动化流水线」。
你把代码推到 GitHub,系统自动帮你测试、打包、部署,无需手动操作。
名词解释
| 术语 | 全称 | 含义 |
|---|---|---|
| CI | Continuous Integration(持续集成) | 代码推送后自动运行测试、构建 |
| CD | Continuous Deployment(持续部署) | 测试通过后自动部署到服务器 |
传统方式 vs CI/CD
| 传统方式 | CI/CD |
|---|---|
| 手动登录服务器 | 代码推送后自动部署 |
| 手动拉取代码 | 自动拉取最新代码 |
| 手动构建打包 | 自动构建打包 |
| 手动重启服务 | 自动重启服务 |
| 容易忘记某个步骤 | 流程标准化,不会遗漏 |
🏠 最简单的方式:平台自带 CI/CD
Vercel、Zeabur、EdgeOne 等平台默认就有 CI/CD,你什么都不用配置!
零配置 CI/CD
只需要把代码推到 GitHub:
git add . && git commit -m "新功能" && git push
↓
GitHub 收到代码
↓
平台自动检测到更新
↓
自动拉取代码、构建、部署
↓
1-3 分钟后网站自动更新!支持此功能的平台:
- Vercel ✅
- Zeabur ✅
- EdgeOne (Pages) ✅
- Railway ✅
- Render ✅
- Netlify ✅
🛠️ 自建服务器的 CI/CD
如果你把项目部署在自己的服务器(宝塔、手动部署等),也可以实现自动部署。
方案一:宝塔 + Webhook(最简单)
原理:GitHub 推送代码时,通知你的服务器执行脚本。
步骤 1:安装宝塔 Webhook 插件
在宝塔面板 → 软件商店 → 搜索 webhook → 安装
步骤 2:创建 Webhook
添加一个 webhook,脚本内容示例:
bash
#!/bin/bash
cd /www/wwwroot/your-project
# 拉取最新代码
git pull origin main
# 前端项目
cd frontend
pnpm install
pnpm build
# 后端项目
cd ../backend
pnpm install
pnpm build
pm2 restart all步骤 3:配置 GitHub Webhook
- 进入 GitHub 仓库 → Settings → Webhooks → Add webhook
- Payload URL:填宝塔给你的 webhook 地址
- Content type:选
application/json - 保存
现在每次 git push,服务器就会自动更新部署!
方案二:Docker + Webhook
如果使用 Docker 部署,脚本改为:
bash
#!/bin/bash
cd /home/app/your-project
# 拉取最新代码
git pull origin main
# 重新构建并启动
docker compose down
docker compose up -d --build方案三:GitHub Actions
GitHub 自带的 CI/CD 工具,功能强大,免费额度充足。
在项目根目录创建 .github/workflows/deploy.yml:
yaml
name: Deploy
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install pnpm
run: npm install -g pnpm
- name: Install dependencies
run: pnpm install
- name: Build
run: pnpm build
- name: Deploy to server
uses: appleboy/ssh-action@v1.0.0
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.SSH_KEY }}
script: |
cd /home/app/your-project
git pull origin main
docker compose up -d --build然后在 GitHub 仓库 → Settings → Secrets 添加服务器信息。
☸️ 更高级:Kubernetes (K8s)
如果你的项目规模大、需要高可用,可以考虑 Kubernetes。
注意
K8s 比较复杂,新手不建议使用。先用上面的方案,等有需求再学习。
简单介绍 K8s 能做什么:
| 功能 | 说明 |
|---|---|
| 自动扩缩容 | 流量大时自动增加实例,流量小时自动减少 |
| 滚动更新 | 部署新版本时不停机,逐步替换旧版本 |
| 自动恢复 | 容器挂了自动重启 |
| 负载均衡 | 自动将流量分配到多个实例 |
托管 K8s 服务
如果想用 K8s,建议使用云厂商的托管服务,不用自己搭建:
| 服务 | 厂商 | 链接 |
|---|---|---|
| TKE | 腾讯云 | cloud.tencent.com/product/tke |
| ACK | 阿里云 | aliyun.com/product/kubernetes |
| EKS | AWS | aws.amazon.com/eks |
| GKE | Google Cloud | cloud.google.com/kubernetes-engine |
👉 K8s 入门简介
🎓 选择建议
| 你的情况 | 推荐方案 |
|---|---|
| 使用 Vercel/Zeabur 等平台 | 自带 CI/CD,无需配置 |
| 自建服务器 + 宝塔 | Webhook 最简单 |
| 自建服务器 + Docker | Webhook + Docker Compose |
| 需要更多控制 | GitHub Actions |
| 大规模/高可用需求 | Kubernetes |