---
url: /zh/build/internal-steps/cnb/read-file.md
---
`cnb:read-file`

读取指定文件内容，可导出为环境变量供后续任务使用。

使用 `##[set-output key=value]` 指令输出变量更便捷，但内容会输出到日志，不适用于敏感信息。

对于事先确定的敏感信息，可以用 `imports` 导入；
对于构建过程中产生的敏感信息，可写入文件后通过该内置任务读取。

`imports` 仅支持远端仓库中已存在的文件，该内置任务仅支持读取本地文件。

文件类型按后缀判断，目前支持 `.json`、`.yml`、`.yaml` 和纯文本（`key=value` 结构）。

* [适用事件](#cnb-read-file-applicable-events)
* [参数](#cnb-read-file-parameters)
* [输出结果](#cnb-read-file-output)
* [配置样例](#cnb-read-file-configuration-examples)

## 适用事件 {#cnb-read-file-applicable-events}

[所有事件](../../trigger-rule.md#trigger-event)

## 参数 {#cnb-read-file-parameters}

### filePath

* type: String
* required: true

本地文件路径。

## 输出结果 {#cnb-read-file-output}

```json
{
  // 读到的对象
}
```

## 配置样例 {#cnb-read-file-configuration-examples}

将后续任务需要的变量写入文件，再用该内置任务读取并导出为环境变量。

```json title="myJson.json"
{
  "myVar": "myVar",
  "deep": {
    "myVar": "myVar in deep"
  },
  "deepWithEnvKey": {
    "myVar": "myVar in deepWithEnvKey"
  }
}
```

```yaml title=".cnb.yml"
main:
  push:
    - env:
        myKey: deepWithEnvKey
      stages:
        - name: write env file
          script: echo "write env to myJson.json"
        - name: export env
          type: cnb:read-file
          options:
            filePath: myJson.json
          exports:
            myVar: ENV_MY_VAR
            deep.myVar: ENV_DEEP_MY_VAR # 指定多级的key
            $myKey.myVar: ENV_ENV_KEY_MY_VAR # 通过环境变量指定获取的key
        - name: echo env
          script:
            - echo $ENV_MY_VAR
            - echo $ENV_DEEP_MY_VAR
            - echo $ENV_ENV_KEY_MY_VAR
```
