Für Teams auf Remote-Macs mit häufigem go mod download und CI: falsche GOPROXY-Reihenfolge, GOPRIVATE oder geteilter GOMODCACHE erzeugen flaky Builds. Hier: drei Tabellen (Proxy-Matrix, Variablen, Triage), Shell-Beispiele, Rollout-Checkliste. Ziel ist reproduzierbare Laufzeiten auf Apple-Silicon-Runnern ohne stilles Ändern von go.mod. Startseite · Technik-Blog · Git/Docker-Pull · Rust-Cargo-Matrix.

① Engpässe: Warum Modul-Downloads auf gemieteten Macs hängen bleiben

Drei typische Ursachen – unabhängig von der Rohbandbreite:

  • Proxy-Kette: Ohne direct-Fallback scheitert der Resolver oft beim ersten Timeout.
  • Privat: Ohne GOPRIVATE laufen interne Pfade über fremde Proxies; SumDB kollidiert.
  • Cache: Geteilter GOMODCACHE + wechselnde GOPROXY → Locks und Drift.

② Entscheidungsmatrix: selbst gehosteter Modul-Proxy vs. öffentliche GOPROXY-Kette

Selbst gehosteter Proxy (z. B. Athens) vs. öffentliche Komma-Kette + direct – Abstimmung mit Security:

Bewertungsdimension Selbst gehosteter Proxy (z. B. Athens) Öffentliche Kette + direct
Compliance / Audit Audit, Retention, interne Policies Anbieter-AGB / Egress
Betriebsaufwand Betrieb, HA, Updates Nur Env-Variablen
Latenz / WAN Niedrige RTT zur Region Regionaler Mirror + direct
Private Module Interne Git-Spiegel möglich GOPRIVATE/GONOPROXY nötig
Stabilität bei Ausfall SPoF ohne Cluster Kette oft toleranter

Regel: Sensible Imports → verifizierter Cache in Runner-Nähe; reines direct über Kontinente skaliert schlecht bei großen Graphen.

Bei Athens achten Sie auf Speicherplatz für Zip-Objekte und auf dieselbe Go-Minor-Version wie die Builder: zu alte Proxy-Builds liefern gelegentlich andere Metadaten als aktuelle Clients erwarten. Öffentliche Ketten sparen diesen Betrieb, binden Sie aber an externe SLOs.

③ Ausführbare Parameter-Tabelle: GOPROXY, Privatpfade, SumDB, Cache

Siehe go.dev/ref/mod. GOPROXY: komma-separiert, Reihenfolge = Probiereihenfolge. CI: Variablen im Job-Wrapper setzen, nicht dauerhaft in globale Profile des Shared-Mac schreiben – sonst kollidieren parallele Teams.

GOPROXY versteht mehrere durch Komma getrennte Endpunkte; ein fehlgeschlagener Versuch springt automatisch weiter. Deshalb ist ein finaler direct-Eintrag fast immer sinnvoll, sofern Ihre Firewall Git-Fetches erlaubt.

Variable Zweck & typisches Muster Hinweis für Remote-Mac / CI
GOPROXY URLs oder direct/off direct als Fallback; off nur mit Freigabe
GOPRIVATE Private Pfad-Prefixe (Wildcards) Steuert Proxy/SumDB-Defaults
GONOPROXY Nie über GOPROXY Oft = GOPRIVATE
GOSUMDB SumDB-URL oder off Default oft sum.golang.org
GONOSUMDB Ohne öffentliche SumDB Mit GOPRIVATE alignen
GOMODCACHE Modul-Cache-Root Pro Job-ID / Pool + Quota
GOTMPDIR Temp für go Von Cache trennen, SSD
GOFLAGS z. B. -mod=readonly Kein stiller go.mod-Drift in CI

Shell (Platzhalter ersetzen):

export GOPROXY="https://mirror.region.example,https://proxy.golang.org,direct" export GOSUMDB="sum.golang.org" export GOPRIVATE="*.corp.example,github.com/myorg/*" export GONOPROXY="$GOPRIVATE" export GONOSUMDB="$GOPRIVATE" export GOMODCACHE="${HOME}/.cache/go-mod-${CI_JOB_ID:-local}" export GOTMPDIR="${HOME}/tmp/go-${CI_JOB_ID:-local}" export GOFLAGS="-mod=readonly" mkdir -p "$GOMODCACHE" "$GOTMPDIR" go env GOPROXY GOSUMDB GOPRIVATE GOMODCACHE go mod download

Sicherheit: Tokens via Credential-Helper / Secrets, nicht in Logs. HTTPS_PROXY/NO_PROXY bei Zentral-Firewall prüfen.

④ Fehler-Triage: typische Meldungen beim grenzüberschreitenden Modulzugang

Symptom / Logzeile Wahrscheinliche Ursache Geprüfte Gegenmaßnahme
410 Gone Cache/Proxy vs. Go-Version direct oder internen Cache updaten
checksum mismatch Proxy-Wechsel / Artefakt-Drift Feste GOPROXY-Kette; go clean -modcache nur geplant
unknown revision (privat) Auth / GOPRIVATE Credentials wie Runner-User testen
Download hängt Langsamer erster Proxy / WAN Näheren Mirror voranstellen

Vertiefende Diagnose:

go mod verify go mod download -x 2>&1 | tee /tmp/go-mod.log

Zuerst Env konsistent machen – sonst hilft schnellere CPU wenig.

⑤ Rollout: fünf Pflichtschritte plus Reproduzierbarkeits-Artefakte

CI: GOFLAGS=-mod=readonly, committiertes go.sum, feste Go-Version.

Artefakt Funktion Prüfpunkt im Job
go.mod Mindest-Versionen und replace-Ausnahmen Keine require-Diffs
go.sum Canonical Checksums für öffentliche Module go mod verify im Pipeline-Schritt
go.work (optional) Multi-Modul-Workspace lokal/CI Gleiches Layout auf allen Runnern

Operative Sequenz für Remote-Mac-Runner

  1. Go-Version wie Prod; arm64 dokumentieren.
  2. GOPRIVATE aus Importliste ableiten, versionieren.
  3. GOPROXY/GOSUMDB pro Pool einheitlich; go env prüfen.
  4. GOMODCACHE/GOTMPDIR pro Job; SSD-Quota beachten.
  5. Gate: go mod download dann go test ./....
  6. Logs: Modulpfad ok, nie Secrets in URLs.
# Minimaler CI-Check nach dem Setzen der Variablen go version go env GOPROXY GOPRIVATE GOSUMDB GOMODCACHE go mod download go test ./...

⑥ Kurz-FAQ: SumDB, Air-Gap und gemeinsame Runner

GOSUMDB=off?
Nur in isolierten Sandboxes mit anderer Integritätsprüfung; sonst internen SumDB nutzen.
Unterschiedliche Hashes zwischen Jobs?
Wechselnde GOPROXY oder replace – Konfiguration pro Label fixieren.
Skalierung?
Zentraler Proxy nahe Git; Region des MacPull-Knotens passend wählen – Kaufen, Hilfe.

Fazit

Fazit: GOPROXY-Kette, GOPRIVATE/GONOPROXY, GOSUMDB-Policy und isolierter GOMODCACHE sind das Fundament; die Tabellen vergleichen Athens/Self-Host vs. öffentliche Kette. Apple-Silicon-Remote-Mac: Preise, Kaufen, Hilfe; mehr Artikel im Technik-Blog.

Go-Module & Remote-Mac-CI

Nächste Schritte – ohne Login

Knoten wählen, der zu Ihrem Proxy- und Git-Pfad passt; Hilfe & Kauf jederzeit einsehbar.

Apple-Silicon-Remote-Macs
Modul-Downloads planbar
Support bei Netzfragen