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发起新构建 - 轮询新构建,识别事件未定义时生成的空
error构建 - 打印新构建号和日志 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)
--json 保持原有 BuildResult JSON 结构,避免破坏脚本兼容性;事后探测只在命中配置错误时影响退出码并向 stderr 输出诊断。
为什么默认 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 需要提前为该事件定义构建配置。事件未定义时,服务端仍会接受请求并创建新构建,但该构建会随即进入 error 状态且没有正常流水线;rerun 会短暂轮询并给出明确诊断,以非零状态退出。
如果你希望走仓库中已定义的其他 api_trigger_<suffix> 子配置,用 --event 覆盖。
与 gh 的差异
- gh
run rerun重跑同一个 GitHub Actions run(保留 run id) - CNB 没有「重用同一 build record」的概念,每次都是新 SN;语义对齐为「用同 commit / 分支 再触发一次」
示例
# 重跑某次历史构建(默认事件 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 事件配置时,服务端有两种表现(实测两者都会出现):直接返回 HTTP 422 [CONFIG_EVENT_EMPTY],或先成功创建构建、随后立刻置为 error。两种情况 rerun 都会给出同一句诊断;后者显示为:
✗ 新构建 cnb-xxx-1jp1234ab 立即失败:该 commit 的 .cnb.yml 没有为事件 `api_trigger` 定义流水线。请用 `--event api_trigger_<name>` 指定已定义的事件(查看:`cnb-rs repo file view .cnb.yml`);构建日志:https://cnb.cool/wwvo/cnb-rs/cnb-rs/-/build/cnb-xxx-1jp1234ab
错误: 构建重跑失败解决方法:用 --event api_trigger_<name> 选择 .cnb.yml 中已有的事件,或在仓库 .cnb.yml 顶层加 api_trigger 事件定义,例:
main:
api_trigger:
- runner:
cpus: 2
docker:
image: docker.cnb.cool/your/image
stages:
- name: build
script: echo "rerun by API"