面向在远程 Mac上同时跑 OpenClawGo 构建的团队:用 onboard / doctor 与守护进程把 PATH、代理与证书对齐后,再封装一段「探测 → 切换 GOPROXY → 重试 go mod download」脚本,并把日志落到可被流水线上传的路径。参数细节与链式回源可对照 Go Modules GOPROXY 决策矩阵;网关与 LaunchAgent 自检见 健康守护 HowTo

① 安装与自检清单(onboard / doctor / 守护进程)

先排除「CLI 正常、CI 不正常」的三角不一致:交互 shell、launchd 下的守护进程、Runner 任务环境各跑一遍版本与诊断。

远程 Mac 上 go mod download 常见报错包括:代理返回 403/404(镜像未收录或路径被拦)、i/o timeout(跨境链路抖动)、GOSUMDB 校验失败(替换或内网策略不一致)、以及企业 MITM 证书未注入 SSL_CERT_FILE。先把失败归类,再决定是换链、改私有模式还是修证书。

可操作步骤
  • onboard:按官方引导完成本机绑定与目录约定,记录网关监听地址与 Token 策略。
  • doctor:修复 Node 路径、证书与代理变量;若 doctor 报 HTTPS 相关错误,先修再谈 Go 拉模块。
  • 守护进程:核对 plist 的 EnvironmentVariables 是否包含 HTTPS_PROXYNO_PROXYNODE_EXTRA_CA_CERTS;与 CI Job 使用的 env 文件对齐。
  • 排错launchctl print 看退出码;log show 按进程名过滤;重复 Label 或旧二进制路径是常见坑。

② GOPROXY 切换与健康探测脚本模板

思路:对主链做短超时探测(如三次、每次 5s),失败则 export GOPROXY 为备用逗号链,再执行下载;全程不要把令牌写进仓库。

#!/usr/bin/env bash set -euo pipefail LOG_DIR="${CI_ARTIFACT_DIR:-./ci-logs}" mkdir -p "$LOG_DIR" exec > >(tee -a "$LOG_DIR/gomod.log") 2>&1 PRIMARY="${GOPROXY_PRIMARY:-https://goproxy.cn,https://proxy.golang.org,direct}" FALLBACK="${GOPROXY_FALLBACK:-https://proxy.golang.org,direct}" probe_proxy() { local url="${GOPROXY_PROBE_URL:-https://proxy.golang.org}" curl -fsS --max-time 5 "$url" -o /dev/null || return 1 } pick_goproxy() { local i=0 while [ "$i" -lt 3 ]; do if probe_proxy; then export GOPROXY="$PRIMARY"; echo "using PRIMARY GOPROXY"; return 0; fi i=$((i+1)); sleep 2 done export GOPROXY="$FALLBACK" echo "fallback GOPROXY" } pick_goproxy for attempt in 1 2 3; do go mod download && exit 0 sleep $((attempt*2)) done go env GOPROXY GOSUMDB GOPRIVATE >>"$LOG_DIR/gomod-env.txt" || true exit 1

GOPROXY_PROBE_URL 换成与你主链一致的可达端点;私有模块继续依赖 GOPRIVATE,与矩阵文一致。

③ 手动改环境变量 vs 自动化触发

方式 适用 风险
手动 export 临时排障、单步复现 易忘回滚、多 Job 状态串味
流水线脚本切换 无人值守、可审计日志 探针误杀需调超时与 URL

建议:日常 CI 一律走脚本;仅在首次接入节点时用手动方式验证链路与证书。

④ CI 日志回传最小步骤

目标是把 go mod 失败时的环境快照与脚本输出交给平台侧,无需登录网页控制台也能复盘。

  • 在 Job 开头定义统一目录(如 CI_ARTIFACT_DIR),脚本只写该目录。
  • tee 或重定向保留完整标准输出。
  • 流水线末步上传该目录为构建产物;失败 Job 同样上传,便于对照最后一次 GOPROXY

⑤ 常见问题(FAQ)

openclaw doctor 通过但 go mod download 仍超时?

Doctor 校验网关与本地依赖,Go 模块走 GOPROXY 与 sumdb。请在同一 Job 打印 go env 相关项,并对代理主机单独 curl;多为链首未同步或跨境 TLS 问题,可切换逗号链或缩短并发。

脚本里该用 go env -w 还是 export?

CI 与多任务隔离优先 export,避免污染用户全局;单人长期节点再考虑持久化写入。

健康探测应探什么 URL?

使用与真实 GOPROXY 主机一致、可达且无需敏感参数的端点,超时 3–8 秒;日志勿打印带凭据的地址。

总结:OpenClaw 侧用 onboard/doctor/守护进程把网络栈对齐,Go 侧用「探测 + 切换 + 三次指数退避」包住 go mod download,再用固定目录与 tee 完成日志回传,即可在远程 Mac 上最小复现稳定拉模块。更多排障可参考 OpenClaw 安装与排错指南。需要 Apple Silicon 同构节点可免登录查看 首页帮助中心购买页;专题汇总见 技术博客

远程 Mac 与 CI

稳定节点上跑 OpenClaw 与 Go 构建

帮助中心购买页 均可免登录浏览。

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