遠端 Mac跑 C++ CI 時,瓶頸常在Conan 遠端索引與制品下載,而非編譯指令本身。本文收斂 Conan 2remote 切換、core.download:parallelcompiler 快取conan.lock 驗收;內鏈 首頁技術部落格列表快取策略與 CI 加速;套餐見 定價購買(免登入可瀏覽)。

場景前提

適用:Xcode/Clang 專案以 Conan 2 管理相依,CI 跑在租用小時計費的遠端 Mac,且可能跨境連 Conan Center 或企業 Artifactory。成功前提有三: 全團隊同一組 remote 順序與 URL,避免解析漂移; 下載並行度與逾時能扛 RTT; conan.lock 納版控並在 pipeline 強制 --lockfile。若無 lock,跨境瞬斷與索引延遲會直接變成「偶發紅燈」。

  • 遠端順序:conan remote list 的 index 變動會改變解析,須寫入 Runbook。
  • 共享節點:多 job 共用同一使用者時,CONAN_HOME 必須隔離到工作區。
  • 制品一致:企業庫與官方庫並存時,lock 必在「目標庫」上產生。

鏡像端點對照表

以下為常見端點類型(實際 URL 以貴司 IT 與制品庫文件為準);切換後請重新跑 conan install 乾跑比對解析。

類型端點範例適用注意
Conan Centerhttps://center.conan.io開源依賴為主跨境時留意頻寬;可配合代理
JFrog Artifactoryhttps://artifactory.example.com/artifactory/api/conan/conan-local內網制品與權杖與 IT 對齊 remote add 路徑;測 TLS
區域/自建鏡像內部同步服務降低 RTT、封閉網需確認與上游recipe revision同步 SLA
conan remote list -v
# 新增企業庫(範例 URL 請替換)
conan remote add company-conan https://artifactory.example.com/artifactory/api/conan/conan-local
conan remote update company-conan --url https://artifactory.example.com/artifactory/api/conan/conan-local
conan remote disable conancenter   # 若策略改走唯一內網源

並發與逾時閾值

Conan 2 以下載執行緒為主;共享遠端 Mac 建議由小到大調 core.download:parallel,並限制同一主機並行 job 數,否則易觸發 429。逾時除 CLI 外,可在執行環境加網路層逾時(如 CI 工具或 HTTP 代理)。推薦先固定 parallel,再觀察失敗是否集中為逾時或限速。

conan config set core.download:parallel=8
conan config show core.download:parallel
# 需要時檢視其他 download 相關鍵(以 conan config list 為準)
conan config list | grep -i download

遠端 Mac CI 快取目錄與磁碟水位

CONAN_HOME 指到工作區(例如 $CI_PROJECT_DIR/.conan2),避免多專案互踩。Compiler 快取建議獨立 CCACHE_DIR;大件编译仍會膨脹磁碟,請在 job 開頭/結尾監控使用率,建議警戒約 85% 即清可重建快取或換卷。

export CONAN_HOME="${CI_WORKSPACE:?}/.conan2"
export CCACHE_DIR="${CI_WORKSPACE}/.ccache"
export CC="ccache clang"
export CXX="ccache clang++"
ccache -s
df -h .
# 範例:若工作卷用量超過 85% 則短路失敗(依實際掛載點調整欄位)
u=$(df -h . | awk 'NR==2 {gsub(/%/,""); print $5}'); [ "$u" -lt 85 ] || exit 1

失敗重試與一致性檢查

429/5xx:包一層 shell,配合指數退避與上限次數;若有 Retry-After 應優先遵守。對 lock:在與 CI 相同 profile 與 remote下產 lock,主線安裝一律帶 --lockfile

lockfile 一致性決策矩陣(摘要)
情境建議驗收指令/產物
僅官方 Center全隊同一 remote index;必要時 disable 多餘源conan lock create . --lockfile-out=conan.lock
企業庫為主先 add/update 企業 URL,再產 lockCI:conan install . --lockfile=conan.lock --build=missing
懷疑解析漂移比對圖資訊conan graph info . --lockfile=conan.lock
1

隔離 CONAN_HOME並寫入 CI 紀錄。

2

校准 remoteremote list -v 截圖或匯出到構件。

3

設 parallel 與並行 job 上限,避免 429。

4

產 lock:開發者機或乾淨 runner 執行 lock create。

5

鎖定安裝install --lockfile,失敗則比對 graph。

conan lock create . --lockfile-out=conan.lock
conan install . --lockfile=conan.lock --build=missing
conan graph info . --lockfile=conan.lock
# 429 退避範例(併入你的步驟包裝)
# for i in 1 2 3 4 5; do conan install . --lockfile=conan.lock && break || sleep $((4*i)); done

延伸:構建池併發與磁碟 FAQ

可引用清單(審計/Runbook)

直接寫入文件
  • 參數:core.download:parallelCONAN_HOMECCACHE_DIR
  • 遠端:conan remote listaddupdatedisable 的操作截圖或日誌。
  • Lock:conan.lockconan graph info --lockfile 摘要納入 MR 檢核。

FAQ

為何本機過、CI 卻解析不同套件版本?常見是 remote 順序或 URL 與開發機不一致;先對齊 conan remote list -v 再重產 lock。

parallel 已拉高仍慢?瓶頸可能在單一大制品或磁碟 IO;請降 parallel 減少競爭並檢查是否應预热快取。

可以關閉 TLS 驗證換速度嗎?不建議在正式 CI 關閉;應匯入企業根憑證或修正代理鏈,避免長期停用校驗。

下一步與站內導流

收斂 remoteparallel/逾時快取目錄與 lock 四條線,Conan 2 在遠端 Mac 上才穩定可稽核。可再讀 Nix substituter 決策矩陣對照「鎖與鏡像」思路。說明中心定價購買均可免登入瀏覽。

總結:以對照表選端點,用 core.download:parallelCONAN_HOMEccache 控住 IO 與磁碟,再以 conan.lock 與 graph 驗收口徑一致。

遠端 Mac × Conan 2 × C++ CI

固定節點,縮短跨境依賴等待

選 Apple Silicon 遠端 Mac 跑編譯與快取;免登入即可查看定價、套餐與說明中心。