🚀 Jenkins Generic Webhook 把构建事件推到远程 MacOpenClaw 网关,先做 composer/npm 预检回传摘要。安装侧通常要求 Node 22.16+ 或 24 LTSopenclaw doctorDashboard 令牌仅存本机,并用 curl/health。内链:安装排错健康守护Discord 摘要;详见 docs.openclaw.ai

环境与最小权限准备

痛点1)0.0.0.0 暴露管理面;2)并行 Job 共用目录致缓存串味;3)launchd 与 shell 的 Node 路径不一致致守护进程异常。

维度 推荐(生产) 避免
网关监听 127.0.0.1 + SSH 反向隧道 / 内网反代只暴露单一路径 Dashboard 与业务口无鉴权直连公网
Node 与自检 24 LTS 或文档最低 22.16+;安装后必跑 openclaw doctor 仅登录 shell 可见的 nvm 别名,launchd 未继承
令牌与 Jenkins OpenClaw 令牌写 plist/Keychain;Jenkins 侧仅保存调用预检的只读用户与 API Token 把双方密钥提交进 Git 或打在镜像层
健康检查 监控脚本轮询本机 /health 与 Jenkins /login 仅靠人工发现 Webhook 静默失败

预检进程单独设置 COMPOSER_CACHE_DIRnpm_config_cache;企业根证书用 NODE_EXTRA_CA_CERTS。跨境 PHP 可为 Composer 配镜像并收紧超时。

健康检查可与导语中 LaunchAgent 守护文一致:定时 curl -sf http://127.0.0.1:<port>/health,失败则 launchctl kickstart 拉起网关,避免 Jenkins 长期 connection refused。

Jenkins Generic Webhook 与签名校验参数

安装 Generic Webhook Trigger 后,在 Job 里生成含随机 token 的 URL,经隧道只映射到 OpenClaw 回环端口。Post contentapplication/json,用 JSONPath 取 jobbuild、分支与仓库。

防篡改可约定共享密钥:请求头 X-Jenkins-Signature 为 body 的 HMAC-SHA256(十六进制),网关验签后再解析;反代勿改 body。可再加 Authorization: Bearer 静态令牌。

Jenkins 若需回调自身 REST,请使用仅具必要 Job 范围的 API 用户,定期轮换 Token,并禁止把明文密钥写进 Freestyle 的 echo 步骤日志。

OpenClaw 侧接收、调用 composer/npm 等预检命令模板

Handler 流程:验 token/签名 → 解析 job/build/git → 在 /var/tmp/jenkins-preflight-<build> git clone --depth 1 → 串行预检,失败短路并记录退出码。

最小可复现步骤清单
  • openclaw doctor 通过后再由 launchd 拉起网关。
  • 将 Jenkins Webhook 经隧道落到 127.0.0.1 业务端口。
  • 验 token/HMAC,拒绝非法体与非 JSON。
  • 每构建独立 WORK_DIR,注入隔离缓存环境变量。
  • 执行下方 composer/npm 模板,捕获 stdout/stderr 前 4KB。
  • 组装 oksummarybuild 后回传。
# PHP / Composer(仅预检,不写 vendor) composer validate --no-check-publish --no-interaction composer install --no-interaction --dry-run
# Node(需 lockfile;npm 10+) npm ci --dry-run

预检脚本建议把标准输出尾部写入摘要字段,并在失败时附带 exit_code,便于 Jenkins 控制台与下游告警对齐。

构建摘要回传(HTTP/Webhook)与失败重试

HTTP 回 Jenkins:POST 到自建端点或经典 REST(先取 /crumbIssuer/api/json 再带 Jenkins-Crumb)。协作侧可用 Incoming Webhook embed,字段对齐导语 Discord 文。

重试:网络错、4295xx最多三次,间隔 1/2/4 秒;幂等键 job+build,成功后去重。单次超时 15 秒

摘要 JSON 可约定字段 statuspreflightduration_ms,方便 Pipeline 用 readJSON 做门禁、可视化趋势与告警聚合及报表展示。

常见报错排查 FAQ

Jenkins 侧显示 401 或 OpenClaw 记录验签失败?

核对 URL token;HMAC 用原始 body;反代勿改 JSON。

回传 Jenkins API 返回 403 Forbidden?

经典 Jenkins 要 crumb+Cookie;API 用户需 Job 权限;前置 OAuth 时用服务账号路径。

composer/npm 在守护进程里报找不到命令?

LaunchAgent 的 EnvironmentVariables 写全路径 PATHCOMPOSER_HOME

Webhook 重复通知同一构建?

网关侧去重;Jenkins 勿多 Job 共用同一 token 致双倍 POST。

总结回环网关Webhook 参数签名校验隔离预检幂等回传重试。🖥️ 租用常驻远程 Mac 托管 OpenClaw,避免合盖与家宽抖动。免登录:购买帮助博客

Jenkins × OpenClaw

租用远程 Mac 跑常驻网关与 Webhook 预检

帮助中心购买页首页 免登录;更多 OpenClaw 实践见 技术博客

多地域可选
SSH 访问
弹性租期
支持渠道