配了三年 CI,今天才发现 workflow 跑得慢从来不是 workflow 的错——2026 新引擎把这件事用 85% 的数字彻底原生化了
写过 CI 的人都踩过这个坑——一个 monorepo 100 个服务的 workflow,每次跑都要等 20 多分钟,然后发现 68% 的时间都在等那些本来可以并行的 job 在那儿排队。团队第一反应是加缓存、换大机器、把 job 拆细。但问题从来不在 workflow 本身——是跑 workflow 的引擎算不动你的 DAG。
GitHub 2026 年 4 月发布的 Actions 新 Pipeline Engine,把这件事用三个数字彻底翻了:85% 中位运行时削减、70% 成本节省、93% 依赖解析加速。
旧引擎在哪儿卡住了
GitHub Actions 旧调度器处理 job 依赖是 O(n²) 顺序解析。100 个 job 的工作流,依赖解析就要 120 秒。更要命的是它按顺序处理每个 job,500ms 才更新一次调度决策——如果下一个可并行的 job 在第 501ms 才被扫到,整个调度就空等一拍。
结果就是:runner 闲着等 job,job 排着队等 runner,两头都在干瞪眼。
新引擎怎么跑起来的
GitHub Actions 2026 Engine(v3.2.0+)底层是分布式 job graph 架构,三个核心组件一起把 O(n²) 压到 O(n log n):
Job Graph Resolver:解析 workflow YAML,构建完整 DAG,把有相同依赖子图的 job 打包进同一个并行组。100 个 job 解析只需 8 秒。
Dynamic Parallel Scheduler:每 500ms 评估所有待处理 job,优先调度等待 job 最多的并行组,把 runner 闲置时间从 14.9 分钟压到 0.6 分钟。
Elastic Resource Allocator:支持单 workflow 1024 并发 runner(旧引擎上限 256),与 AWS/GCP/Azure 集成,30 秒内完成云 runner 扩容,不再需要手动配置静态 runner 组。
benchmark 数据(100-job monorepo,10,000+ 次运行):
| 指标 | 旧引擎(v2.4) | 新引擎(v3.2) | 改善 |
|---|---|---|---|
| 中位运行时 | 22.0 min | 3.1 min | 85.9% |
| Runner 闲置时间 | 14.9 min | 0.6 min | 95.9% |
| 单 workflow 消耗 minutes | 22.0 min | 3.1 min | 85.9% |
| 最大并发 job 数 | 256 | 1024 | 300% |
| 依赖解析耗时 | 120s | 8s | 93.3% |
迁移到新引擎的团队反馈:中型组织(50-100 工程师)每月节省约 $2,400 Actions 分钟费用。
怎么切过去
新引擎向后兼容所有 v2.x workflow,切换只需要两步:
第一步:给目标 workflow 加上 2026-engine label:
jobs:
build:
runs-on: ubuntu-latest
labels:
- 2026-engine
steps:
- uses: actions/checkout@v4
- run: npm ci && npm run build
第二步:用 GitHub API 验证是否已在跑新引擎:
gh api repos/{owner}/{repo}/actions/runs
--jq ".workflow_runs[0].engine_version"
# 期望输出: 3.2.0 或更高
新引擎默认在所有 GitHub-hosted runner 上运行(ubuntu-latest 等),自托管 runner 需要升级到 v3.2.0+ 才能支持动态资源分配和弹性扩缩。
三个坑
新引擎不是银弹,有三件事要心里有数:
自托管 runner 升级门槛:v3.2.0 以下的自托管 runner 无法参与新引擎的动态分配,如果团队依赖自托管 runner,得先升级 agent 版本。
不是所有 job 都能并行:被 needs 强依赖链锁住的 job 必须串行,新引擎加速的是那些「你以为有依赖但其实没有」的 job——用 dorny/paths-filter 先把不必跑的 job 跳过,效果更明显。
弹性扩缩有账单风险:1024 并发听着爽,但每多跑一个 runner 就多烧一分钟,建议配 concurrency 限制总 runner 数:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
max-parallel: 64
cancel-in-progress: true
下一步
别急着全量迁移,先找一个耗时最长的 workflow,加上 2026-engine label,对比一周数据——如果中位运行时降了 50% 以上,说明你的 workflow 受益于新引擎的 DAG 并行调度。接下来把 paths-filter 配上,把不必要的 job 跳过,再把静态 runner 组替换成弹性扩缩。一套下来,账单数字会比体感更快变好看。
评论区
登录后可评论。