跳转到内容

cnb-rs build rerun

cnb-rs build rerun <sn> [--event <EVENT>] [--sync]
cnb-rs run rerun <sn>     # 命令组 alias

按构建号 (SN) 重跑历史构建。对齐 gh run rerun

流程:

  1. <sn> 过滤 build list 拿到原构建的 branch / commit
  2. api_trigger 事件(CNB API 硬性要求)+ 同 branch + 同 commit 调 start_build 发起新构建
  3. 打印新构建号和日志 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_trigger or start with api_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"

另请参阅

Released under the MIT License.