变量复用

yaml 本身支持变量复用,但不支持跨文件变量复用。

云原生构建 扩展 yaml 自定义标签 reference 可以按属性路径引用变量值,可结合 include 跨文件使用。

TIP

  1. 第一层同名变量会被覆盖,不会合并。本地的 .coding-ci.yml 会覆盖 include 中的变量,include 数组中后面的变量会覆盖前面的变量。
  2. reference 支持嵌套引用,最多 10 层。

# 示例

a.yml

.val1:
  echo1: echo hello
.val2:
  friends:
    - one:
      name: tom
      say: !reference [.val1, echo1]

.coding-ci.yml

include:
  - ./a.yml
.val3:
  size: 100
master:
  push:
    - stages:
        - name: echo hello
          script: !reference [.val2, friends, "0", say]
        - name: echo size
          env:
            SIZE: !reference [".val3", "size"]
          script: echo my size ${SIZE}

解析后相当于:

master:
  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

master:
  push: !reference [.common-pipeline]
test:
  push: !reference [.common-pipeline]

解析后相当于:

master:
  push:
    - stages:
        - name: echo
          script: echo hello
test:
  push:
    - stages:
        - name: echo
          script: echo hello

# vscode配置

安装 vscode yaml (opens new window) 插件后,为了在 vscode 编写带自定义标签 referenceyaml 文件时不报错,需要如下配置:

setting.json

"yaml.customTags": [
    "!reference sequence",
]

TIP

为避免编写时 yaml 插件根据 云原生构建 schema 把第一层变量名当做分支名,有错误提示,reference 所在的第一层变量名可用 . 开头,如:.val1