面向在遠端 Mac上同時跑 OpenClawGo 建置的團隊:先用 onboarddoctor 與守護程序把 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 切換與健康偵測腳本範本

做法:對主鏈做短逾時偵測(例如三次、每次 5 秒),失敗則 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 建置

說明中心購買頁 均可免登入瀏覽。