pipeline-variable-management
SKILL.md
流水线变量管理完整指南
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 |
Weekly Installs
12
Repository
tencentblueking/bk-ciFirst Seen
3 days ago
Installed on
claude-code8
gemini-cli8
windsurf7
opencode7
antigravity7
trae6