示例说明
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 }}