持续集成与持续交付 (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 buildGitLab CI
企业私有化部署的首选。
- 配置:
.gitlab-ci.yml。 - 只有 Runner 概念,配置极其灵活。
Jenkins
老牌工具,基于 Java。插件生态极其丰富,但配置复杂(Groovy pipeline),维护成本较高。
3. 流水线设计最佳实践
- Fail Fast (快速失败): 把耗时短的检查(Lint, Type Check)放在前面,如果失败立即停止,节省资源。
- Cache Dependencies (缓存依赖): 缓存
node_modules,避免每次构建都重新 npm install。 - Artifacts (产物归档): 将 Build 生成的
dist/目录保存下来,供后续部署步骤使用,保证“一次构建,多次部署”。 - 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)。