出处:掘金

原作者:金泽宸


CI/CD 是连接开发与交付的桥梁,架构师应当让“部署”从此不再是“手动上线+微信截图”

写在前面

前端工程要跑得快、改得稳、发得准,离不开 CI/CD 系统的支持。 一个架构师级别的前端工程,一定具备以下特征:

  • 任何人 clone 下来就能运行
  • 每次 PR/Push 自动测试 + 构建
  • 构建产物自动上传至服务器或 CDN
  • 发布流程支持回滚、版本标识、预发布环境测试

本篇我们将手把手搭建一套完整的前端 CI/CD 工作流,基于 GitHub Actions + Vite + Node 项目实战落地

什么是 CI/CD?

缩写含义作用
CIContinuous Integration(持续集成)自动测试、构建、合并代码
CDContinuous Delivery/Deployment(持续交付/部署)自动发布到测试或生产环境

CI/CD 工作流全景图

Push → GitHub

GitHub Actions 触发流程

🔹 安装依赖
🔹 单元测试
🔹 Lint 检查
🔹 构建产物
🔹 上传至服务器/CDN/对象存储

实战项目

my-project/
├── .github/workflows/deploy.yml   # CI/CD 流程配置
├── src/
├── vite.config.ts
├── package.json
└── ...

编写 GitHub Actions 工作流配置

新建 .github/workflows/deploy.yml

name: 前端构建部署
 
on:
  push:
    branches:
      - main
 
jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
 
    steps:
      - name: 📥 Checkout 代码
        uses: actions/checkout@v3
 
      - name: 🧱 安装 Node 环境
        uses: actions/setup-node@v3
        with:
          node-version: '18'
 
      - name: 📦 安装依赖
        run: npm ci
 
      - name: ✅ 执行 Lint + Test
        run: |
          npm run lint
          npm run test
 
      - name: 🛠️ 打包构建产物
        run: npm run build
 
      - name: 📤 上传构建产物到服务器
        uses: appleboy/scp-action@master
        with:
          host: ${{ secrets.SERVER_HOST }}
          username: ${{ secrets.SERVER_USER }}
          password: ${{ secrets.SERVER_PASSWORD }}
          source: 'dist/'
          target: '/var/www/my-project'

配置 Secrets 安全信息

进入 GitHub 仓库 → Settings → Secrets → Actions 添加以下环境变量:

Name用途
SERVER_HOST服务器 IP
SERVER_USER服务器用户
SERVER_PASSWORD服务器密码

建议后续改为 SSH 私钥方式更安全

服务器部署准备(以 Nginx 为例)

sudo apt install nginx
sudo mkdir -p /var/www/my-project

Nginx 配置文件:

server {
  listen 80;
  server_name yourdomain.com;
 
  location / {
    root /var/www/my-project;
    index index.html;
    try_files $uri $uri/ /index.html;
  }
}

扩展:构建 + CDN 静态托管

如使用七牛、阿里云 OSS、Cloudflare R2:

- name: 上传到 OSS
  uses: manyuanrong/setup-ossutil@v2.0
  with:
    endpoint: ${{ secrets.OSS_ENDPOINT }}
    access-key-id: ${{ secrets.OSS_ACCESS_KEY }}
    access-key-secret: ${{ secrets.OSS_SECRET_KEY }}
- run: ossutil cp -r dist/ oss://my-bucket/project/ --force

一键部署体验演示

git push origin main
# 自动触发构建 → 打包 → 上传服务器 → 自动部署

流程运行:

  1. 触发
  2. 构建
  3. 上传
  4. 自动发布

部署优化点建议

目标推荐方案
自动回滚保留上一个版本目录 dist_bak/,失败则恢复
多环境部署使用环境变量 + 多个 workflow(如 dev/staging/prod)
多分支控制设置 on.push.branches: [dev] 限定触发
自动版本标记使用 actions/create-release 自动打 tag

CI/CD 模板复用建议

建议将 .github/workflows/deploy.yml 抽象为模板,支持参数化:

  • 应用名(APP_NAME)
  • 构建目录(BUILD_PATH)
  • 发布目标(TARGET_PATH)
  • 使用脚手架模板自动注入

搭配脚手架 CLI 一起使用,极大简化配置流程