---
url: /zh/build/build-in-env.md
---
`云原生构建` 内置了一些默认环境变量。这些变量只读不可写，即使在构建过程中尝试覆盖，也不会生效。

下文中的 `合并类事件` 包含以下几种：

* `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)。

## 基础变量

### 变量概览

| 变量名 | 说明 |
|--------|------|
| [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\_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\_TOKEN\_FOR\_AI](#cnb_token_for_ai) | AI 身份令牌 |
| [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\_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)）
* 其他可信事件

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

| 权限项 | 说明 |
|--------|------|
| `repo-code:rw` | 代码读写 |
| `repo-pr:rw` | PR 读写 |
| `repo-issue:rw` | Issue 读写 |
| `repo-notes:rw` | 评论读写 |
| `repo-contents:rw` | 内容读写 |
| `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:r` | Issue 只读 |
| `repo-notes:rw` | 评论读写 |
| `repo-contents:r` | 内容只读 |
| `registry-package:r` | 制品库只读 |
| `account-profile:r` | 用户信息只读 |

**其他可信事件：**

| 权限项 | 说明 |
|--------|------|
| `repo-code:rw` | 代码读写 |
| `repo-pr:rw` | PR 读写 |
| `repo-issue:rw` | Issue 读写 |
| `repo-notes:rw` | 评论读写 |
| `repo-contents:rw` | 内容读写 |
| `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 后仓库的流水线，该令牌的权限会被限制在**当前仓库**。
* 对于非跨仓 PR 场景下的 NPC 事件，该令牌的权限会被限制在**当前仓库**。

### TWINE\_USERNAME

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

### TWINE\_PASSWORD

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

### CNB\_TOKEN\_FOR\_AI

用于标识调用者为 AI 身份的用户令牌，其权限与作用范围与 `CNB_TOKEN` 完全一致。

**仅支持以下事件类型**，超出范围调用无效：

* 合并类事件：如 PR 、合并等事件
* Issue 生命周期事件：`issue.open`（创建）、`issue.close`（关闭）

使用场景示例：

在合并请求（PR）中发表 AI 生成的评论时，可通过该令牌调用**发表评论的 OpenAPI 接口**。
调用成功后，页面会显示 AI 标记，明确该评论由 AI 生成。

### 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。

**取值规则**:

| 触发事件 | 变量值 |
|---------|--------|
| `push`、`commit.add`、`branch.create` | 最后一次提交的 SHA |
| `tag_push`、`tag_deploy.*` | 该 Tag 最后一次提交的 SHA |
| `auto_tag`、`branch.delete`、`issue.*`、NPC 事件 | 主分支最后一次提交的 SHA |
| `pull_request.merged` | 合并后的 SHA |
| `pull_request.target`、`pull_request.mergeable` | 目标分支最后一次提交的 SHA |
| `pull_request`、`pull_request.approved`、`pull_request.changes_requested`、`pull_request.comment` | 源分支最后一次提交的 SHA |
| 云原生开发、自定义事件 | 指定分支最后一次提交的 SHA |

::: tip 提示
对于 `pull_request` 等事件，代码尚未真正合并，因此这里取的是源分支最后一次提交的 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` 触发的构建,值为新增的 Commits 数量。

可结合 `git log -n` 查看新增的 Commits。

### 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

是否为预发布 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\_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

自定义 Shell 脚本执行的工作空间根目录。

### 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\_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`、`pull_request.update`、`pull_request.target`、`pull_request.mergeable`、`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 在仓库中的编号 IID。

### 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 的内容对应不同的环境变量。为了减少理解和处理上的遗漏，处理 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) |
