logo
Public
0
1
WeChat Login

CKR

Auth cnb Eryajf HitCount Eryajf Blog Eryajf WeChat Eryajf Awesome Stars

⚗️ 一个 CNB 插件/CLI,用来保证指定仓库始终有可用的云原生开发环境。


🥳 欢迎关注我的其他项目:

项目简介
images🧰 提供CNB基础开发构建环境镜像,通过构建按钮指定构建,优雅且舒服
qifei🛫 快速拉起一个基础环境,直接起飞。
awesome-cnb🤩 记录CNB中那些优秀的仓库
hubproxy🦄 零帧起手,一键启动,提供 Docker 镜像加速、GitHub 加速、下载离线镜像等功能
fileUpDown📦 临时文件中转站,像快递站那样,临时存取
cnb-manager🍉 cnb管理器,一个uTools插件。
start-custom-environment🎭 基于云原生构建启动自定义云原生开发环境

它会先检查当前仓库是否已有活跃环境:

  • 有活跃环境:直接复用,不重复启动
  • 无活跃环境:自动触发启动
  • 启动成功或检查到活跃环境后:打印可访问的 jumpUrl

功能特性

  • 一次性执行:默认只检查一次,必要时启动
  • 定时巡检:传入 --interval 后按周期执行
  • 只检查不启动:--dry-run
  • 自动输出跳转地址:优先调用详情接口获取 jumpUrl,失败时自动按规则兜底拼接
  • 优雅退出:响应 SIGINT/SIGTERM

工作流程

  1. 读取参数与环境变量,构建配置
  2. 调用 workspace 列表接口判断是否已有活跃环境
  3. 如果没有且非 dry-run,调用启动接口拉起环境
  4. 在「已活跃」或「启动成功」场景,输出 jumpUrl

使用方式

./ckr \ --token <CNB_TOKEN> \ --repo <org/repo> \ [--branch main] \ [--interval 10m] \ [--timeout 20s] \ [--base-url https://api.cnb.cool/] \ [--dry-run]

参数说明

  • --token:CNB 访问令牌(必填)
  • --repo:仓库路径,格式 org/repo(必填)
  • --branch:启动分支,默认 main
  • --interval:巡检周期,如 30s5m,为空表示只执行一次
  • --timeout:单次执行超时,默认 20s
  • --base-url:CNB API 地址,默认 https://api.cnb.cool/
  • --dry-run:只检查,不执行启动

环境变量

同名参数均可通过环境变量传入:

  • CNB_TOKEN / PLUGIN_TOKEN / PLUGIN_CNB_TOKEN
  • CNB_REPO_SLUG / PLUGIN_REPO / PLUGIN_REPO_PATH
  • CNB_BRANCH / PLUGIN_BRANCH
  • CNB_BASE_URL / PLUGIN_BASE_URL
  • CNB_INTERVAL / PLUGIN_INTERVAL
  • CNB_TIMEOUT / PLUGIN_TIMEOUT
  • CNB_DRY_RUN / PLUGIN_DRY_RUN

优先级:命令行参数 > 环境变量 > 默认值。

API 协议与权限

本工具通过 CNB OpenAPI(HTTPS)访问工作空间相关接口。

  • 协议:HTTPS
  • 鉴权:Authorization: <token>
  • 媒体类型:Accept: application/vnd.cnb.api+json(由 SDK 处理)

主要接口:

  • 列表:GET /workspace/list
  • 启动:POST /{repo}/-/workspace/start
  • 详情:GET /{repo}/-/workspace/detail/{sn}

建议最小权限:

  • 列表 workspace:account-engage:r
  • 启动 workspace:repo-cnb-trigger:rw

jumpUrl 输出规则

在以下场景会输出 jumpUrl

  • 检查到已有活跃环境
  • 新启动环境成功

输出策略:

  • 优先使用详情接口返回的 jumpUrl
  • 若环境刚启动导致详情接口短暂不可用(如 404),自动兜底拼接:
https://cnb.cool/{repo}/-/workspace/jump?pipelineId={pipelineId}

其中 pipelineId 默认按 {sn}-001 规则生成(若 sn 已带三位数字后缀则直接使用)。

本地运行示例

go build -o ckr . # 一次性执行 ./ckr --token "$CNB_TOKEN" --repo "znb/cnb-keep-running" # 仅检查 ./ckr --token "$CNB_TOKEN" --repo "znb/cnb-keep-running" --dry-run # 每 10 分钟检查一次 ./ckr --token "$CNB_TOKEN" --repo "znb/cnb-keep-running" --interval 10m

在 CNB 流水线中使用

如果希望它在固定时间自动执行,可使用 CNB 的 crontab 触发方式:

# 此定时任务配置在 main 分支下 # 需要把对应权限的token传递进去,默认检查当前仓库的main分支 main: "crontab: */9 * * * *": - imports: - https://cnb.cool/xxx/env/-/blob/main/env.yaml stages: - name: ckr image: docker.cnb.cool/znb/ckr settings: token: "${CNB_ERYAJF_TOKEN}"

退出码

  • 0:执行成功
  • 1:配置错误(缺少必填参数、格式非法等)
  • 2:运行时错误(接口调用失败等)