3、Pipeline可视化核心概念:节点(Node)、边(Edge)、DAG(有向无环图)、任务依赖关系
好,咱们今天聊点实在的。
Pipeline 可视化,说白了就是把一堆任务画成一张图。你一看这张图,就知道谁先干、谁后干、谁和谁可以一起干。我刚开始接触这玩意儿的时候,觉得不就是画个流程图嘛,有啥难的?后来被坑了几次才明白——这里面的门道,比你想的深。
3.1 节点(Node)—— 每个任务就是一个节点
节点,就是 Pipeline 里的最小执行单元。你可以把它理解成一个“动作”。
- 一个节点 = 一个任务。比如“拉取代码”、“编译”、“跑测试”、“部署”。
- 节点有状态:等待中、运行中、成功、失败、跳过。
- 节点有输入输出:上游节点产出的东西,下游节点拿来用。
我个人习惯:给每个节点起一个“动词+名词”的名字。比如“编译前端代码”、“部署到测试环境”。别用“步骤1”、“步骤2”这种名字——三个月后你自己都看不懂。
我在项目中遇到过一件事:有个同事把所有逻辑塞进一个节点里,结果那个节点跑了40分钟才失败。排查问题?根本不知道是哪个子步骤挂了。后来我们拆成10个小节点,每个节点只干一件事。失败时一眼就能定位。
小技巧:节点粒度控制在“5分钟内能跑完”最合适。太粗了不好排查,太细了管理成本高。
3.2 边(Edge)—— 节点之间的连线就是边
边,就是节点之间的“箭头”。它表示一个节点执行完后,下一个节点才能开始。
你想想看,如果没有边,所有节点就是一堆散沙。有了边,它们才有了顺序和逻辑。
- 有向边:箭头从上游指向下游。A → B,表示A完成后B才能开始。
- 条件边:根据上游结果决定走哪条路。比如“测试通过”走部署分支,“测试失败”走修复分支。
- 默认边:最简单的顺序执行,一条线串下来。
注意:边不能形成循环。A → B → C → A 这种,Pipeline 会直接报错。嗯,这就是 DAG 的规矩。
我曾经踩过一个坑:在可视化编辑器里拖拽节点时,不小心把两个节点连成了双向箭头。结果 Pipeline 引擎直接崩溃,日志里就一句话:“Cycle detected”。排查了半小时才发现是手滑了。
3.3 DAG(有向无环图)—— 整个 Pipeline 的骨架
DAG,全称 Directed Acyclic Graph。翻译过来就是“有方向、没有环的图”。
为什么必须是 DAG?
- 有向:任务有明确的先后顺序。你不能让“部署”跑到“编译”前面去。
- 无环:不能出现死循环。A依赖B,B依赖C,C又依赖A——这活儿没法干。
说白了,DAG 就是一张“谁先谁后”的路线图。你从起点出发,沿着箭头走,一定能走到终点,而且不会走回头路。
核心要点:DAG 保证了 Pipeline 的可终止性。只要图是无环的,任务就一定能跑完(除非某个节点挂了)。
我记得有一次给客户设计部署 Pipeline,他们要求“如果测试失败就重跑测试,最多重试3次”。这其实不是 DAG 能直接表达的——因为重试意味着循环。我们的解决方案是:把“重试”拆成3个独立的节点,每个节点都连到同一个“测试”节点。这样既实现了重试逻辑,又保持了无环结构。
3.4 任务依赖关系 —— 谁等谁,谁靠谁
依赖关系,就是节点之间的“等待规则”。
常见的依赖类型:
| 依赖类型 | 说明 | 示例 |
|---|---|---|
| 顺序依赖 | B 必须等 A 完成 | 先编译,再部署 |
| 并行依赖 | A 和 B 可以同时跑 | 同时跑单元测试和代码扫描 |
| 条件依赖 | 根据 A 的结果决定是否跑 B | 测试通过才部署 |
| 数据依赖 | B 需要 A 产出的文件 | 编译产物传给部署节点 |
避坑指南:我曾经把“数据依赖”和“顺序依赖”搞混了。两个节点明明没有先后关系,但因为共享同一个输出目录,结果跑出了脏数据。后来我强制要求:每个节点只能读写自己的专属目录,跨节点传数据必须通过显式的 artifact 传递。
3.5 一张图看懂核心概念
下面这张 SVG 图,把节点、边、DAG、依赖关系全串起来了。你一看就明白。
你看这张图:
- “拉取代码”是起点,它同时连向“编译”和“代码扫描”。这两个节点可以并行跑。
- “编译”完成后触发“单元测试”。
- “单元测试”和“代码扫描”都完成后,才触发“部署”。
- 整个图没有环,从起点到终点只有一条路(或者多条并行路)。
总结一下:节点是任务,边是顺序,DAG 是规则,依赖关系是逻辑。把这四个概念吃透了,Pipeline 可视化你就掌握了八成。
我的经验:刚开始设计 Pipeline 时,别急着画图。先在纸上列出所有任务,然后问自己三个问题:
- 哪些任务必须串行?
- 哪些任务可以并行?
- 失败时怎么处理?
想清楚了再画 DAG,事半功倍。
嗯,核心概念就这些。下一节咱们聊聊怎么用代码定义这些节点和边——到时候你会觉得,可视化不过是锦上添花,真正的功夫在逻辑设计上。
公众号:蓝海资料掘金营,微信deep3321