ARTICLE · 软件编程
第 9 篇:CI/CD 实战 — 每次 Push 自动跑测试、出报告、发通知
一语总结本文详细演示如何用 GitHub Actions 搭建 Playwright 自动化测试全流水线,涵盖类型检查、代码规范、3-Shard 并行测试、Allure 报告合并与 GitHub Pages 发布,并分享免费额度与 TS 配置等实战避坑经验。
文章是「Playwright 实战教程」系列第 9 篇,聚焦 CI/CD 工程化落地。作者从零开始构建 .github/workflows/playwright.yml,分步骤讲解:首先验证本地三条核心命令(typecheck、lint、test)可运行;接着配置 Type Check 与 Lint 两个前置 Job 拦截低级错误;核心测试 Job 采用 matrix 策略实现 3-Shard 并行,配合 fail-fast: false 与 if: always() 保证失败时仍上传报告产物;随后新增 merge-reports Job 下载多 Shard 产物、用 simple-elf/allure-report-action 生成历史趋势报告、再通过 peaceiris/actions-gh-pages 部署到 GitHub Pages 供团队随时查看;最后补充 schedule 与 workflow_dispatch 实现定时巡检与手动触发。文末「踩坑记」极具实战价值:揭示 GitHub Actions 私有仓库免费额度计算、Ubuntu runner 必须加 --with-deps 安装浏览器依赖、TypeScript 6.x 对 moduleResolution: node 与 baseUrl 的破坏性报错及临时规避方案。全文配套完整可运行的 YAML 与 ESLint Flat Config 代码,可直接复用于生产项目。
- CI 流水线应以 Type Check 与 Lint 为前置关卡,阻断低质量代码进入测试阶段。
作者将 type-check 与 lint 置于 test 之前,并通过 `needs` 依赖强制顺序执行,避免因语法或类型错误浪费昂贵的 CI 分钟数与浏览器启动时间。
- 利用 Playwright 原生 `--shard` 与 GitHub Actions `matrix` 实现 3 倍测试加速。
配置 `shardIndex: [1,2,3]` 与 `shardTotal: [3]` 矩阵,配合 `fail-fast: false` 确保单分片失败不影响其他分片继续执行,`if: always()` 保证失败现场产物(HTML 报告、Allure 结果、Trace)完整上传。
- Allure 多报告合并与 GitHub Pages 发布实现团队零成本共享历史趋势。
merge-reports Job 使用 `actions/download-artifact` 合并 3 个分片的 `allure-results`,再经 `allure-report-action` 生成含历史趋势的静态站点,最终推送至 `gh-pages` 分支,团队成员无需本地环境即可通过固定 URL 查看历次构建报告。
- 定时触发与手动触发补全 Push 之外的运行场景,兼顾第三方依赖不稳定与临时验证需求。
针对 ParaBank 等外部被测服务可能间歇性故障,配置每日 UTC 0:00 定时跑批建立健康度基线;`workflow_dispatch` 允许开发者在 Actions 页面手动指定环境参数触发,适配 Docker 等多环境验证。
- 实战避坑指南覆盖额度控制、浏览器依赖、TS 版本升级破坏性变更三大高频痛点。
量化免费额度:3-Shard × 5 分钟 × 每日一次 ≈ 450 分钟/月,远低于 2000 分钟上限;Ubuntu runner 必须 `npx playwright install --with-deps chromium`;TS 6.x 将 `moduleResolution: node` 判为硬错误,临时用 `ignoreDeprecations: "6.0"` 过渡,新项目建议直接用 `bundler` 或 `node16`。
第 9 篇:CI/CD 实战 — 每次 Push 自动跑测试、出报告、发通知
文章是「Playwright 实战教程」系列第 9 篇,聚焦 CI/CD 工程化落地。作者从零开始构建 .github/workflows/playwright.yml,分步骤讲解:首先验证本地三条核心命令(typecheck、lint、test)可运行;接着配置 Type Check 与 Lint 两个前置 Job 拦截低级错误;核心测试 Job 采用 matrix 策略实现 3-Shard 并行,配合 fail-fast: false 与 if: always() 保证失败时仍上传报告产物;随后新增 merge-reports Job 下载多 Shard 产物、用 simple-elf/allure-report-action 生成历史趋势报告、再通过 peaceiris/actions-gh-pages 部署到 GitHub Pages 供团队随时查看;最后补充 schedule 与 workflow_dispatch 实现定时巡检与手动触发。文末「踩坑记」极具实战价值:揭示 GitHub Actions 私有仓库免费额度计算、Ubuntu runner 必须加 --with-deps 安装浏览器依赖、TypeScript 6.x 对 moduleResolution: node 与 baseUrl 的破坏性报错及临时规避方案。全文配套完整可运行的 YAML 与 ESLint Flat Config 代码,可直接复用于生产项目。
文章金句
"CI(持续集成)的本质就一句话:把"人记得做的事"变成"Push 就自动做的事"。
"类型都过不了,跑测试就是浪费 CI 时长。
"没这个(if: always()),挂了就什么证据都没留下。
"教训:定时设成每天一次足够。想更频繁监控,用 workflow_dispatch 手动触发,或推送时自动跑一次。