# 简化配置文件

## YAML 高级语法

由于`.cnb.yml`配置文件是 `YAML` 格式，所以可以利用更多 `YAML` 特性（如锚点 `&` 、别名 `*` 和对象合并 `<<` 符号）来简化配置文件。

一个简单的运用锚点和别名简化的例子如下：

```yaml
# pull_request 和 push 事件的流水线完全一致，这种方式可以减少重复
.pipeline: &pipeline
  docker:
    image: node:22
  stages:
    - name: install
      script: npm install
    - name: test
      script: npm test

main:
  pull_request:
    - <<: *pipeline
  push:
    - <<: *pipeline
```

支持多级嵌套：

```yaml
.jobs: &jobs
  - name: install
    script: npm install
  - name: test
    script: npm test

.pipeline: &pipeline
  docker:
    image: node:22
  stages: *jobs

main:
  pull_request:
    - <<: *pipeline
  push:
    - <<: *pipeline
```

<tip>

以上是 `YAML` 自带特性，仅在解析单个YAML文件时有效，不能跨文件使用。

</tip>

## 文件引用

为了方便复用流水线配置，`云原生构建` 实现了以下特性：

- [include](/docs/build/basic-usage/grammar#include)：可以跨文件引用流水线模板。
- [imports](/docs/build/basic-usage/grammar#Pipeline-imports)：可以跨文件引用变量。
- [optionsFrom](/docs/build/basic-usage/grammar#optionsfrom)：可以跨文件引用内置任务参数。
- [settingsFrom](/docs/build/basic-usage/grammar#settingsfrom)：可以跨文件引用插件任务参数。

详细文件引用说明见 [文件引用](/docs/build/advanced-usage/file-reference)

## 变量引用

为了解决YAML锚点和别名不能跨文件使用的问题。`云原生构建` 实现了以下特性：

[reference](/docs/build/basic-usage/grammar#reference): 可以跨文件按属性路径引用变量。
