remote 切換、core.download:parallel、compiler 快取與 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 Center | https://center.conan.io | 開源依賴為主 | 跨境時留意頻寬;可配合代理 |
| JFrog Artifactory | https://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。
| 情境 | 建議 | 驗收指令/產物 |
|---|---|---|
| 僅官方 Center | 全隊同一 remote index;必要時 disable 多餘源 | conan lock create . --lockfile-out=conan.lock |
| 企業庫為主 | 先 add/update 企業 URL,再產 lock | CI:conan install . --lockfile=conan.lock --build=missing |
| 懷疑解析漂移 | 比對圖資訊 | conan graph info . --lockfile=conan.lock |
隔離 CONAN_HOME並寫入 CI 紀錄。
校准 remote:remote list -v 截圖或匯出到構件。
設 parallel 與並行 job 上限,避免 429。
產 lock:開發者機或乾淨 runner 執行 lock create。
鎖定安裝: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:parallel、CONAN_HOME、CCACHE_DIR。 - 遠端:
conan remote list/add/update/disable的操作截圖或日誌。 - Lock:
conan.lock與conan graph info --lockfile摘要納入 MR 檢核。
FAQ
為何本機過、CI 卻解析不同套件版本?常見是 remote 順序或 URL 與開發機不一致;先對齊 conan remote list -v 再重產 lock。
parallel 已拉高仍慢?瓶頸可能在單一大制品或磁碟 IO;請降 parallel 減少競爭並檢查是否應预热快取。
可以關閉 TLS 驗證換速度嗎?不建議在正式 CI 關閉;應匯入企業根憑證或修正代理鏈,避免長期停用校驗。
下一步與站內導流
收斂 remote、parallel/逾時、快取目錄與 lock 四條線,Conan 2 在遠端 Mac 上才穩定可稽核。可再讀 Nix substituter 決策矩陣對照「鎖與鏡像」思路。說明中心、定價、購買均可免登入瀏覽。
總結:以對照表選端點,用 core.download:parallel 與 CONAN_HOME/ccache 控住 IO 與磁碟,再以 conan.lock 與 graph 驗收口徑一致。