流水线配置复用
利用 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、支持嵌套 include
,include
的本地文件路径相对于项目根目录。
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
# 进阶示例
include
和imports
混合使用
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