流水线变量管理完整指南
Skill 概述
Skill 名称: Pipeline Variable Management
适用场景: 流水线变量的全生命周期管理与字段扩展
重要性: ⭐⭐⭐⭐ (高优先级)
文档版本: 2.0
最后更新: 2025-01
流水线变量是 BK-CI 流水线中的核心功能,支持在流水线编排、构建执行过程中动态传递和管理数据。本 Skill 提供变量管理的两大核心主题:
- •变量生命周期 - 变量从创建到销毁的完整流程
- •变量字段扩展 - 如何扩展变量的数据结构
一、变量管理架构概览
1.1 变量的定义与作用
流水线变量是流水线中用于存储和传递数据的核心机制,支持:
- •✅ 配置参数化 - 将流水线配置中的固定值替换为变量
- •✅ 数据传递 - 在不同 Stage/Job/Task 之间传递数据
- •✅ 动态计算 - 运行时动态生成和更新变量值
- •✅ 用户输入 - 手动触发时由用户输入参数值
- •✅ 系统内置 - 提供系统级别的预定义变量
1.2 变量的两种核心模型
BK-CI 中流水线变量存在两种数据模型的双向转换:
1. BuildFormProperty(后端内部模型)
- •位置:
common-pipeline/src/main/kotlin/.../BuildFormProperty.kt - •用途: 微服务内部使用,数据库存储格式
- •特点: 完整的字段定义,包含 Swagger 注解
- •应用: Process 模块内部处理、数据持久化
2. Variable(YAML 模型)
- •位置:
common-pipeline-yaml/src/main/kotlin/.../yaml/v3/models/Variable.kt - •用途: YAML 流水线定义,对外 API 交互
- •特点: Jackson 注解,支持 JSON 序列化
- •应用: PAC 流水线、OpenAPI 接口
3. 转换器(VariableTransfer)
- •位置:
common-pipeline-yaml/src/main/kotlin/.../yaml/transfer/VariableTransfer.kt - •职责: 实现
BuildFormProperty↔Variable的双向转换 - •核心方法:
- •
transfer(BuildFormProperty): Variable- 内部模型 → YAML 模型 - •
transfer(Variable): BuildFormProperty- YAML 模型 → 内部模型
- •
1.3 变量的存储与传递
┌─────────────────────────────────────────────────────────────────┐
│ 变量存储与传递架构 │
└─────────────────────────────────────────────────────────────────┘
┌──────────────────┐
│ 流水线配置存储 │ BuildFormProperty
│ (T_PIPELINE_*) │ 存储在 Model JSON 中
└────────┬─────────┘
│
▼
┌──────────────────┐
│ 构建启动 │ 读取变量定义
│ (StartBuild) │ 初始化变量值
└────────┬─────────┘
│
▼
┌──────────────────┐
│ 运行时变量存储 │ T_PIPELINE_BUILD_VAR
│ (BuildVar) │ 构建级别的变量实例
└────────┬─────────┘
│
├─────────────────┬─────────────────┐
▼ ▼ ▼
┌────────────────┐ ┌────────────────┐ ┌────────────────┐
│ Stage 1 │ │ Stage 2 │ │ Stage 3 │
│ 继承 + 新增 │ │ 继承 + 更新 │ │ 继承 + 输出 │
└────────────────┘ └────────────────┘ └────────────────┘
二、两大核心主题
2.1 变量生命周期管理
覆盖内容:
- •🔄 变量创建与初始化
- •📦 变量存储机制
- •🔀 变量传递与继承
- •🔄 变量动态更新
- •🔍 变量查询与调试
典型场景:
- •理解变量在构建执行过程中的完整流转
- •开发新的变量初始化逻辑
- •调试变量传递问题
- •实现变量的动态更新功能
查阅文档: reference/1-lifecycle.md (1414 行)
2.2 变量字段扩展
覆盖内容:
- •🆕 新增变量字段
- •🔧 字段类型定义
- •🔄 模型转换处理
- •🎯 前后端字段同步
典型场景:
- •为变量添加新的属性字段
- •扩展变量类型
- •处理历史数据兼容性
- •同步前后端字段定义
查阅文档: reference/2-extension.md (534 行)
三、使用指南
3.1 场景 1:理解变量生命周期
问题示例:
- •"变量值是如何从流水线配置传递到构建执行的?"
- •"插件如何获取和更新变量值?"
- •"变量的作用域是如何控制的?"
操作: 查阅 reference/1-lifecycle.md
内容包含:
- •变量生命周期全景图
- •六个关键阶段详解
- •变量存储表结构
- •变量传递机制
- •调试方法与常见问题
3.2 场景 2:扩展变量字段
问题示例:
- •"如何为变量添加一个新的
allowModify字段?" - •"如何扩展变量的可选值列表?"
- •"如何确保新字段在 YAML 和内部模型之间正确转换?"
操作: 查阅 reference/2-extension.md
内容包含:
- •变量字段扩展完整路径
- •BuildFormProperty 字段定义
- •Variable (YAML) 字段定义
- •VariableTransfer 转换器实现
- •前端字段同步
- •测试与验证
四、核心类与文件速查
4.1 变量定义类
| 类名 | 位置 | 用途 |
|---|---|---|
BuildFormProperty | common-pipeline/.../BuildFormProperty.kt | 后端内部变量模型 |
Variable | common-pipeline-yaml/.../Variable.kt | YAML 变量模型 |
VariableTransfer | common-pipeline-yaml/.../VariableTransfer.kt | 模型转换器 |
4.2 变量处理服务
| 类名 | 位置 | 职责 |
|---|---|---|
PipelineVariableService | process/biz-base/.../PipelineVariableService.kt | 变量业务逻辑 |
BuildVariableService | process/biz-base/.../BuildVariableService.kt | 构建变量管理 |
VariableAcrossInfoUtil | process/biz-base/.../VariableAcrossInfoUtil.kt | 跨 Job 变量传递 |
4.3 数据库表
| 表名 | 用途 |
|---|---|
T_PIPELINE_BUILD_VAR | 构建级别的变量实例(运行时) |
T_PIPELINE_SETTING | 流水线配置(包含变量定义) |
T_PIPELINE_MODEL_TASK | 插件配置(引用变量) |
五、开发流程
5.1 变量功能开发流程
1. 明确需求 ↓ 2. 确定涉及的生命周期阶段 │ → 查阅 reference/1-lifecycle.md ↓ 3. 是否需要扩展字段? ├─ 是 → 查阅 reference/2-extension.md │ 执行字段扩展流程 ↓ 4. 实现后端逻辑 │ → 修改 Service/DAO 层 ↓ 5. 前端同步(如需) │ → 更新 Vue 组件 ↓ 6. 测试验证 │ → 单元测试 + 集成测试 ↓ 7. 文档更新
5.2 常见开发任务
| 任务 | 参考文档 | 关键类 |
|---|---|---|
| 新增变量类型 | 2-extension.md | BuildFormProperty, Variable |
| 变量初始化逻辑 | 1-lifecycle.md | BuildVariableService |
| 跨 Job 传递 | 1-lifecycle.md | VariableAcrossInfoUtil |
| 变量权限控制 | 1-lifecycle.md | PipelineVariableService |
| 变量表达式解析 | - | utility-components Skill (reference/2-expression-parser.md) |
六、与其他 Skill 的关系
6.1 依赖的 Skill
- •
pipeline-model-architecture- 理解变量在 Model 中的位置 - •
process-module-architecture- 理解变量处理的代码架构 - •
utility-components(reference/2-expression-parser.md) - 变量引用的表达式解析
6.2 被引用的场景
- •PAC 流水线 → 变量在 YAML 中的定义
- •流水线编排 → 变量的创建和配置
- •构建执行 → 变量的初始化和传递
- •插件开发 → 插件如何读取和更新变量
七、详细文档导航
| 文档 | 内容 | 行数 | 文件大小 |
|---|---|---|---|
| 1-lifecycle.md | 变量生命周期完整流程 | 1414 | 78.7KB |
| 2-extension.md | 变量字段扩展指南 | 534 | 20.2KB |
使用建议:
- •初学者:先阅读本文档了解整体架构,再深入 1-lifecycle.md
- •开发者:根据具体开发任务直接查阅对应的 reference 文档
- •调试:优先查阅 1-lifecycle.md 中的调试章节
八、常见问题 FAQ
Q1: 变量和参数有什么区别?
A: 在 BK-CI 中,"变量"和"参数"本质上是同一个概念,都是 BuildFormProperty。区别在于使用场景:
- •参数:流水线启动时用户输入的变量
- •变量:流水线内部定义和使用的变量
Q2: 如何实现跨 Stage 传递变量?
A: 查阅 reference/1-lifecycle.md 中的"阶段四:跨容器传递"章节,了解 VariableAcrossInfoUtil 的使用。
Q3: 新增字段后前端不显示怎么办?
A: 按照 reference/2-extension.md 的"步骤 4:前端字段同步"章节,确保前端 Vue 组件已同步更新。
Q4: 变量值为空或不正确?
A: 查阅 reference/1-lifecycle.md 中的"调试方法"章节,使用日志和数据库排查。
九、版本历史
| 版本 | 日期 | 更新内容 |
|---|---|---|
| 2.0 | 2025-01 | 整合 pipeline-variable-lifecycle 和 pipeline-variable-extension,采用 reference 结构 |
| 1.x | 2024-12 | 独立的两个 Skill |