---
url: /zh/build/build-in-env.md
description: |
  列出云原生构建内置的默认只读环境变量， 涵盖基础变量、Git 信息、合并请求等场景下的变量说明。
---
`云原生构建`内置了一些只读环境变量，构建过程中无法覆盖。

下文的合并类事件包括：

* `pull_request`
* `pull_request.update`
* `pull_request.target`
* `pull_request.approved`
* `pull_request.changes_requested`
* `pull_request.mergeable`
* `pull_request.merged`
* `pull_request.comment`

更多触发事件请参考 [触发事件](./trigger-rule.md#trigger-event)。

## 使用方式

以下列出的内置变量会在流水线运行时**自动注入**到每个 Job 的执行环境，
可直接在 `script` 或 `commands` 中以 `${变量名}` 引用，无需手动声明。
下面以 `main` 分支收到 `push` 事件为例：

```yaml title=".cnb.yml"
main:
  push:
    - name: show-builtin-env
      stages:
        - name: print-vars
          script: |
            echo "branch: ${CNB_BRANCH}"
            echo "commit: ${CNB_COMMIT_SHORT}"
            echo "repo: ${CNB_REPO_SLUG}"
            echo "build id: ${CNB_BUILD_ID}"
```

示例中用到的 `${CNB_BRANCH}`、`${CNB_COMMIT_SHORT}`、`${CNB_REPO_SLUG}`、`${CNB_BUILD_ID}`
分别对应下文[分支](#cnb_branch)、[提交](#cnb_commit_short)、[仓库](#cnb_repo_slug)、[构建](#cnb_build_id)各类变量。

::: tip 提示
内置变量均为**只读**，构建过程中无法覆盖；
如需自定义或跨步骤传递环境变量，请参考[自定义环境变量](./env.md#声明环境变量)。
:::

## 基础变量

### 变量概览

| 变量名                                                     | 说明                   |
| ------------------------------------------------------- | -------------------- |
| [CI](#ci)                                               | CI 标识，值为 `true`      |
| [CNB](#cnb)                                             | CNB 标识，值为 `true`     |
| [CNB\_WEB\_PROTOCOL](#cnb_web_protocol)                   | Web 使用的协议            |
| [CNB\_WEB\_HOST](#cnb_web_host)                           | Web 使用的 HOST         |
| [CNB\_WEB\_ENDPOINT](#cnb_web_endpoint)                   | Web 完整地址             |
| [CNB\_API\_ENDPOINT](#cnb_api_endpoint)                   | API 完整地址             |
| [CNB\_GROUP\_SLUG](#cnb_group_slug)                       | 仓库所属父组织路径            |
| [CNB\_GROUP\_SLUG\_LOWERCASE](#cnb_group_slug_lowercase)   | 父组织路径小写格式            |
| [CNB\_GROUP\_ID](#cnb_group_id)                           | 仓库所属父组织 ID           |
| [CNB\_ROOT\_SLUG](#cnb_root_slug)                         | 仓库所属根组织路径            |
| [CNB\_ROOT\_SLUG\_LOWERCASE](#cnb_root_slug_lowercase)     | 根组织路径小写格式            |
| [CNB\_ROOT\_ID](#cnb_root_id)                             | 仓库所属根组织 ID           |
| [CNB\_EVENT](#cnb_event)                                 | 触发构建的事件名称            |
| [CNB\_EVENT\_URL](#cnb_event_url)                         | 事件相关链接               |
| [CNB\_BRANCH](#cnb_branch)                               | 分支名或 Tag 名           |
| [CNB\_BRANCH\_SHA](#cnb_branch_sha)                       | 分支最近提交的 SHA          |
| [CNB\_DEFAULT\_BRANCH](#cnb_default_branch)               | 仓库默认分支               |
| [CNB\_TOKEN\_USER\_NAME](#cnb_token_user_name)             | 临时令牌对应的用户名           |
| [CNB\_TOKEN](#cnb_token)                                 | 流水线运行期临时令牌           |
| [TWINE\_USERNAME](#twine_username)                       | PyPI 制品库用户名          |
| [TWINE\_PASSWORD](#twine_password)                       | PyPI 制品库密码           |
| [CNB\_IS\_CRONEVENT](#cnb_is_cronevent)                   | 是否为定时任务事件            |
| [CNB\_DOCKER\_REGISTRY](#cnb_docker_registry)             | 制品库 Docker 源地址       |
| [CNB\_DOCKER\_MODEL\_REGISTRY](#cnb_docker_model_registry) | 制品库 Docker Model 源地址 |
| [CNB\_HELM\_REGISTRY](#cnb_helm_registry)                 | 制品库 Helm 源地址         |
| [CNB\_HAS\_LFS\_FILES](#cnb_has_lfs_files)                 | 是否存在 LFS 文件          |

### CI

值为 `true`，用于标识当前环境为 CI 环境。

### CNB

值为 `true`，用于标识当前环境为 CNB 构建环境。

### CNB\_WEB\_PROTOCOL

当前 Web 使用的协议，取值为 `http` 或 `https`。

### CNB\_WEB\_HOST

当前 Web 使用的 HOST。

### CNB\_WEB\_ENDPOINT

当前 Web 的完整地址，包含协议、HOST 和路径（如有）。

### CNB\_API\_ENDPOINT

当前 API 的完整地址，包含协议、HOST 和路径（如有）。

可与 `CNB_TOKEN` 配合在 CI 中调用 API。

### CNB\_GROUP\_SLUG

仓库所属父组织的路径。

### CNB\_GROUP\_SLUG\_LOWERCASE

仓库所属父组织路径的小写格式。

### CNB\_GROUP\_ID

仓库所属父组织 ID。

### CNB\_ROOT\_SLUG

仓库所属根组织的路径。

### CNB\_ROOT\_SLUG\_LOWERCASE

仓库所属根组织路径的小写格式。

### CNB\_ROOT\_ID

仓库所属根组织 ID。

### CNB\_EVENT

值为触发构建的事件名称。

事件类型参见 [事件](./trigger-rule.md#trigger-event)。

### CNB\_EVENT\_URL

事件相关链接，取值规则如下：

| 触发事件      | 变量值                           |
| --------- | ----------------------------- |
| 合并类事件     | PR 的链接                        |
| Issue 类事件 | Issue 的链接                     |
| 其他事件      | [CNB\_COMMIT](#cnb_commit) 的链接 |

### CNB\_BRANCH

分支名或 Tag 名，取值规则如下：

| 触发事件    | 变量值     |
| ------- | ------- |
| 合并类事件   | 目标分支名   |
| Tag 类事件 | Tag 名   |
| 其他事件    | 对应的分支名称 |

### CNB\_BRANCH\_SHA

分支最近一次提交的 SHA，取值规则：

| 触发事件            | 变量值                      |
| --------------- | ------------------------ |
| `branch.delete` | 无值                       |
| 其他事件            | `CNB_BRANCH` 最近一次提交的 SHA |

### CNB\_DEFAULT\_BRANCH

仓库默认分支。

### CNB\_TOKEN\_USER\_NAME

用户临时令牌对应的用户名，固定为 `cnb`。

### CNB\_TOKEN

流水线运行期间的临时令牌，结束后自动销毁，
可用于代码和制品的拉取与推送，以及 API 调用。

#### 权限分配

权限取决于触发流水线的事件类型，分为三类：

* 开启工作模式的 NPC 事件
* 未开启工作模式的 NPC 事件或其他不可信事件（参考 [不可信事件](./trigger-rule.md#untrusted-events)）
* 其他可信事件

`api_trigger` 默认归入**其他可信事件**。若构建以 NPC 为代理人运行，
token 权限按是否开启工作模式归入对应 NPC 事件分类，规则与原生 NPC 事件一致，
参见 [通过 API 以 NPC 身份触发](./npc.md#通过-api-以-npc-身份触发)。

**开启工作模式的 NPC 事件：**

| 权限项                   | 说明            |
| --------------------- | ------------- |
| `repo-code:rw`        | 代码读写          |
| `repo-pr:rw`          | PR 读写         |
| `repo-issue:rw`       | Issue 读写      |
| `repo-notes:rw`       | 评论读写          |
| `repo-release:rw`     | Release 读写    |
| `repo-basic-info:r`   | 基本信息只读        |
| `account-profile:r`   | 用户信息只读        |
| `account-engage:r`    | 用户关注的仓库、关注者只读 |
| `registry-package:rw` | 制品库读写         |
| `repo-cnb-trigger:rw` | 触发器读写         |
| `repo-cnb-history:r`  | 构建历史只读        |
| `repo-cnb-detail:r`   | 构建详情只读        |

**未开启工作模式的 NPC 事件或其他不可信事件：**

| 权限项                  | 说明         |
| -------------------- | ---------- |
| `repo-code:r`        | 代码只读       |
| `repo-pr:r`          | PR 只读      |
| `repo-issue:rw`       | Issue 读写   |
| `repo-notes:rw`      | 评论读写       |
| `repo-release:r`     | Release 只读 |
| `repo-basic-info:r`  | 基本信息只读     |
| `registry-package:r` | 制品库只读      |
| `account-profile:r`  | 用户信息只读     |

**其他可信事件：**

| 权限项                   | 说明            |
| --------------------- | ------------- |
| `repo-code:rw`        | 代码读写          |
| `repo-pr:rw`          | PR 读写         |
| `repo-issue:rw`       | Issue 读写      |
| `repo-notes:rw`       | 评论读写          |
| `repo-release:rw`     | Release 读写    |
| `registry-package:rw` | 制品库读写         |
| `repo-cnb-trigger:rw` | 触发器读写         |
| `repo-cnb-history:r`  | 构建历史只读        |
| `repo-cnb-detail:r`   | 构建详情只读        |
| `repo-basic-info:r`   | 基本信息，只读       |
| `repo-manage:r`       | 仓库管理只读        |
| `account-profile:r`   | 用户信息只读        |
| `account-engage:r`    | 用户关注的仓库、关注者只读 |
| `group-resource:r`    | 组织资源只读        |

#### 权限说明

各权限的具体含义请参考**个人设置** > **访问令牌**。

#### 安全限制

* 公开仓库的流水线，该令牌仅能访问**公开仓库/制品库**。
* Fork 仓库的流水线，该令牌仅能访问**当前仓库**。
* NPC 事件的流水线，以及以 NPC 为代理人运行的 `api_trigger` 流水线，
  该令牌仅能访问**当前仓库**。跨仓 Fork PR 的 `pull_request.comment@npc`
  事件中，若触发者为 PR 提交者，则仅能访问**公开仓库/制品库**。

### TWINE\_USERNAME

PyPI 制品库用户名，同 `CNB_TOKEN_USER_NAME`。

### TWINE\_PASSWORD

PyPI 制品库密码，同 `CNB_TOKEN`。

### CNB\_IS\_CRONEVENT

是否为定时任务事件。

### CNB\_DOCKER\_REGISTRY

制品库 Docker 源地址。

### CNB\_DOCKER\_MODEL\_REGISTRY

制品库 Docker model 源地址。

### CNB\_HELM\_REGISTRY

制品库 Helm 源地址。

### CNB\_HAS\_LFS\_FILES

是否有 LFS 文件。

::: tip 提示
若仓库已清空 LFS 文件，Git GC 前该变量仍为 `true`。
:::

## 提交类变量

### 提交类变量概览

| 变量名                                                             | 说明                 |
| --------------------------------------------------------------- | ------------------ |
| [CNB\_BEFORE\_SHA](#cnb_before_sha)                               | 分支推送前最近一次提交的 SHA   |
| [CNB\_COMMIT](#cnb_commit)                                       | 构建对应的代码 SHA        |
| [CNB\_COMMIT\_SHORT](#cnb_commit_short)                           | CNB\_COMMIT 前 8 位字符 |
| [CNB\_COMMIT\_MESSAGE](#cnb_commit_message)                       | 提交信息               |
| [CNB\_COMMIT\_MESSAGE\_TITLE](#cnb_commit_message_title)           | 提交信息标题             |
| [CNB\_COMMITTER](#cnb_committer)                                 | 提交者                |
| [CNB\_COMMITTER\_EMAIL](#cnb_committer_email)                     | 提交者邮箱              |
| [CNB\_NEW\_COMMITS\_COUNT](#cnb_new_commits_count)                 | 新增提交数量             |
| [CNB\_IS\_TAG](#cnb_is_tag)                                       | 是否为 Tag 构建         |
| [CNB\_TAG\_MESSAGE](#cnb_tag_message)                             | Tag 消息             |
| [CNB\_TAG\_RELEASE\_TITLE](#cnb_tag_release_title)                 | Release 标题         |
| [CNB\_TAG\_RELEASE\_DESC](#cnb_tag_release_desc)                   | Release 描述         |
| [CNB\_TAG\_IS\_RELEASE](#cnb_tag_is_release)                       | Tag 是否有对应 Release  |
| [CNB\_TAG\_IS\_PRE\_RELEASE](#cnb_tag_is_pre_release)               | 是否为预发布 Release     |
| [CNB\_IS\_NEW\_BRANCH](#cnb_is_new_branch)                         | 是否为新创建的分支          |
| [CNB\_IS\_NEW\_BRANCH\_WITH\_UPDATE](#cnb_is_new_branch_with_update) | 是否为新分支且带新提交        |

### CNB\_BEFORE\_SHA

分支推送前，远端该分支最近一次提交的 SHA。

**取值规则**:

| 触发事件                | 变量值                                        |
| ------------------- | ------------------------------------------ |
| `push`、`commit.add` | 分支推送前最近一次提交的 SHA                           |
| 新建分支                | `0000000000000000000000000000000000000000` |
| `branch.create`     | `0000000000000000000000000000000000000000` |

### CNB\_COMMIT

构建时对应的代码 SHA。

**SHA 取值与工作区代码版本的对应关系如下**：

| 触发事件                             | 变量值               | 工作区    |
| -------------------------------- | ----------------- | ------ |
| `push`                           | 最后一次提交的 SHA       | 目标分支   |
| `commit.add`                     | 最后一次提交的 SHA       | 目标分支   |
| `tag_push`                       | 该 Tag 最后一次提交的 SHA | 目标 TAG |
| `tag_deploy.*`                   | 该 Tag 最后一次提交的 SHA | 目标 TAG |
| `auto_tag`                       | 默认分支最后一次提交的 SHA   | 默认分支   |
| `branch.create`                  | 新分支最后一次提交的 SHA    | 新分支    |
| `branch.delete`                  | 默认分支最后一次提交的 SHA   | 默认分支   |
| `issue.*`                        | 默认分支最后一次提交的 SHA   | 默认分支   |
| `issue.comment@npc`              | 默认分支最后一次提交的 SHA   | 默认分支   |
| `pull_request`                   | 源分支最后一次提交的 SHA    | 预合并    |
| `pull_request.merged`            | 合并后的 SHA          | 目标分支   |
| `pull_request.target`            | 目标分支最后一次提交的 SHA   | 目标分支   |
| `pull_request.mergeable`         | 目标分支最后一次提交的 SHA   | 预合并    |
| `pull_request.approved`          | 源分支最后一次提交的 SHA    | 预合并    |
| `pull_request.changes_requested` | 源分支最后一次提交的 SHA    | 预合并    |
| `pull_request.comment`           | 源分支最后一次提交的 SHA    | 预合并    |
| `pull_request.comment@npc`       | 默认分支最后一次提交的 SHA   | 源分支    |
| `vscode`                         | 指定分支最后一次提交的 SHA   | 目标分支   |
| `web_trigger.*`                  | 指定分支最后一次提交的 SHA   | 目标分支   |

### CNB\_COMMIT\_SHORT

`CNB_COMMIT` 的缩写，取前 8 位字符。

### CNB\_COMMIT\_MESSAGE

`CNB_COMMIT` 对应的提交信息。

### CNB\_COMMIT\_MESSAGE\_TITLE

`CNB_COMMIT_MESSAGE` 的 `title` 部分，即首行。

### CNB\_COMMITTER

`CNB_COMMIT` 对应的提交者。

### CNB\_COMMITTER\_EMAIL

`CNB_COMMITTER` 对应的邮箱。

### CNB\_NEW\_COMMITS\_COUNT

由 `commit.add` 触发的构建，值为新增的 Commit 数量。可结合 `git log -n` 查看详情。

### CNB\_IS\_TAG

分支为 Tag 的构建，值为 `true`。

### CNB\_TAG\_MESSAGE

Tag 消息。

### CNB\_TAG\_RELEASE\_TITLE

Release 标题。

### CNB\_TAG\_RELEASE\_DESC

Release 描述。

### CNB\_TAG\_IS\_RELEASE

Tag 是否有对应的 Release。

**取值规则**:

| 条件                     | 变量值     |
| ---------------------- | ------- |
| 分支为 Tag 且存在对应的 Release | `true`  |
| 其他情况                   | `false` |

### CNB\_TAG\_IS\_PRE\_RELEASE

是否为预发布版本。

**取值规则**:

| 条件                          | 变量值     |
| --------------------------- | ------- |
| 分支为 Tag，存在对应的 Release，且为预发布 | `true`  |
| 其他情况                        | `false` |

### CNB\_IS\_NEW\_BRANCH

当前分支是否为新创建的分支，默认为 `false`。

### CNB\_IS\_NEW\_BRANCH\_WITH\_UPDATE

当前分支是否为新创建的分支且带有新提交，默认为 `false`。

## 仓库类变量

### 仓库类变量概览

| 变量名                                                 | 说明          |
| --------------------------------------------------- | ----------- |
| [CNB\_REPO\_SLUG](#cnb_repo_slug)                     | 仓库路径        |
| [CNB\_REPO\_SLUG\_LOWERCASE](#cnb_repo_slug_lowercase) | 仓库路径小写格式    |
| [CNB\_REPO\_NAME](#cnb_repo_name)                     | 仓库名称        |
| [CNB\_REPO\_NAME\_LOWERCASE](#cnb_repo_name_lowercase) | 仓库名称小写格式    |
| [CNB\_REPO\_ID](#cnb_repo_id)                         | 仓库 ID       |
| [CNB\_REPO\_URL\_HTTPS](#cnb_repo_url_https)           | 仓库 HTTPS 地址 |

### CNB\_REPO\_SLUG

目标仓库路径，格式为 `group_slug/repo_name` 或 `group_slug/sub_group_slug/.../repo_name`。

### CNB\_REPO\_SLUG\_LOWERCASE

目标仓库路径的小写格式。

### CNB\_REPO\_NAME

目标仓库的名称。

### CNB\_REPO\_NAME\_LOWERCASE

目标仓库名称的小写格式。

### CNB\_REPO\_ID

目标仓库 ID。

### CNB\_REPO\_URL\_HTTPS

目标仓库的 HTTPS 地址。

### CNB\_FORK\_FROM\_REPO\_SLUG

Fork 仓库的源仓库路径。

## 构建类变量

### 构建类变量概览

| 变量名                                                         | 说明                 |
| ----------------------------------------------------------- | ------------------ |
| [CNB\_BUILD\_ID](#cnb_build_id)                               | 构建流水号              |
| [CNB\_BUILD\_WEB\_URL](#cnb_build_web_url)                     | 构建日志地址             |
| [CNB\_BUILD\_START\_TIME](#cnb_build_start_time)               | 构建开始时间             |
| [CNB\_BUILD\_USER](#cnb_build_user)                           | 触发者用户名             |
| [CNB\_BUILD\_USER\_NICKNAME](#cnb_build_user_nickname)         | 触发者昵称              |
| [CNB\_BUILD\_USER\_EMAIL](#cnb_build_user_email)               | 触发者邮箱              |
| [CNB\_BUILD\_USER\_ID](#cnb_build_user_id)                     | 触发者 ID             |
| [CNB\_BUILD\_USER\_NPC\_SLUG](#cnb_build_user_npc_slug)         | NPC 所属仓库路径         |
| [CNB\_BUILD\_USER\_NPC\_NAME](#cnb_build_user_npc_name)         | NPC 角色名            |
| [CNB\_BUILD\_STAGE\_NAME](#cnb_build_stage_name)               | Stage 名称           |
| [CNB\_BUILD\_JOB\_NAME](#cnb_build_job_name)                   | Job 名称             |
| [CNB\_BUILD\_JOB\_KEY](#cnb_build_job_key)                     | Job Key            |
| [CNB\_BUILD\_WORKSPACE](#cnb_build_workspace)                 | 工作空间根目录            |
| [CNB\_BUILD\_FAILED\_MSG](#cnb_build_failed_msg)               | 构建失败错误信息           |
| [CNB\_BUILD\_FAILED\_STAGE\_NAME](#cnb_build_failed_stage_name) | 失败的 Stage 名称       |
| [CNB\_PIPELINE\_NAME](#cnb_pipeline_name)                     | Pipeline 名称        |
| [CNB\_PIPELINE\_KEY](#cnb_pipeline_key)                       | Pipeline Key       |
| [CNB\_PIPELINE\_ID](#cnb_pipeline_id)                         | Pipeline ID        |
| [CNB\_PIPELINE\_DOCKER\_IMAGE](#cnb_pipeline_docker_image)     | Pipeline Docker 镜像 |
| [CNB\_PIPELINE\_STATUS](#cnb_pipeline_status)                 | Pipeline 构建状态      |
| [CNB\_PIPELINE\_MAX\_RUN\_TIME](#cnb_pipeline_max_run_time)     | 流水线最大运行时间          |
| [CNB\_RUNNER\_IP](#cnb_runner_ip)                             | Runner IP          |
| [CNB\_RUNNER\_VERSION](#cnb_runner_version)                   | Runner 版本号        |
| [CNB\_CPUS](#cnb_cpus)                                       | 可用 CPU 核数          |
| [CNB\_MEMORY](#cnb_memory)                                   | 可用内存大小             |
| [CNB\_IS\_RETRY](#cnb_is_retry)                               | 是否由 rebuild 触发     |
| [HUSKY\_SKIP\_INSTALL](#husky_skip_install)                   | Husky 兼容标识         |

### CNB\_BUILD\_ID

当前构建的流水号，全局唯一。

### CNB\_BUILD\_WEB\_URL

当前构建的日志地址。

### CNB\_BUILD\_START\_TIME

当前构建的开始时间，UTC 格式，如 `2025-08-21T09:13:45.803Z`。

### CNB\_BUILD\_USER

当前构建的触发者用户名。

### CNB\_BUILD\_USER\_NICKNAME

当前构建的触发者昵称。

### CNB\_BUILD\_USER\_EMAIL

当前构建的触发者邮箱。

### CNB\_BUILD\_USER\_ID

当前构建的触发者 ID。

### CNB\_BUILD\_USER\_NPC\_SLUG

当前构建由 NPC 触发时，为 NPC 所属仓库的路径。

### CNB\_BUILD\_USER\_NPC\_NAME

当前构建由 NPC 触发时，为 NPC 角色名。

### CNB\_BUILD\_STAGE\_NAME

当前构建的 Stage 名称。

### CNB\_BUILD\_JOB\_NAME

当前构建的 Job 名称。

### CNB\_BUILD\_JOB\_KEY

当前构建的 Job Key，同 Stage 下唯一。

### CNB\_BUILD\_WORKSPACE

代码仓库所在目录，也是脚本任务和插件任务的工作目录，默认值为 `/workspace`。

该目录在同一 Pipeline 的各任务间共享，
详见 [任务间文件共享](./script-vs-plugin.md#file-sharing)。

### CNB\_BUILD\_FAILED\_MSG

流水线构建失败的错误信息，可在 `failStages` 中使用。

### CNB\_BUILD\_FAILED\_STAGE\_NAME

流水线失败的 Stage 名称，可在 `failStages` 中使用。

### CNB\_PIPELINE\_NAME

当前 Pipeline 的名称，未声明时为空。

### CNB\_PIPELINE\_KEY

当前 Pipeline 的索引 Key，如 `pipeline-0`。

### CNB\_PIPELINE\_ID

当前 Pipeline 的 ID，全局唯一。

### CNB\_PIPELINE\_DOCKER\_IMAGE

当前 Pipeline 所使用的 Docker 镜像，如 `alpine:latest`。

### CNB\_PIPELINE\_STATUS

当前流水线的构建状态，可在 `endStages` 中查看。

**可能的值**:

| 状态值       | 说明           |
| --------- | ------------ |
| `success` | 流水线构建成功完成    |
| `error`   | 流水线构建过程中发生错误 |
| `cancel`  | 流水线构建被取消     |

### CNB\_PIPELINE\_MAX\_RUN\_TIME

流水线最大运行时间，单位为毫秒。

### CNB\_RUNNER\_IP

当前 Pipeline 所在 Runner 的 IP。

### CNB\_RUNNER\_VERSION

当前 Pipeline 所在 Runner 的版本号。

### CNB\_CPUS

当前构建流水线可使用的最大 CPU 核数。

### CNB\_MEMORY

当前构建流水线可使用的最大内存大小，单位为 GiB。

### CNB\_IS\_RETRY

当前构建是否由 `rebuild` 触发。

### HUSKY\_SKIP\_INSTALL

兼容 CI 环境下 Husky。

## 合并类变量

### 合并类变量概览

| 变量名                                                             | 说明            |
| --------------------------------------------------------------- | ------------- |
| [CNB\_PULL\_REQUEST](#cnb_pull_request)                           | 是否为 PR 触发     |
| [CNB\_PULL\_REQUEST\_LIKE](#cnb_pull_request_like)                 | 是否为合并类事件触发    |
| [CNB\_PULL\_REQUEST\_PROPOSER](#cnb_pull_request_proposer)         | PR 提出者        |
| [CNB\_PULL\_REQUEST\_TITLE](#cnb_pull_request_title)               | PR 标题         |
| [CNB\_PULL\_REQUEST\_DESCRIPTION](#cnb_pull_request_description)   | PR 描述         |
| [CNB\_PULL\_REQUEST\_BRANCH](#cnb_pull_request_branch)             | PR 源分支名称      |
| [CNB\_PULL\_REQUEST\_SHA](#cnb_pull_request_sha)                   | PR 源分支最新 SHA  |
| [CNB\_PULL\_REQUEST\_TARGET\_SHA](#cnb_pull_request_target_sha)     | PR 目标分支最新 SHA |
| [CNB\_PULL\_REQUEST\_MERGE\_SHA](#cnb_pull_request_merge_sha)       | PR 合并后 SHA    |
| [CNB\_PULL\_REQUEST\_SLUG](#cnb_pull_request_slug)                 | 源仓库 Slug      |
| [CNB\_PULL\_REQUEST\_ACTION](#cnb_pull_request_action)             | PR 操作类型       |
| [CNB\_PULL\_REQUEST\_ID](#cnb_pull_request_id)                     | PR 全局唯一 ID    |
| [CNB\_PULL\_REQUEST\_IID](#cnb_pull_request_iid)                   | PR 仓库编号       |
| [CNB\_PULL\_REQUEST\_REVIEWERS](#cnb_pull_request_reviewers)       | 评审人列表         |
| [CNB\_PULL\_REQUEST\_REVIEW\_STATE](#cnb_pull_request_review_state) | 评审状态          |
| [CNB\_REVIEW\_REVIEWED\_BY](#cnb_review_reviewed_by)               | 同意评审人列表       |
| [CNB\_REVIEW\_LAST\_REVIEWED\_BY](#cnb_review_last_reviewed_by)     | 最后同意评审人       |
| [CNB\_PULL\_REQUEST\_IS\_WIP](#cnb_pull_request_is_wip)             | PR 是否为 WIP    |

### CNB\_PULL\_REQUEST

是否为 PR 触发。

**取值规则**:

| 触发事件                                                       | 变量值     |
| ---------------------------------------------------------- | ------- |
| `pull_request`、`pull_request.update`、`pull_request.target` | `true`  |
| 其他事件                                                       | `false` |

### CNB\_PULL\_REQUEST\_LIKE

是否为合并类事件触发。

**取值规则**:

| 触发事件  | 变量值     |
| ----- | ------- |
| 合并类事件 | `true`  |
| 其他事件  | `false` |

### CNB\_PULL\_REQUEST\_PROPOSER

PR 提出者名称。

### CNB\_PULL\_REQUEST\_TITLE

PR 标题。

### CNB\_PULL\_REQUEST\_DESCRIPTION

PR 描述。

### CNB\_PULL\_REQUEST\_BRANCH

PR 源分支名称。

### CNB\_PULL\_REQUEST\_SHA

PR 源分支最新提交的 SHA。

### CNB\_PULL\_REQUEST\_TARGET\_SHA

PR 目标分支最新提交的 SHA。

### CNB\_PULL\_REQUEST\_MERGE\_SHA

PR 合并后的 SHA。

**取值规则**:

| 触发事件                     | 变量值          |
| ------------------------ | ------------ |
| `pull_request.merged`    | PR 合并后的 SHA  |
| `pull_request`           | PR 预合并后的 SHA |
| `pull_request.update`    | PR 预合并后的 SHA |
| `pull_request.target`    | PR 预合并后的 SHA |
| `pull_request.mergeable` | PR 预合并后的 SHA |
| `pull_request.comment`   | PR 预合并后的 SHA |
| 其他事件                     | 无值           |

### CNB\_PULL\_REQUEST\_SLUG

合并类事件中，源仓库的路径，格式为 `group_slug/repo_name` 或 `group_slug/sub_group_slug/.../repo_name`。

### CNB\_PULL\_REQUEST\_ACTION

PR 操作类型。

**可能的值**:

| 值                 | 说明                      |
| ----------------- | ----------------------- |
| `opened`          | 新建 PR                   |
| `edited`          | PR 编辑                   |
| `synchronize`     | 源分支 push                |
| `submitted`       | 评审                      |
| `ready_for_merge` | 评审通过或 CI 状态变更时 PR 变成可合并 |

### CNB\_PULL\_REQUEST\_ID

PR 的全局唯一 ID。

### CNB\_PULL\_REQUEST\_IID

PR 在仓库中的编号 IID。

### CNB\_PULL\_REQUEST\_REVIEWERS

PR 评审人列表，多个以 `,` 分隔。

### CNB\_PULL\_REQUEST\_REVIEW\_STATE

PR 评审状态。

**取值规则**:

| 条件          | 变量值         |
| ----------- | ----------- |
| 有评审者且有人通过评审 | `approve`   |
| 有评审者但无人通过评审 | `unapprove` |
| 其他情况        | 无值          |

### CNB\_REVIEW\_REVIEWED\_BY

PR 下同意评审的评审人列表，多个以 `,` 分隔。

### CNB\_REVIEW\_LAST\_REVIEWED\_BY

PR 下最后一个同意评审的评审人。

### CNB\_PULL\_REQUEST\_IS\_WIP

PR 是否被设置为 WIP。

**取值规则**:

| 触发事件  | 变量值              |
| ----- | ---------------- |
| 合并类事件 | `true` 或 `false` |
| 其他事件  | 无值               |

## 云原生开发类变量

### 云原生开发类变量概览

| 变量名                                                 | 说明          |
| --------------------------------------------------- | ----------- |
| [CNB\_VSCODE\_WEB\_URL](#cnb_vscode_web_url)           | 云原生开发地址     |
| [CNB\_VSCODE\_MAX\_RUN\_TIME](#cnb_vscode_max_run_time) | 云原生开发最大运行时间 |

### CNB\_VSCODE\_WEB\_URL

云原生开发地址，仅声明 `services: vscode` 时存在。

### CNB\_VSCODE\_MAX\_RUN\_TIME

云原生开发环境的最大运行时间，单位为毫秒，仅声明 `services: vscode` 时存在。

## Issue 类变量

### Issue 类变量概览

| 变量名                                             | 说明            |
| ----------------------------------------------- | ------------- |
| [CNB\_ISSUE\_ID](#cnb_issue_id)                   | Issue 全局唯一 ID |
| [CNB\_ISSUE\_IID](#cnb_issue_iid)                 | Issue 仓库编号    |
| [CNB\_ISSUE\_TITLE](#cnb_issue_title)             | Issue 标题      |
| [CNB\_ISSUE\_DESCRIPTION](#cnb_issue_description) | Issue 描述      |
| [CNB\_ISSUE\_OWNER](#cnb_issue_owner)             | Issue 作者      |
| [CNB\_ISSUE\_STATE](#cnb_issue_state)             | Issue 状态      |
| [CNB\_ISSUE\_IS\_RESOLVED](#cnb_issue_is_resolved) | Issue 是否已解决   |
| [CNB\_ISSUE\_ASSIGNEES](#cnb_issue_assignees)     | Issue 处理人列表   |
| [CNB\_ISSUE\_LABELS](#cnb_issue_labels)           | Issue 标签列表    |
| [CNB\_ISSUE\_PRIORITY](#cnb_issue_priority)       | Issue 优先级     |

### CNB\_ISSUE\_ID

Issue 全局唯一 ID。

### CNB\_ISSUE\_IID

Issue 在仓库中的编号。

### CNB\_ISSUE\_TITLE

Issue 标题。

### CNB\_ISSUE\_DESCRIPTION

Issue 描述。

### CNB\_ISSUE\_OWNER

Issue 作者用户名。

### CNB\_ISSUE\_STATE

Issue 状态。

**取值规则**:

| 触发事件      | 变量值               |
| --------- | ----------------- |
| `issue.*` | `open` 或 `closed` |
| 其他事件      | 空字符串              |

### CNB\_ISSUE\_IS\_RESOLVED

Issue 是否被解决。

**取值规则**:

| 触发事件      | 变量值              |
| --------- | ---------------- |
| `issue.*` | `true` 或 `false` |
| 其他事件      | 空字符串             |

### CNB\_ISSUE\_ASSIGNEES

Issue 处理人用户名列表，多个以 `,` 分隔。

### CNB\_ISSUE\_LABELS

Issue 标签列表，多个以 `,` 分隔。

### CNB\_ISSUE\_PRIORITY

Issue 优先级。

## 评论类变量

### 评论类变量概览

| 变量名                                               | 说明        |
| ------------------------------------------------- | --------- |
| [CNB\_COMMENT\_ID](#cnb_comment_id)                 | 评论全局唯一 ID |
| [CNB\_COMMENT\_BODY](#cnb_comment_body)             | 评论内容      |
| [CNB\_COMMENT\_TYPE](#cnb_comment_type)             | 评论类型      |
| [CNB\_COMMENT\_FILE\_PATH](#cnb_comment_file_path)   | 评论所在文件    |
| [CNB\_COMMENT\_RANGE](#cnb_comment_range)           | 评论所在代码行   |
| [CNB\_REVIEW\_ID](#cnb_review_id)                   | 评审 ID     |
| [CNB\_REVIEW\_DESCRIPTION](#cnb_review_description) | 评审描述      |

### CNB\_COMMENT\_ID

评论全局唯一 ID。

### CNB\_COMMENT\_BODY

评论内容。

### CNB\_COMMENT\_TYPE

评论类型。

**取值规则**:

| 评论类型                  | 变量值         |
| --------------------- | ----------- |
| PR 代码评审评论             | `diff_note` |
| PR 非代码评审评论以及 Issue 评论 | `note`      |
| 其他情况                  | 无值          |

### CNB\_COMMENT\_FILE\_PATH

PR 代码评审中，评论所在文件。

### CNB\_COMMENT\_RANGE

PR 代码评审中，评论所在代码行，如 `L12`（单行）或 `L13-L16`（多行）。

### CNB\_REVIEW\_ID

PR 代码评审 ID。

### CNB\_REVIEW\_DESCRIPTION

PR 代码评审描述。

## NPC 类变量 {#npc-variables}

### NPC 类变量概览

| 变量名                                                 | 说明               |
| --------------------------------------------------- | ---------------- |
| [CNB\_NPC\_SLUG](#cnb_npc_slug)                       | NPC 所属仓库路径       |
| [CNB\_NPC\_SLUG\_LOWERCASE](#cnb_npc_slug_lowercase)   | NPC 所属仓库路径（小写格式） |
| [CNB\_NPC\_NAME](#cnb_npc_name)                       | NPC 角色名          |
| [CNB\_NPC\_SHA](#cnb_npc_sha)                         | NPC 仓库默认分支最新 SHA |
| [CNB\_NPC\_PROMPT](#cnb_npc_prompt)                   | NPC 角色提示词        |
| [CNB\_NPC\_SLOGAN](#cnb_npc_slogan)                   | NPC 角色口号         |
| [CNB\_NPC\_AVATAR](#cnb_npc_avatar)                   | NPC 角色头像         |
| [CNB\_NPC\_ENABLE\_THINKING](#cnb_npc_enable_thinking) | NPC 是否开启思考       |
| [CNB\_NPC\_ENABLE\_WORKMODE](#cnb_npc_enable_workmode) | NPC 是否开启工作模式     |
| [CNB\_NPC\_TRIGGER\_CONTENT](#cnb_npc_trigger_content) | 触发 NPC 的内容       |

### CNB\_NPC\_SLUG

NPC 所属仓库路径。系统 NPC 无值。

### CNB\_NPC\_SLUG\_LOWERCASE

NPC 所属仓库路径（小写格式）。系统 NPC 无值。

### CNB\_NPC\_NAME

NPC 角色名。

### CNB\_NPC\_SHA

NPC 所属仓库默认分支最新提交的 SHA。系统 NPC 无值。

### CNB\_NPC\_PROMPT

NPC 角色提示词。

### CNB\_NPC\_SLOGAN

NPC 角色口号。

### CNB\_NPC\_AVATAR

NPC 角色头像地址。系统 NPC 无值。

### CNB\_NPC\_ENABLE\_THINKING

NPC 角色是否开启思考。系统 NPC 无值。

### CNB\_NPC\_ENABLE\_WORKMODE

NPC 角色是否开启工作模式。开启后 NPC 拥有更高权限，详见 [CNB\_TOKEN](#cnb_token)。系统 NPC 无值。

### CNB\_NPC\_TRIGGER\_CONTENT

[触发 NPC 的场景](./trigger-rule.md#trigger-npc-scenes)有多种，
不同场景下触发内容对应不同的环境变量。
为减少遗漏，处理 NPC 事件时可优先使用该变量。

| 触发场景         | 等效环境变量                                                        |
| ------------ | ------------------------------------------------------------- |
| 创建 Issue 的描述 | [CNB\_ISSUE\_DESCRIPTION](#cnb_issue_description)               |
| Issue 评论     | [CNB\_COMMENT\_BODY](#cnb_comment_body)                         |
| 创建 PR 的描述    | [CNB\_PULL\_REQUEST\_DESCRIPTION](#cnb_pull_request_description) |
| PR 评审        | [CNB\_REVIEW\_DESCRIPTION](#cnb_review_description)             |
| PR 评论        | [CNB\_COMMENT\_BODY](#cnb_comment_body)                         |
| PR 评审评论      | [CNB\_COMMENT\_BODY](#cnb_comment_body)                         |
