cnb-rs build rerun
cnb-rs build rerun <sn> [--event <EVENT>] [--sync]
cnb-rs run rerun <sn> # 命令组 alias按构建号 (SN) 重跑历史构建。对齐 gh run rerun。
流程:
- 用
<sn>过滤build list拿到原构建的branch/commit - 用
api_trigger事件(CNB API 硬性要求)+ 同 branch + 同 commit 调start_build发起新构建 - 打印新构建号和日志 URL
BRANCH 字段 caveat
原构建同时有 sha 和 branch 时,CNB 后端会以 sha 为主、不回填 BRANCH 字段,build list 表里新构建 BRANCH 列可能显示为空。你仍能在 status / stage 里看到实际构建走的 commit 是对的。这是 CNB 后端约定不是 rerun 缺陷,rerun 命令会在成功段主动提示。
选项
<sn>:要重跑的构建号(必填)-e, --event <EVENT>:触发事件名,默认api_trigger--sync:等待构建正式触发再返回
继承的全局选项:
--repo <REPO>:指定仓库路径(格式:group/repo)--json:以 JSON 格式输出--domain <DOMAIN>:指定目标域名(默认:cnb.cool)
为什么默认 event 是 api_trigger
CNB POST /-/build/start 服务端硬性约束:
Event must be
api_triggeror start withapi_trigger_.
原 event(vscode / push / pr / cron)都是 CNB 平台内部通道触发(IDE 启动 / git push hook / 定时器),不能从 API 反向触发。 所以 rerun 默认把 event 重写为 api_trigger;仓库 .cnb.yml 需要提前为 api_trigger 事件定义构建配置,否则服务端会返 HTTP 422。
如果你希望走仓库中已定义的其他 api_trigger_<suffix> 子配置,用 --event 覆盖。
与 gh 的差异
- gh
run rerun重跑同一个 GitHub Actions run(保留 run id) - CNB 没有「重用同一 build record」的概念,每次都是新 SN;语义对齐为「用同 commit / 分支 再触发一次」
示例
bash
# 重跑某次历史构建(默认事件 api_trigger)
$ cnb-rs build rerun cnb-bp7-1jooim7cn
从构建 cnb-bp7-1jooim7cn 提取参数:
分支: main
Commit: 5d1764d6913491540fdf3c1dd9316d93e066d223
原事件: vscode
新事件: api_trigger (CNB API 仅接受 api_trigger∗)
✓ 构建已重新触发
新构建号: cnb-xxx-1jp1234ab
日志: https://cnb.cool/wwvo/cnb-rs/cnb-rs/-/build/cnb-xxx-1jp1234ab
# 用自定义 api_trigger 子配置
$ cnb-rs build rerun cnb-bp7-1jooim7cn --event api_trigger_release
# 等待构建正式触发后再返回
$ cnb-rs build rerun cnb-bp7-1jooim7cn --sync
# JSON 输出供脚本使用
$ cnb-rs build rerun cnb-bp7-1jooim7cn --json错误诊断
仓库 .cnb.yml 没有为 api_trigger 事件配置:
错误: 触发新构建失败: API 请求失败 (HTTP 422):
{"errcode":422,"errmsg":"[CONFIG_EVENT_EMPTY]CI config file not found,
or no api_trigger event config for branch main and $."}解决方法:在仓库 .cnb.yml 顶层加 api_trigger 事件定义,例:
yaml
main:
api_trigger:
- runner:
cpus: 2
docker:
image: docker.cnb.cool/your/image
stages:
- name: build
script: echo "rerun by API"