← 中文资源

简体中文版本

GitHub Actions 矩阵 CI 流水线

定义多版本 Node 矩阵的 CI 流水线:依赖缓存加速、失败不熔断其余版本、部署任务依赖测试通过且仅主干触发。

阅读英文原文

示例说明

CI 流水线把质量门禁变成提交的硬约束。矩阵策略让同一套测试在两个 LTS 版本上各跑一遍,提前暴露运行时差异;fail-fast 关闭后单版本失败不影响其他版本的完整反馈。pnpm 缓存让依赖安装从分钟级降到秒级。部署 job 用 needs 与 if 双条件:测试全绿且仅主干推送才进入生产环境。

技术要点

  • 矩阵覆盖多个 Node LTS 版本
  • cache 复用 pnpm store 加速安装
  • needs 加 if 门禁部署触发条件

代码解读

workflow 在 push 与 PR 两种事件上触发;test job 的步骤依次执行检出、配 Node、启用 corepack、锁文件安装、lint、单元与 E2E 测试。deploy job 声明 production environment 以获得部署审批保护,secrets 注入的令牌只在部署步骤暴露。

使用建议

action 版本用主版本号锁定,避免上游突变。敏感凭据一律走 environment secrets。缓存 key 要包含锁文件哈希,依赖变更时自动失效重建。

代码示例

name: ci

on:
  push: { branches: [main] }
  pull_request: { branches: [main] }

jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        node: [20, 22]
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.node }}
          cache: pnpm
      - run: corepack enable
      - run: pnpm install --frozen-lockfile
      - run: pnpm lint
      - run: pnpm test:unit
      - run: pnpm test:e2e
        continue-on-error: false

  deploy:
    needs: test
    if: github.ref == 'refs/heads/main'
    runs-on: ubuntu-latest
    environment: production
    steps:
      - uses: actions/checkout@v4
      - run: pnpm build
      - run: pnpm run deploy
        env:
          DEPLOY_TOKEN: ${{ secrets.DEPLOY_TOKEN }}