Skip to content

持续集成与持续交付 (CI/CD)

CI/CD 是现代软件开发的引擎,通过自动化将代码从提交到部署的过程串联起来。

1. 核心概念

CI (Continuous Integration - 持续集成)

开发人员频繁地(一天多次)将代码合并到主干。每次合并都通过自动化构建(包括编译、发布、自动化测试)来验证,从而尽早发现集成错误。

  • 关键步骤: Lint -> Unit Test -> Build。

CD (Continuous Delivery - 持续交付)

在 CI 的基础上,将构建后的产物(Artifacts)自动发布到类生产环境。确保软件在任何时候都可以被发布。

CD (Continuous Deployment - 持续部署)

更进一步,通过所有测试后,自动将代码部署到生产环境,无需人工干预。

2. 主流 CI/CD 工具

GitHub Actions

目前最流行的选择,与 GitHub 深度集成。

  • Workflow: .github/workflows/main.yml
  • Job: 任务运行的容器环境。
  • Step: 具体的执行步骤 (Uses Action / Run Script)。
yaml
name: CI
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
        with:
          node-version: '18'
      - run: npm ci
      - run: npm test
      - run: npm run build

GitLab CI

企业私有化部署的首选。

  • 配置: .gitlab-ci.yml
  • 只有 Runner 概念,配置极其灵活。

Jenkins

老牌工具,基于 Java。插件生态极其丰富,但配置复杂(Groovy pipeline),维护成本较高。

3. 流水线设计最佳实践

  1. Fail Fast (快速失败): 把耗时短的检查(Lint, Type Check)放在前面,如果失败立即停止,节省资源。
  2. Cache Dependencies (缓存依赖): 缓存 node_modules,避免每次构建都重新 npm install。
  3. Artifacts (产物归档): 将 Build 生成的 dist/ 目录保存下来,供后续部署步骤使用,保证“一次构建,多次部署”。
  4. Parallel Execution (并行执行): 同时运行不同的 Test Suite。

4. 常见 CI 任务

  • Linting: ESLint, Stylelint.
  • Type Checking: tsc --noEmit.
  • Testing: Unit Tests, E2E Tests.
  • Building: Webpack/Vite build.
  • Preview: 为每个 Pull Request 自动生成预览链接 (Deploy Preview)。

MIT Licensed | Keep Learning.