Skip to content

CI/CD 自动部署

🎯 什么是 CI/CD?

一句话理解

CI/CD 就是「自动化流水线」

你把代码推到 GitHub,系统自动帮你测试、打包、部署,无需手动操作。

名词解释

术语全称含义
CIContinuous Integration(持续集成)代码推送后自动运行测试、构建
CDContinuous 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

  1. 进入 GitHub 仓库 → Settings → Webhooks → Add webhook
  2. Payload URL:填宝塔给你的 webhook 地址
  3. Content type:选 application/json
  4. 保存

现在每次 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
EKSAWSaws.amazon.com/eks
GKEGoogle Cloudcloud.google.com/kubernetes-engine

👉 K8s 入门简介

🎓 选择建议

你的情况推荐方案
使用 Vercel/Zeabur 等平台自带 CI/CD,无需配置
自建服务器 + 宝塔Webhook 最简单
自建服务器 + DockerWebhook + Docker Compose
需要更多控制GitHub Actions
大规模/高可用需求Kubernetes

📚 相关资源

⏭️ 下一步

Released under the MIT License.