needs 是什么
让作业不等整个阶段完成:needs 直接声明依赖的作业列表,形成有向无环图,上游作业就绪后下游立即开始,不再等同阶段的其他作业。流水线总时长从「阶段串行」压缩为「最长依赖链」,是流水线提速里最直接的结构性手段之一;代价是依赖关系需要显式维护。
基本信息
| 写法 | needs: [job-a, job-b] |
|---|---|
| 空依赖 | needs: [] 让作业从流水线开始即运行 |
| 跨阶段 | 可依赖较早阶段的任意作业 |
| 可视化 | 流水线图中显示依赖箭头 |
| 产物 | 默认下载直接依赖作业的 artifacts,可见集合受限 |
典型使用场景
- 流水线加速:构建完成后测试立即开始,不等整个上阶段。
- 开场作业:空依赖让 lint 之类独立检查立即运行。
- 关键路径压缩:不需要的中间阶段不再阻住主链路。
- 多路径管道:不同发布路径共享前置作业。
- 精确产物:按依赖关系只取必要上游产物。
DAG 依赖
DAG 依赖
build:
stage: build
script: [make build]
test:
stage: test
needs: [build]
script: [make test]
deploy:
stage: deploy
needs: [test]
script: [make deploy]配置要点
| 配置 | 效果 |
|---|---|
| needs: [a] | 依赖指定作业,上游完成即开始 |
| needs: [] | 无依赖,流水线开始即运行 |
| 跨阶段依赖 | 可指向更早阶段的作业 |
| 其余作业 | 未声明 needs 的仍按阶段推进 |
DAG 能把长流水线的总时长从「阶段串行」压缩为「依赖链最长路径」。
needs 会改变产物下载集合:默认只下载直接依赖作业的产物,需要更多时显式声明。
rules 跳过与 needs 要一起验证:依赖目标被跳过时流水线行为会异常,改规则前先在小分支试跑。
依赖箭头就是调试地图:流水线变慢时先看图中关键路径,优化集中在链上最慢的节点。
需要多个上游产物时把依赖列全,而不是复制阶段等待,避免隐性的下载开销。