- Remote-Drift: Dev nutzt öffentliche Indices, CI nur Firmen-Remote — Index-Parität fehlt, Tickets ohne echten Buildfehler.
- Überparallelität: Zu hohes
core.download:parallelauf geteilter NVMe erhöht TLS- und Random-Write-Last; p95 steigt. - Lock ohne Profil:
conan.lockohne stabile Profile/compiler.cppstdliefert widersprüchliche Binärergebnisse.
Szenariovoraussetzungen
Conan-2-Minor und Clang/Xcode-Hauptversion im Image pinnen und mit dem Release-Ref-Host abgleichen. Profile (arch, compiler.*, os.sdk) versionieren Sie neben conanfile.py. CONAN_HOME pro Mandant/Pipeline auf APFS — kein fremdes ~/.conan2 ohne Vertrag.
Alle HTTPS-Ziele für Binär- und Quellzugriffe inventarisieren. conan.lock-Refresh nur per Bot oder mit Review, damit keine Freitags-Graphen die Artefaktidentität zwischen Standorten spalten.
Spiegel-Endpunkte: Vergleichstabelle
Pro Umgebung nur eine klare Remote-Strategie für öffentliche Upstreams: sonst kollidieren virtuelle und Roh-Remotes. Entwickler-Notebooks mit dual-stack DNS und IPv4-only Runnern erfordern explizite Host-Proben, sonst wirken sporadische 403-Zyklen wie Rezeptfehler.
| Endpunkt-Typ | Einsatz | Stabilitäts-Hinweis |
|---|---|---|
center2.conan.io / ConanCenter-Remote |
OSS-Quickstarts ohne zusätzliche Compliance | Regionale Latenz; kombinieren Sie mit moderater Parallelität oder Pull-Through-Cache bei interkontinentalen Build-Pools. |
| Virtuelles Repository (Artifactory, Nexus, …) | Kombination aus öffentlichen und privaten Paketen unter einer Basis-URL | Nur ein aktiver Conan-Remote pro Pipeline, damit keine doppelte Indexsicht entsteht. |
| Interner Read-Through-Spiegel | Standorte mit volatilerm Transit Richtung Public Cloud | Nach Blob-Aktualisierung Checksummen prüfen; Wartungsfenster kommunizieren, damit keine Rezept-Fixes fälschlich als Client-Bug laufen. |
Remote prüfen und umschalten (Beispiele):
conan remote list
conan remote add firmenspiegel https://artifacts.example.com/artifactory/api/conan/conan-virtual \
--index 0
# Option A: bestehenden Remote auf Proxy zeigen
conan remote update conancenter --url https://artifacts.example.com/artifactory/api/conan/conancenter-remote
# Option B: Community-Verkehr temporär aus
# conan remote disable conancenter
conan remote login firmenspiegel "${CONAN_USER}" -p "${CONAN_PASSWORD}"
Parallelität & Timeout-Schwellen
Transport steuern Sie über ${CONAN_HOME}/global.conf oder Einzelaufrufe mit -cc. Messen Sie p95-Download statt Max-Threads; kalibrieren Sie anhand belegter Kerne und gleichzeitiger Pipelines auf dem Host.
core.download:parallel— gleichzeitige Artefakt-Downloads; typisch 4–8 auf geteilten Pools, bis 12–16 nur wenn NVMe und Uplink dauerhaft unter Last gesund bleiben.core.download:retry— Wiederholungen bei Serverfehlern, oft 3–5.core.download:retry_wait— Sekunden bis zur nächsten Runde, z. B. 3–8; kombinieren Sie mit Job-Jitter (z. B. 4, 12, 30, 90 s) bei längeren Störungen.
mkdir -p "${CONAN_HOME}"
cat >> "${CONAN_HOME}/global.conf" <<'EOF'
core.download:parallel=8
core.download:retry=4
core.download:retry_wait=5
EOF
conan install . --lockfile=conan.lock \
-cc core.download:parallel=6 \
-cc core.download:retry=5
conan config show "core.download:*"
Remote-Mac-CI: Cache-Pfade & Platten-Wasserstände
Pakete unter ${CONAN_HOME}/p; CONAN_HOME ggf. pro Job verwerfen. ccache mit eigenem CCACHE_DIR und Wrapper für CC/CXX.
export CONAN_HOME="${CI_PROJECT_DIR:-$PWD}/.conan2-ci"
export CCACHE_DIR="${CI_PROJECT_DIR:-$PWD}/.ccache-conan"
mkdir -p "$CONAN_HOME" "$CCACHE_DIR"
export CC="ccache clang"
export CXX="ccache clang++"
du -sh "$CONAN_HOME" "$CCACHE_DIR" 2>/dev/null || true
ccache --show-stats
USED_PCT="$(df -h "$CONAN_HOME" | awk 'NR==2 { gsub(/%/,"",$5); print $5 }')"
if [ "${USED_PCT:-101}" -gt 88 ]; then
echo "Platten-Warnstufe: ${USED_PCT}% belegt auf $(df -h "$CONAN_HOME" | awk 'NR==2 {print $1}')"
exit 42
fi
Policy: Prefetch bei <12 % frei auslassen; conan cache clean zielgerichtet; Host-Pruning bei Mehrmandanten-SSD abstimmen.
Fehler, Retries & Konsistenzprüfungen
conan install mit begrenztem Retry bei 5xx/TLS — bei Dauerfehler stoppen. Checksum-Probleme beim Spiegel eskalieren, nicht nur Cache löschen.
Entscheidungsmatrix: Lockfile-Disziplin
| Politik | Ideal für | Kompromiss |
|---|---|---|
conan install mit --lockfile=conan.lock und --build=missing |
Release-Zweige, Promotion-Pipelines | Lock muss bei Profil- oder Optionswechsel neu erzeugt werden — Fehler sind explizit. |
Lockfile-Pflicht nur auf main |
Hochfrequente Feature-Branches | Kurzlebige Zweige können temporär driften — Merge-Queue-Bot mit Lock-Refresh mindert Risiko. |
Smoke-Test conan graph info … --format=json |
Früherkennung von Remote-Umbenennungen | Fügt Sekunden pro Lauf hinzu; bewahren Sie JSON für gezielte Assertions in CI. |
Lockfile erzeugen, installieren und gegenprüfen:
set -euo pipefail conan lock create . --build=missing conan install . --lockfile=conan.lock --build=missing \ --output-folder=build shasum -a 256 conan.lock git diff --exit-code -- conan.lock conan graph info . --lockfile=conan.lock --format=json > graph-ci.json
Siehe auch Rust Cargo: Spiegel & Lockfile.
FAQ
Remotes je Job? Nur mit Dokumentation — Laptop-vs.-CI-Drift erzeugt „Binary fehlt“.
Download-Parallelität = Build -j? Nein; separat messen.
IDE-Graph ≠ CI? Gleiches CONAN_HOME/Profil; IDE lädt oft keinen Lock.
Apple-Silicon-Node für vorab getestete Conan-Pulls
Mieten Sie einen Remote-Mac in der Zielregion, in der Ihre Spiegel und Tester liegen — damit werden Latenz und Cache-Treffer realistisch messbar. Alle verlinkten Seiten sind ohne Anmeldung lesbar.