CNB Git Skill
在 CNB(cnb.cool)平台上进行 Git 操作和 API 调用。
认证配置
Token(敏感)— 通过 Gateway secrets 注入(不暴露在日志和配置展示中):
| 变量名 | 说明 |
|---|
| INLINECODE0 | Git 访问令牌,用于 clone/push |
| INLINECODE1 |
API 令牌,用于调用 CNB Open API |
⚠️ Token 类型注意:必须使用经典令牌(Classic Token)或 REST API 令牌,MCP 读写权限 Token 对 REST API 无效(所有 /-/ 路径返回 404)。
注入方式:在 OpenClaw openclaw.json 的 env.vars 中配置,密钥部分会被脱敏显示。
用户名/邮箱(非敏感)— 写入 .env 文件(放在 /workspace/.env):
CODEBLOCK0
同时设置 Git 全局配置:
CODEBLOCK1
克隆仓库:
CODEBLOCK2
API 基础调用
API 服务地址: INLINECODE7
⚠️ Token 类型注意:CNB 的 MCP Token(MCP 读写权限)不支持 REST API,所有接口均返回 404。必须使用经典令牌(Classic Token)或具有 REST API 权限的 Personal Access Token。
CODEBLOCK3
Merge Request(MR)操作
创建 MR:
CODEBLOCK4
字段说明:head = 源分支,base = 目标分支(⚠️ 不是 source_branch/target_branch)
列出 MR:
CODEBLOCK5
添加评论:
CODEBLOCK6
提交评审:
CODEBLOCK7
合并 MR:
CODEBLOCK8
管理标签和评审人:
CODEBLOCK9
Pipeline 构建结果
获取构建历史:
CODEBLOCK10
获取构建详情和日志:
CODEBLOCK11
Pipeline 触发
手动触发 Pipeline:
CODEBLOCK12
获取触发器列表:
CODEBLOCK13
重新触发构建:
CODEBLOCK14
关键环境变量
| 变量名 | 说明 |
|---|
| CNBREPOSLUG | 仓库路径(group/repo) |
| CNB_BRANCH |
分支名 |
| CNB_COMMIT | 提交 SHA |
| CNB
BUILDID | 构建流水号 |
| CNB
BUILDSTATUS | 构建状态(success/error/cancel) |
| CNB
PIPELINESTATUS | Pipeline 状态 |
| CNB
BUILDWEB_URL | 构建日志地址 |
| CNB
PULLREQUEST | 是否为 PR 触发 |
| CNB_TOKEN | 流水线临时令牌(系统注入) |
最佳实践
- - 不要在代码中硬编码访问令牌
- 使用环境变量或密钥仓库存储敏感信息
- 定期轮换令牌
- 不可信事件(PR评论、Issue评论)的流水线权限受限,敏感操作应在可信事件中执行
CNB Git 技能
在 CNB(cnb.cool)平台上进行 Git 操作和 API 调用。
认证配置
Token(敏感)— 通过 Gateway secrets 注入(不暴露在日志和配置展示中):
| 变量名 | 说明 |
|---|
| CNBCOOLGITTOKEN | Git 访问令牌,用于 clone/push |
| CNBCOOLAPITOKEN |
API 令牌,用于调用 CNB Open API |
⚠️ Token 类型注意:必须使用经典令牌(Classic Token)或 REST API 令牌,MCP 读写权限 Token 对 REST API 无效(所有 /-/ 路径返回 404)。
注入方式:在 OpenClaw openclaw.json 的 env.vars 中配置,密钥部分会被脱敏显示。
用户名/邮箱(非敏感)— 写入 .env 文件(放在 /workspace/.env):
CNBCOOLGITUSERNAME=你的Git用户名
CNBCOOLGITUSEREMAIL=你的Git邮箱
同时设置 Git 全局配置:
bash
git config --global user.name ${CNBCOOLGITUSERNAME}
git config --global user.email ${CNBCOOLGITUSEREMAIL}
克隆仓库:
bash
git clone https://cnb:${CNBCOOLGIT_TOKEN}@cnb.cool/your-group/your-repo.git
API 基础调用
API 服务地址:https://api.cnb.cool
⚠️ Token 类型注意:CNB 的 MCP Token(MCP 读写权限)不支持 REST API,所有接口均返回 404。必须使用经典令牌(Classic Token)或具有 REST API 权限的 Personal Access Token。
bash
所有 API 调用都需携带以下两个 Header
curl -H Authorization: ${CNB
COOLAPI_TOKEN} \
-H Accept: application/vnd.cnb.api+json \
https://api.cnb.cool/...
Merge Request(MR)操作
创建 MR:
bash
curl -X POST \
-H Authorization: ${CNBCOOLAPI_TOKEN} \
-H Content-Type: application/json \
-H Accept: application/vnd.cnb.api+json \
-d {
title: feat: 功能描述,
head: feature/branch-name,
base: main,
body: 变更内容...
} \
https://api.cnb.cool/{owner}/{repo}/-/pulls
字段说明:head = 源分支,base = 目标分支(⚠️ 不是 sourcebranch/targetbranch)
列出 MR:
bash
查看所有 MR
curl https://api.cnb.cool/{owner}/{repo}/-/pulls \
-H Authorization: ${CNB
COOLAPI_TOKEN} \
-H Accept: application/vnd.cnb.api+json
查看指定 MR
curl https://api.cnb.cool/{owner}/{repo}/-/pulls/{number} \
-H Authorization: ${CNB
COOLAPI_TOKEN} \
-H Accept: application/vnd.cnb.api+json
添加评论:
bash
curl -X POST \
-H Authorization: ${CNBCOOLAPI_TOKEN} \
-H Content-Type: application/json \
-H Accept: application/vnd.cnb.api+json \
-d {body: 评论内容} \
https://api.cnb.cool/{owner}/{repo}/-/pulls/{number}/comments
提交评审:
bash
APPROVE - 批准
curl -X POST \
-H Authorization: ${CNB
COOLAPI_TOKEN} \
-H Content-Type: application/json \
-H Accept: application/vnd.cnb.api+json \
-d {event: APPROVE, body: LGTM} \
https://api.cnb.cool/{owner}/{repo}/-/pulls/{number}/reviews
REQUEST_CHANGES - 需要改进
curl -X POST \
-H Authorization: ${CNB
COOLAPI_TOKEN} \
-H Content-Type: application/json \
-H Accept: application/vnd.cnb.api+json \
-d {event: REQUEST_CHANGES, body: 请修复...} \
https://api.cnb.cool/{owner}/{repo}/-/pulls/{number}/reviews
合并 MR:
bash
curl -X PUT \
-H Authorization: ${CNBCOOLAPI_TOKEN} \
-H Content-Type: application/json \
-H Accept: application/vnd.cnb.api+json \
-d {
merge_method: merge
} \
https://api.cnb.cool/{owner}/{repo}/-/pulls/{number}/merge
管理标签和评审人:
bash
添加标签
curl -X POST \
-H Authorization: ${CNB
COOLAPI_TOKEN} \
-H Content-Type: application/json \
-H Accept: application/vnd.cnb.api+json \
-d {labels: [bug, high-priority]} \
https://api.cnb.cool/{owner}/{repo}/-/pulls/{number}/labels
添加评审人
curl -X POST \
-H Authorization: ${CNB
COOLAPI_TOKEN} \
-H Content-Type: application/json \
-H Accept: application/vnd.cnb.api+json \
-d {reviewers: [username1, username2]} \
https://api.cnb.cool/{owner}/{repo}/-/pulls/{number}/reviewers
Pipeline 构建结果
获取构建历史:
bash
curl https://api.cnb.cool/{owner}/{repo}/-/builds?page=1&page_size=20 \
-H Authorization: ${CNBCOOLAPI_TOKEN} \
-H Accept: application/vnd.cnb.api+json
获取构建详情和日志:
bash
构建详情
curl https://api.cnb.cool/{owner}/{repo}/-/builds/{build_id} \
-H Authorization: ${CNB
COOLAPI_TOKEN} \
-H Accept: application/vnd.cnb.api+json
构建日志
curl https://api.cnb.cool/{owner}/{repo}/-/builds/{build_id}/logs \
-H Authorization: ${CNB
COOLAPI_TOKEN} \
-H Accept: application/vnd.cnb.api+json
Pipeline 触发
手动触发 Pipeline:
bash
通过 API 触发流水线
curl -X POST \
-H Authorization: ${CNB
COOLAPI_TOKEN} \
-H Content-Type: application/json \
-H Accept: application/vnd.cnb.api+json \
-d {
branch: main,
event: api_trigger,
env: {
KEY: value
}
} \
https://api.cnb.cool/{owner}/{repo}/-/trigger
获取触发器列表:
bash
curl https://api.cnb.cool/{owner}/{repo}/-/triggers \
-H Authorization: ${CNBCOOLAPI_TOKEN} \
-H Accept: application/vnd.cnb.api+json
重新触发构建:
bash
curl -X POST \
-H Authorization: ${CNBCOOLAPI_TOKEN} \
-H Accept: application/vnd.cnb.api+json \
https://api.cnb.cool/{owner}/{repo}/-/builds/{build_id}/retry
关键环境变量
| 变量名 | 说明 |
|---|
| CNBREPOSLUG | 仓库路径(group/repo) |
| CNB_BRANCH |
分支名 |
| CNB_COMMIT | 提交 SHA |
| CNB
BUILDID | 构建流水号 |
| CNB
BUILDSTATUS | 构建状态(success/error/cancel) |
| CNB
PIPELINESTATUS | Pipeline 状态 |
| CNB
BUILDWEB_URL | 构建日志地址 |
| CNB
PULLREQUEST | 是否为 PR 触发 |
| CNB_TOKEN | 流水线临时令牌(系统注入) |
最佳实践
- - 不要在代码中硬编码访问令牌
- 使用环境变量或密钥仓库存储敏感信息
- 定期