cnb.cool 云原生构建状态蜂巢监控面板
实时监控 cnb.cool 平台上多个仓库的 CI/CD 构建状态,以蜂巢(Honeycomb)网格形式直观呈现每个仓库最新一次构建的结果。
本项目是一个轻量级的构建状态监控面板,面向使用 cnb.cool 云原生构建服务的团队。它通过蜂巢状六边形网格展示所有仓库的最新构建状态,让开发者一眼就能掌握哪些仓库构建成功、哪些正在运行、哪些已经失败。
前端基于 React 18 + Vite 7 构建,使用 @antv/g6 图可视化引擎渲染蜂巢布局;后端使用纯 Node.js 原生 HTTP 服务器(无框架依赖),负责代理 CNB API 请求并提供服务端缓存与限流。

页面顶部四张指标卡片实时汇总:
| 卡片 | 说明 |
|---|---|
| 仓库数 | 监控的仓库总数 |
| 运行中任务 | 当前处于 running/queued 状态的构建数 |
| 已成功的任务 | 最新一次构建状态为 success 的仓库数 |
| 已失败的任务 | 最新一次构建状态为 failed 的仓库数 |
首次启动时若缺少 CNB_TOKEN 配置,页面会弹出配置引导遮罩层,提示用户在 .env 文件中填入必要的参数。
/api/builds 获取数据,服务端代理请求 CNB API,避免跨域和 Token 暴露../ 等路径穿越攻击git clone <your-repo-url>
cd cnb-ci-cellular-map
yarn install
在项目根目录创建 .env 文件:
# 必填:CNB 访问令牌(需要 account-engage:r 和 repo-cnb-trigger:r 权限) CNB_TOKEN=<YOUR_CNB_TOKEN> # 可选:CNB API 地址,默认 https://api.cnb.cool CNB_API_URL=https://api.cnb.cool # 可选:手动指定监控的仓库列表(逗号分隔),不配置则自动发现 CNB_REPOS=owner/repo-a,owner/repo-b # 可选:自动发现仓库时的最大数量,默认 20 CNB_REPO_LIMIT=20 # 可选:API 请求超时(毫秒),默认 8000 CNB_TIMEOUT_MS=8000
权限说明:调用
/user/repos接口需要令牌包含account-engage:r权限;调用构建日志接口需要repo-cnb-trigger:r权限。若令牌权限不足,可在CNB_REPOS中手动指定仓库列表以跳过自动发现。
# 构建前端资源
yarn build
# 启动生产服务(默认端口 3000)
yarn start
# 或指定端口
PORT=8080 yarn start
yarn dev
开发模式会同时启动:
前端请求 /api/* 和 /healthz 会自动代理到 3001 端口。
http://localhost:3000| 接口 | 方法 | 说明 |
|---|---|---|
/api/builds | GET | 获取所有仓库最新构建数据 |
/healthz | GET | 健康检查,返回 { ok: true } |
| HTTP 状态码 | error 字段 | 说明 |
|---|---|---|
| 428 | cnb_config_required | 缺少 CNB_TOKEN 配置,响应体包含 missingKeys |
| 429 | too_many_requests | 请求过于频繁,触发速率限制 |
| 502 | cnb_api_forbidden | CNB API 鉴权失败 |
| 502 | cnb_api_error | CNB API 请求失败 |
| 类别 | 技术 |
|---|---|
| 前端框架 | React 18 |
| 构建工具 | Vite 7 |
| 图可视化 | @antv/g6 v5 + @antv/g6-extension-react |
| 后端 | Node.js 原生 HTTP 服务器 |
| 语言 | JavaScript (ESM) |
├── server.js # 生产服务器(静态文件 + API 代理) ├── scripts/ │ └── dev.js # 开发模式启动脚本 ├── src/ │ ├── main.jsx # 应用入口 │ ├── App.jsx # 主应用组件 │ ├── cnbClient.js # CNB API 客户端(仓库发现、构建数据拉取、缓存) │ ├── loadEnv.js # .env 文件加载器 │ ├── constants.js # 常量定义(刷新间隔、蜂巢尺寸等) │ ├── styles.css # 全局样式 │ ├── components/ │ │ ├── HoneycombGraph.jsx # 蜂巢图组件(G6 图实例管理) │ │ ├── HoneycombNode.jsx # 蜂巢六边形单元格组件 │ │ ├── BuildTooltip.jsx # 构建详情浮动提示 │ │ ├── ConfigOverlay.jsx # 配置引导遮罩层 │ │ └── ErrorBoundary.jsx # React 错误边界 │ └── utils/ │ ├── audio.js # Web Audio 声音提醒 │ ├── buildUtils.js # 构建数据汇总与去重 │ ├── format.js # 时间/状态/仓库名格式化 │ └── honeycomb.js # 蜂巢网格布局计算 ├── public/ │ └── cnb-logo.svg # CNB 品牌 Logo ├── index.html # HTML 入口 └── vite.config.js # Vite 配置(含开发代理)
MIT License