流水线配置复用

利用 include 参数,可以在当前文件导入当前仓库或其他仓库上的文件。依此可以对 CI 文件进行拆分,方便服用和维护。

不同文件流水线配置合并采用对象 merge 的模式:

  • 数组(Array)和数组(Array)合并:子元素追加
  • 对象(Map)和对象(Map)合并:同名 key 覆盖
  • 数组(Array)和对象(Map)合并:仅保留数组
  • 对象(Map)和数组(Array)合并:仅保留数组

引用配置文件权限控制参考 配置文件引用鉴权

# 使用示例

include:
  # 1、可直接传入配置文件路径
  - "https://xxx/template.yml"
  - "template.yml"
  # 2、可传入一个对象。
  # path: 配置文件路径
  # ignoreError:未读取到配置文件是否抛出错误。true 不抛出错误;false 抛出错误。默认为 false
  - path: "template1.yml"
    ignoreError: true
  # 3、可传入一个对象
  # config: 传入 yaml 配置
  - config:
      main:
        push:
          - stages:
              - name: echo
                script: echo "hello world"

提示

1、本地的 .cnb.yml 会覆盖 include 中的配置,include 数组中后面的配置会覆盖前面的配置。

2、支持嵌套 includeinclude 的本地文件路径相对于项目根目录。

3、最多支持 include 50个配置文件。

4、不支持引用 submodule 中的文件。

5、不支持跨文件使用 Yaml 锚点功能。

merge 示例:

# template.yaml
main:
  push:
    pipeline_2:
      env:
        ENV_KEY1: xxx
        ENV_KEY3: inner
      services:
        - docker
      stages:
        - name: echo
          script: echo 222
# .cnb.yml
include:
  - https://xxx/template.yml

main:
  push:
    pipeline_1:
      stages:
        - name: echo
          script: echo 111
    pipeline_2:
      env:
        ENV_KEY2: xxx
        ENV_KEY3: outer
      stages:
        - name: echo
          script: echo 333

merge 后的配置



 
 
 
 





 
 

 
 



main:
  push:
    pipeline_1: # key不存在,合并时新增
      stages:
        - name: echo
          script: echo 111
    pipeline_2:
      env:
        ENV_KEY1: xxx
        ENV_KEY2: xxx # key不存在,合并时新增
        ENV_KEY3: outer # 同名 key, 合并时覆盖
      services:
        - docker
      stages: # 数组在合并时,追加
        - name: echo
          script: echo 222
        - name: echo
          script: echo 333

# 进阶示例

  • includeimports 混合使用

imports 是导入其他文件作为环境变量,include 则是导入合并其他文件的流水线配置。

# .cnb.yml
include:
  - https://xxx/.cnb.common.yml
# .cnb.env.yml
CODE_SCAN_PATH: ./src
CDN_PATH: ./dist/cdn










 
 






# https://xxx/.cnb.common.yml
main:
  push:
    - services:
        - docker
      label:
        type:
          - MASTER
        class:
          - MAIN
      imports:
        - .cnb.env.yml # 通过 `imports` 的方式来注入环境变量
      stages:
        - name: 查看注入的环境变量
          script:
            - echo $CDN_PATH
            - echo $CODE_SCAN_PATH