架构概述
Pipeline 是一个用 Go 语言编写的轻量级 CI/CD 流水线执行引擎,类似于 Jenkins、GitLab CI 等工具,但更加轻量和灵活。它支持多种执行引擎、插件系统、服务编排等功能。
核心架构
Pipeline 采用四层架构模型:
Pipeline (管道)
└── Stage (阶段)
└── Job (任务)
└── Step (步骤)- Pipeline: 整个流水线的容器,包含多个阶段
- Stage: 流水线的阶段,可以串行或并行执行多个任务
- Job: 任务单元,包含多个步骤,步骤按顺序执行
- Step: 最小执行单元,执行具体的命令或操作
执行流程
1. Pipeline.prepare() - 准备阶段
├── 创建工作目录
├── 设置环境变量
├── 添加 pre/post 钩子
└── 初始化所有 Stage
2. Pipeline.Run() - 执行阶段
└── 遍历所有 Stage
└── Stage.Run()
└── 根据 RunMode 执行 Job
├── serial: 串行执行
└── parallel: 并行执行
└── Job.Run()
└── 顺序执行所有 Step
└── Step.Run()
└── 根据 Engine 执行命令
3. Pipeline.clean() - 清理阶段
└── 清理工作目录核心模块
Pipeline 模块
主要文件:
pipeline.go: Pipeline 结构定义和基础方法run.go: Pipeline 执行逻辑state.go: Pipeline 状态管理
核心功能:
- 流水线生命周期管理
- 环境变量管理
- 工作目录管理
- Pre/Post 钩子支持
- 超时控制(默认 86400 秒)
Stage 模块
主要文件:
stage.go: Stage 结构定义run.go: Stage 执行逻辑setup.go: Stage 初始化state.go: Stage 状态管理constants.go: 运行模式常量
核心功能:
- 阶段级别的任务编排
- 支持串行(serial)和并行(parallel)两种执行模式
- 环境变量和工作目录继承
Job 模块
主要文件:
job.go: Job 结构定义run.go: Job 执行逻辑setup.go: Job 初始化state.go: Job 状态管理
核心功能:
- 任务级别的步骤管理
- 步骤按顺序执行
- 环境变量和工作目录继承
Step 模块
主要文件:
step.go: Step 结构定义run.go: Step 执行逻辑setup.go: Step 初始化state.go: Step 状态管理plugin.go: 插件支持service.go: 服务编排支持init.go: 执行引擎注册
核心功能:
- 命令执行
- 多种执行引擎支持
- 插件系统
- 语言运行时支持
- 服务编排支持
执行引擎
Pipeline 支持多种执行引擎:
- Host: 在本地主机上直接执行命令(默认)
- Docker: 在 Docker 容器中执行命令
- SSH: 通过 SSH 在远程服务器上执行命令
- IDP: 通过 WebSocket 连接到远程 IDP Agent 执行命令
插件系统
Pipeline 支持插件机制,通过 Docker 镜像封装可复用的功能。插件可以:
- 封装复杂的操作逻辑
- 提供语言运行时支持
- 集成第三方服务
服务编排
Pipeline 支持服务编排,可以启动依赖服务(如数据库、缓存等)供 Pipeline 使用。
配置继承
配置按照以下层级继承:Pipeline → Stage → Job → Step
每一级都会继承父级的配置,子级配置优先级更高。
