首页/开发/CI/CD 与发布速查/GitHub Actions 路径过滤与必需检查
工具链要点63 条

GitHub Actions 路径过滤与必需检查

push/pull_request 可按 paths 过滤触发范围节省算力;但与分支保护的必需状态检查叠加时,未触发的工作流会阻塞合并。

CI/CD 与发布速查开发更新于 2026-10-13

路径过滤是什么

push 与 pull_request 触发可按 paths 或 paths-ignore 过滤:不相关改动的推送不创建运行,节省算力与排队时间。过滤的目的是省钱省时间,不是省检查:任何被跳过的检查都要确认它不会成为合并路径上的硬门槛。陷阱在于与分支保护的必需状态检查叠加:路径不匹配时工作流不触发,对应的必需检查永远缺席,PR 会被卡住无法合并。对策是保留一个总是运行的轻量占位作业来维持同名检查。

基本信息

写法paths: ['src/**'] 或 paths-ignore 列表
效果不满足路径条件则不创建对应运行
陷阱必需检查长期缺失导致 PR 无法合并
对策保留总是运行的轻量占位作业维持检查名
覆盖范围包含锁文件与工作流自身文件,避免回归漏跑

典型使用场景

  • 文档仓库:只改 docs 目录不触发构建与测试,节省算力
  • monorepo 分区:按目录过滤,改动哪个包就跑哪个包的流水线
  • 微服务仓库:只改某个服务的目录,只跑该服务的构建与测试
  • 大型前端:改测试文件才跑端到端,改样式只跑单元测试
  • 分支保护配合:为必需检查补齐占位逻辑,保证合并不被卡

路径过滤示例

路径过滤示例
on:
  pull_request:
    paths:
      - 'src/**'   # 源码变更才触发
      - 'package-lock.json'   # 依赖变更也触发
      - '.github/workflows/**'   # 工作流自身变更触发自检

场景与处理

场景现象处理
只改文档必需检查一直 pending补占位作业或移出过滤范围
改动源码正常触发全量检查无需额外处理
规则过细锁文件变更漏跑把关键文件加入 paths
占位作业轻量且总是运行维持必需检查名
把必需检查挂在可被路径跳过的流水线上,不相关的 PR 会全部卡死:要么补占位作业,要么把该检查移出过滤范围。
同一事件不能同时使用 paths 与 paths-ignore:按需要选一种写法,并用注释说明排除逻辑。
paths-ignore 适合「排除少数目录」的场景;改动范围分散时,用 paths 白名单更可控。

易错点

  • 过滤规则过细:锁文件、工作流自身等关键文件变更没有触发流水线
  • 把必需检查叠加到可跳过的流水线上:不相关 PR 全部卡住
  • 同一事件同时写 paths 与 paths-ignore:配置校验不通过,工作流无法运行
  • 占位作业也带过滤条件:等价于没有占位,必需检查仍然缺席

数据来源与参考

  • GitHub Docs《Workflow syntax》(paths)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌