🪝📦 导语:builds.sr.ht 回调到远程 Mac 的 OpenClaw 后,可在编译前做依赖预拉取与 lockfile 漂移扫描,并把失败摘要与网关探针压成一行回写 CI。含 curl、npm 安装骨架、Node 二十四门槛与 doctor 串联 gateway status;附镜像并发、Git 重试、磁盘水位矩阵。延展 LaunchDarkly Webhook 文;博客列表、帮助、首页免登录。
安装门槛:Node 二十四与 curl、npm 官方脚本
先钉 Node 二十四 再装 OpenClaw;版本过低直接失败,避免文档与行为漂移。
node -v # 期望 v24.x
curl -fsSL https://openclaw.ai/install.sh | bash
npm install -g openclaw@latest
openclaw --version
装完跑 openclaw doctor,并把 openclaw gateway status --format json 落到只读归档供 Webhook 合并摘要。
痛点拆解:为什么要在 builds.sr.ht 之前拦截
① 镜像层与 npm 元数据并发拉满磁盘,编译阶段随机超时。② 锁文件暗改未跑全量安装,CI 绿装不全。③ 回调无验签,伪造事件刷爆预拉取。
sr.ht 构建镜像并发 × Git 重试 × 磁盘水位决策矩阵
| 负载画像 | 构建镜像并发策略 | Git 拉取重试 | 磁盘水位阈值与动作 |
|---|---|---|---|
| 独占 Mac、单流水线 | 镜像层并发二到四 | 二四八秒三轮,可加 shallow | 大于十八吉字节全开;十二到十八仅锁文件 |
| 多 Webhook 交错 | 并发降到一 | 指数退避加抖动 | 低于十二吉字节跳过预热并标注 |
| 跨境高丢包 | 禁与 npm 全量并行 | 每轮前 prune,失败换克隆 URL | 水位正常也限层数为一 |
步骤清单:Webhook → 预拉取 → 合并摘要 → 回传 CI
可执行流水线骨架
- ① builds.sr.ht 配 HTTPS Webhook,头带 HMAC 或 Bearer。
- ② 验签通过后跑预拉取:按矩阵定并发,
git fetch与包管理器干跑。 - ③ 锁文件漂移:
git diff --exit-code或专用扫描,失败抓末十六行。 - ④ 合并 gateway status 与 doctor 退出码成单行 JSON。
- ⑤ 受限令牌 POST 回 CI,二四八秒有界重试。
- ⑥ 映射退出码:验签四零一、漂移四零六、磁盘降级写警告字段。
openclaw doctor
openclaw gateway status --format json > "$CI_ARTIFACT_DIR/oc-gateway.json"
串联验收:doctor 与 gateway status 如何堵住假绿
doctor 与 gateway status 归档只读,Webhook 线程只读合并;doctor 非零则摘要写 doctor_failed 并跳过预拉取,杜绝假绿。归档按流水线标识分桶,磁盘百分比写入摘要便于值班秒判根因。
可引用信息(值班可直接粘贴)
硬数字与约定
- 退避:二四八秒,至多三次。
- 磁盘:大于十八吉字节正常;十二到十八仅锁文件;低于十二只摘要。
- 脱敏:摘要剔除用户家目录绝对路径,仅保留仓库相对路径。
- 锁文件:按仓库勾选 npm、pnpm、CocoaPods,缺项标
skipped。
常见问题(令牌、TLS、端口)
令牌放哪?
用头传递;勿放查询串以免进日志。
自签证书能上生产吗?
不建议;用受信 CA,平台侧严格校验链。
一八七八九端口冲突?
改监听或反代四四三;启动前 lsof 查占用。
验签失败还预拉取吗?
否;四零一短路并审计。
TLS 在哪终结?
边缘终结,内网 mTLS 或 SSH 隧道到 Mac。