Pipeline Configuration Reusability
By using the include
parameter,
you can import files from the current repository or other repositories into the current file.
This allows you to split the CI file, making it easier to reuse and maintain.
The merging of configurations from different files in the pipeline is done using the merge
mode of the object.
- Merging two arrays: Appending child elements
- Merging two objects: Overwriting keys with the same name
- Merging an array and an object: Keeping only the array
- Merging an object and an array: Keeping only the array
For permission control when referencing configuration files, please refer to Configuration File Reference Authorization.
# Usage Examples
include:
# 1. Directly provide the configuration file path
- "https://xxx/template.yml"
- "template.yml"
# 2. Provide an object
# path: Configuration file path
# ignoreError: Whether to throw an error if the configuration file is not found. true does not throw an error; false throws an error. Default is false.
- path: "template1.yml"
ignoreError: true
# 3. Provide an object
# config: Provide YAML configuration
- config:
main:
push:
- stages:
- name: echo
script: echo "hello world"
TIP
- Local
.cnb.yml
will override the configurations ininclude
. Configurations in later elements of theinclude
array will override earlier ones. - Nested
include
is supported. The local file path ininclude
is relative to the project root directory. - Up to 50 configuration files are supported in
include
. - Referencing files in submodules is not supported.
- Cross-file usage of YAML anchors is not supported.
Merge example:
# 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
Merged configuration:
main:
push:
pipeline_1: # New key added during merge
stages:
- name: echo
script: echo 111
pipeline_2:
env:
ENV_KEY1: xxx
ENV_KEY2: xxx # New key added during merge
ENV_KEY3: outer # Overwritten key during merge
services:
- docker
stages: # Appended array during merge
- name: echo
script: echo 222
- name: echo
script: echo 333
# Advanced Example
- Mixing
include
andimports
:
imports
is used to import other files as environment variables,
while include
is used to import and merge pipeline configurations from other files.
# .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 # Injecting environment variables using `imports`
stages:
- name: View injected environment variables
script:
- echo $CDN_PATH
- echo $CODE_SCAN_PATH