OVH/CDS 项目中的变量系统详解
变量系统概述
在 OVH/CDS 项目中,变量系统是整个持续交付平台的核心功能之一,它允许开发者在不同层级定义和使用变量,从而实现配置的灵活管理和复用。变量系统支持多种数据类型,并提供了丰富的内置变量和辅助函数,极大简化了持续交付流程的配置工作。
变量的作用域层级
CDS 的变量系统采用层级化管理,支持在以下三个层级定义变量:
- 项目级变量:适用于整个项目的全局变量
- 环境级变量:针对特定环境的配置变量
- 应用级变量:与具体应用相关的变量
这种层级设计既保证了配置的灵活性,又提供了足够的隔离性,使得不同环境和应用可以拥有各自的配置而不互相干扰。
变量类型详解
CDS 支持以下六种变量类型,满足不同场景的需求:
- 字符串(String):普通文本内容
- 文本(Text):多行文本内容
- 布尔值(Boolean):true/false 值
- 数值(Number):数字类型
- 密码(Password):敏感信息,会进行加密处理
- 密钥(Key):用于认证的密钥信息
变量引用语法
CDS 采用统一的 {{.VAR}}
格式引用变量,并通过前缀区分不同来源的变量:
- 动作变量:
{{.VAR}}
- 内置变量:
{{.cds.VAR}}
- Git相关变量:
{{.git.VAR}}
- 流水线变量:
{{.cds.pip.VAR}}
- 应用变量:
{{.cds.app.VAR}}
- 环境变量:
{{.cds.env.VAR}}
- 项目变量:
{{.cds.proj.VAR}}
- 构建时导出变量:
{{.cds.build.VAR}}
内置变量列表
CDS 为每个构建过程自动生成以下内置变量:
| 变量名 | 描述 | |--------|------| | {{.cds.environment}}
| 当前环境名称 | | {{.cds.application}}
| 当前应用名称 | | {{.cds.job}}
| 当前作业名称 | | {{.cds.manual}}
| 是否为手动触发(true/false) | | {{.cds.pipeline}}
| 当前流水线名称 | | {{.cds.project}}
| 当前项目键名 | | {{.cds.run}}
| 当前工作流运行编号(如3.0) | | {{.cds.run.number}}
| 主运行编号(如3) | | {{.cds.run.subnumber}}
| 子运行编号(如4) | | {{.cds.stage}}
| 当前阶段名称 | | {{.cds.status}}
| 前次流水线状态(Success/Failed) | | {{.cds.triggered_by.*}}
| 触发者信息(邮箱、全名、用户名) | | {{.cds.version}}
| 当前版本号(等同于run.number) | | {{.cds.workflow}}
| 当前工作流名称 | | {{.cds.workspace}}
| 当前作业的工作目录 | | {{.payload}}
| 当前负载的JSON格式 |
特殊变量详解
cds.version 变量
{{.cds.version}}
是一个特殊的内置变量,它会在工作流运行过程中通过各个流水线传递,确保整个流程中的版本一致性。
变量导出机制
在脚本步骤中,可以使用以下命令导出变量:
$ worker export varname thevalue
导出的变量可以在以下场景使用:
- 当前作业中:
{{.cds.build.varname}}
- 同一流水线的后续阶段:
{{.cds.build.varname}}
- 后续流水线中:
{{.workflow.pipelineName.build.varname}}
Shell 环境变量
除密码类型外,所有 CDS 变量都可以作为普通环境变量使用,两种引用方式等价:
echo '{{.cds.parent.application}}'
echo $CDS_PARENT_APPLICATION
Git 相关变量
对于与 Git 集成的场景,CDS 提供了丰富的 Git 变量:
| 变量名 | 描述 | |--------|------| | {{.git.hash}}
| 推送后最新提交的SHA | | {{.git.hash.short}}
| SHA的简短版本 | | {{.git.branch}}
| 触发运行的分支名 | | {{.git.tag}}
| 触发运行的标签名 | | {{.git.author}}
| 最新提交作者 | | {{.git.message}}
| 最新提交信息 | | {{.git.repository}}
| 仓库名称 |
对于 Bitbucket Server 还提供 Pull Request 相关变量,如目标分支信息、PR ID、评审信息等。
流水线参数
流水线可以定义参数,这些参数可以在工作流中设置值:
version: v1.0
name: build
parameters:
param_name:
type: string
default: default_value
在工作流中设置参数值:
workflow:
the-pipeline:
pipeline: build
parameters:
varname: the-value
注意:流水线参数不支持密码类型,如需使用密码变量,应在项目/应用/环境级别定义。
辅助函数(Helpers)
CDS 提供了一系列辅助函数来修改变量值:
常用辅助函数示例
-
大小写转换:
{{.cds.application | upper}} # 转为大写 {{.cds.application | lower}} # 转为小写
-
默认值处理:
{{.cds.app.foo | default "defaultValue"}}
-
字符串替换:
{{.cds.application | replace "_" "."}}
辅助函数链式调用
可以组合多个辅助函数:
{{.cds.app.foo | upper | lower}}
{{.cds.app.foo | default .cds.app.bar | default .cds.app.biz | upper }}
完整辅助函数列表
CDS 支持丰富的辅助函数,包括但不限于:
- 字符串处理:trim, substr, repeat, replace
- 格式转换:toJSON, toPrettyJSON
- 编码解码:b64enc, b64dec
- 随机生成:randAlphaNum, randNumeric
- 格式转换:snakecase, camelcase
- 其他实用函数:quote, indent, escape等
最佳实践
- 敏感信息处理:始终将密码等敏感信息存储为密码类型变量
- 变量命名规范:采用一致的命名约定,如使用下划线分隔
- 默认值使用:为关键变量设置合理的默认值
- 辅助函数组合:合理组合辅助函数简化复杂处理
- 变量作用域:根据使用范围选择适当的变量层级
通过合理利用 CDS 的变量系统,可以大幅提升持续交付流程的灵活性和可维护性。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考