如何搭建前端项目的 CI/CD 持续集成和部署流程?

描述如何配置和自动化前端项目的构建、测试和部署流程。使用工具如 Git、Jest、Cypress 和 GitHub Actions。

工程化与构建 中等 CI/CD 自动化测试 工程化

搭建前端项目的CI/CD流程,需结合自动化工具和持续集成/部署原则,步骤如下:

  1. 准备工作:
    • 配置版本控制系统: 使用 Git 管理代码库,如 GitHub, GitLab 或 Bitbucket。
    • 集成测试和 Lint 工具: 项目中配置 npm 脚本,例如在 package.json 中定义:
      "scripts": {
        "lint": "eslint . --fix",       // 使用ESLint检查代码规范
        "test": "jest",                // 使用Jest运行单元测试
        "build": "webpack --mode production", // 例如用 Webpack 构建项目
        "e2e": "cypress run"           // 使用Cypress进行端到端测试
      }
      
    • 准备CI/CD工具: 根据项目需求选择 CI/CD 工具,如:
      • GitHub Actions: 适合 GitHub 仓库;
      • GitLab CI/CD: 适合 GitLab 仓库;
      • Jenkins: 用于跨平台和复杂管道的自定义.
  2. 设置CI/CD管道: 在代码仓库中添加配置文件以定义自动化流程。一般分为多个阶段:
    • 检出代码: 使用默认或指定操作;
    • 安装依赖: 高效处理依赖以避免冲突;
    • 运行 Lint 工具: 检查代码风格并格式化错误,如通过ESLint集成;
    • 执行自动化测试:
      • 单元测试:使用Jest或Mocha验证代码逻辑;
      • 端到端测试:使用Cypress或Playwright模拟用户交互;
        确保测试失败时自动中断流程;
    • 构建项目: 生产优化代码如用 Webpack 打包;
    • 部署阶段: 自动将 build 目录推送到目标环境;
      • 通过CI工具实现持续交付到预发/生产环境;
      • 可使用 CD 策略如 S3上传或 Docker镜像部署避免中断.

    一个完整的 GitHub Actions frontend-ci.yml 文件示例(源):

    name: Frontend CI/CD Pipeline
    on:
      push:
        branches: [main, develop]
    jobs:
      ci-process:
        runs-on: ubuntu-latest
        steps:
          - name: Checkout code
            uses: actions/checkout@v3
          - name: Install dependencies
            run: npm ci         # 用 npm 快速安装依赖
          - name: Run Lint
            run: npm run lint   # Lint检查,失败则终止
          - name: Run Tests
            run: npm test       # 如Jest运行单元测试
          - name: Run E2E Tests
            run: npm run e2e    # Cypress等测试框架执行端到端测试
          - name: Build project
            run: npm run build
          - name: Deploy to AWS S3
            env:
              AWS_ACCESS_KEY_ID: $
              AWS_SECRET_ACCESS_KEY: $
            run: aws s3 sync ./dist s3://my-bucket-name --delete  # 用Secret安全部署
    

    GitLab或Jenkins类似,参考.

  3. 注意事项和优化:
    • 设置 Secrets: 用于安全管理部署凭据,避免凭证暴露。
    • 分支策略: 例如feature/pull_request时在分支运行管道;
    • 流程失败处理: 启用通知机制(如 Slack、 Email)。