流水线配置复用
利用 include
参数,可以将 CI 文件拆分,可以引用当前或其他仓库上的 CI
文件,采用对象 merge
的模式合并流水线配置。
merge
策略:
- Array : 子元素追加
- Map : 同名 key 覆盖
include:
# 1、可直接传入配置文件路径
- "https://xxx/template/template.yml"
- "template.yml"
# 2、可传入一个对象。
# path: 配置文件路径
# ignoreError:未读取到配置文件是否抛出错误。true 不抛出错误;false 抛出错误。默认为 false
- path: "template1.yml"
ignoreError: true
# 3、可传入一个对象
# config: 传入 yaml 配置
- config:
master:
push:
- stages:
- name: echo
script: echo "hello world"
TIP
1、本地的 .coding-ci.yml
会覆盖 include
中的配置,include
数组中后面的配置会覆盖前面的配置。
2、支持嵌套 include
,include
的本地文件路径相对于项目根目录。
3、最多支持 include
50个配置文件。
4、不支持引用 submodule
中的文件。
5、不支持跨文件使用 yaml
锚点功能。
6、流水线会检查发起人是否拥有 include
文件的访问权限,同 pipeline.imports 的鉴权流程。
merge 示例:
# template.yaml
master:
push:
pipeline_2:
env:
ENV_KEY1: xxx
ENV_KEY3: inner
services:
- docker
stages:
- name: echo
script: echo 222
# .coding-ci.yml
include:
- https://xxx/template.yml
master:
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
后的配置
master:
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
# 进阶示例
- 分离环境变量为单独文件
TIP
本地的 .coding-ci.yml
会覆盖 include
中的配置,include
数组中后面的配置会覆盖前面的配置。
# .coding-ci.yml
include:
- https://xxx/.coding-ci.common.yml
# .coding-ci.env.yml
CODE_SCAN_PATH: ./src
CDN_PATH: ./dist/cdn
# https://xxx/.coding-ci.common.yml
master:
push:
- services:
- docker
label:
type:
- MASTER
class:
- MAIN
imports:
- .coding-ci.env.yml # 通过 `imports` 的方式来注入环境变量
stages:
- name: 查看注入的环境变量
script:
- echo $CDN_PATH
- echo $CODE_SCAN_PATH