Conan 2 の越境 CI はremote 順とconan.lockが土台です。ミラー対比・parallel・CONAN_HOME・compiler 側キャッシュ・lock 検証を一枚にします。ホーム・技術ブログ一覧・vcpkg 決定表。
シナリオ前提(リモート Mac と Conan 2 を同じ前提で縛る)
profile と remote 順を固定し、社内と Center の併用時はlock 先行。
崩れやすい点
- profile ずれ。
- remote 差替は lock 再生成。
CONAN_HOMEをジョブ配下へ。
ミラー端点の対比表(どの remote を上に置くか)
端点の選び方。
| 型 | 例 | 向く場面 | 切替時 |
|---|---|---|---|
| Center | center.conan.io | OSS 中心 | 429→parallel 抑制 |
| 自前 | Artifactory | 社内ビルド | URL 変→lock 再生成 |
| CDN | 地域プロキシ | 分散 runner | 手順を固定 |
コア:conan remote list のあと conan remote add … -i 0 で自前を先頭、要認証は conan remote login。
並列取得とタイムアウト閾値(global.conf ベースの調整)
core.download:parallel は4〜8から。429 なら下げ、シェル退避と二重化しすぎないように。
パラメータ目安
parallel初期 8 前後。retry/retry_wait。- timeout 別枠見積。
# 取得並列と簡易リトライ(例:ジョブ直後に一度だけ)
export CONAN_HOME="${CI_PROJECT_DIR:-$PWD}/.conan2"
mkdir -p "$CONAN_HOME"
conan config install .conan/ci_global.conf # ある場合:チーム共通 global.conf を流し込む
conan config set core.download:parallel=8
conan config set core.download:retry=2
conan config set core.download:retry_wait=0.5
リモート Mac CI のキャッシュディレクトリとディスク水位
CONAN_HOME/p 肥大化に注意。CCACHE_DIR と ccache 付き CC/CXX は同一シェル。ディスク FAQ の水位へ。
# 例:ホーム隔離とキャッシュ確認
export CONAN_HOME="${CI_PROJECT_DIR:-$PWD}/.conan2"
mkdir -p "$CONAN_HOME"
export CCACHE_DIR="${CI_PROJECT_DIR:-$PWD}/.ccache"
mkdir -p "$CCACHE_DIR"
# conan install 後にサイズと利用率を採取
du -sh "$CONAN_HOME/p" "$CCACHE_DIR" 2>/dev/null || true
df -h "$CONAN_HOME"
共有キャッシュで database is locked なら分離か直列化。
失敗リトライと lockfile 整合性チェック(貼れるコマンド)
HTTP は 4→12→30→90 秒。lock は生成と消費で同一ファイルを。
remote 操作(例)
export CONAN_HOME="${CI_PROJECT_DIR:-$PWD}/.conan2"
conan remote list
# 社内ミラーを先頭へ(仮 URL・名前は環境に合わせる)
conan remote add company https://art.example.com/artifactory/api/conan/conan-local -i 0
# 既存 remote の URL 差し替え例
# conan remote update conancenter --url https://center.conan.io
lock 生成・適用・検証
# ルートに conanfile.py / recipe がある前提
conan lock create . --lockfile-out=conan.lock
conan install . --lockfile=conan.lock --build=missing -of=build
# 整合の目視用(グラフが通るか)
conan graph info . --lockfile=conan.lock
シェル側リトライ骨子
for i in 1 2 3 4; do
conan install . --lockfile=conan.lock --build=missing -of=build && break
case "$i" in 1) sleep 4;; 2) sleep 12;; 3) sleep 30;; *) sleep 90;; esac
done
FAQ
Q. lock が効かない
A. --lockfile 付与漏れ、profile/CONAN_HOME 不一致。graph info で先に確認。
Q. parallel で逆に不安定
A. 帯域・同時接続の上限。下げてジッタ付き sleep。
Q. ディスク圧迫
A. ジョブ末 df/du をログ化、閾値で掃除。
まとめと次の一手
remote・parallel・ホーム・lockを Runbook に束ねると越境でもレビューしやすいです。