Conan 2 の越境 CI はremote 順conan.lockが土台です。ミラー対比・parallelCONAN_HOME・compiler 側キャッシュ・lock 検証を一枚にします。ホーム技術ブログ一覧vcpkg 決定表

シナリオ前提(リモート Mac と Conan 2 を同じ前提で縛る)

profileremote 順を固定し、社内と Center の併用時はlock 先行

崩れやすい点
  • profile ずれ
  • remote 差替lock 再生成
  • CONAN_HOMEジョブ配下へ。

ミラー端点の対比表(どの remote を上に置くか)

端点の選び方

向く場面切替時
Centercenter.conan.ioOSS 中心429→parallel 抑制
自前Artifactory社内ビルドURL 変→lock 再生成
CDN地域プロキシ分散 runner手順を固定

コアconan remote list のあと conan remote add … -i 0 で自前を先頭、要認証は conan remote login

並列取得とタイムアウト閾値(global.conf ベースの調整)

core.download:parallel4〜8から。429 なら下げ、シェル退避と二重化しすぎないように。

パラメータ目安
  • parallel 初期 8 前後。
  • retryretry_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_DIRccache 付き CCCXX は同一シェル。ディスク 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. ジョブ末 dfdu をログ化、閾値で掃除。

まとめと次の一手

remote・parallel・ホーム・lockを Runbook に束ねると越境でもレビューしやすいです。

料金購入ヘルプログイン不要ホームブログ一覧Helm 決定表

Conan 2 × リモート Mac CI

依存取得と lockfile を同一ノードで再現する

料金・購入・ヘルプはログイン不要。帯域とキャッシュ実測に合わせてプランを選べます。