流水线配置复用

利用 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、支持嵌套 includeinclude 的本地文件路径相对于项目根目录。

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