变量复用
Yaml
本身支持变量复用,但不支持跨文件变量复用。
云原生构建
通过扩展 Yaml
自定义标签 reference
实现按属性路径引用变量值,可结合 include 跨文件使用。
提示
- 第一层同名变量会被覆盖,不会合并。本地的
.cnb.yml
会覆盖include
中的变量,include
数组中后面的变量会覆盖前面的变量。 reference
支持嵌套引用,最多 10 层。
# 示例
a.yml
.val1:
echo1: echo hello
.val2:
friends:
- one:
name: tom
say: !reference [.val1, echo1]
.cnb.yml
include:
- ./a.yml
.val3:
size: 100
main:
push:
- stages:
- name: echo hello
script: !reference [.val2, friends, "0", say]
- name: echo size
env:
SIZE: !reference [".val3", "size"]
script: echo my size ${SIZE}
解析后相当于:
main:
push:
- stages:
- name: echo hello
script: echo hello
- name: echo size
env:
SIZE: 100
script: echo my size ${SIZE}
# 进阶示例
可以将流水线作为整体配置引用:
.common-pipeline:
- stages:
- name: echo
script: echo hello
main:
push: !reference [.common-pipeline]
test:
push: !reference [.common-pipeline]
解析后相当于:
main:
push:
- stages:
- name: echo
script: echo hello
test:
push:
- stages:
- name: echo
script: echo hello
# VSCode 配置
安装 VSCode YAML
插件后,
为了在 VSCode
编写带自定义标签 reference
的 Yaml
文件时不报错,需要如下配置:
setting.json
{
"yaml.customTags": ["!reference sequence"]
}
提示
为避免编写时 Yaml
插件根据 Schema
把第一层变量名当做分支名,
有错误提示,reference
所在的第一层变量名可用 .
开头,如:.var
。
← include