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
GOPRIVATElaufen interne Pfade über fremde Proxies; SumDB kollidiert. - Cache: Geteilter
GOMODCACHE+ wechselndeGOPROXY→ 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):
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:
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
- Go-Version wie Prod;
arm64dokumentieren. - GOPRIVATE aus Importliste ableiten, versionieren.
- GOPROXY/GOSUMDB pro Pool einheitlich;
go envprüfen. - GOMODCACHE/GOTMPDIR pro Job; SSD-Quota beachten.
- Gate:
go mod downloaddanngo test ./.... - Logs: Modulpfad ok, nie Secrets in URLs.
⑥ 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
GOPROXYoderreplace– 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.
Nächste Schritte – ohne Login
Knoten wählen, der zu Ihrem Proxy- und Git-Pfad passt; Hilfe & Kauf jederzeit einsehbar.