対象読者:すでに GitHub Actions または GitLab を シンガポール、東京、ソウル、香港、米国東海岸、米国西海岸 の Apple Silicon ホストで回しており、承認が重いパイプラインや連携が多いキュー向けに Jenkins または Buildkite を足したいが、二つのスケジューラが同じ NVMe と署名コンテキストを同時に飽和させたくないチームです。成果:UTC のずらし窓、能力ラベル、DerivedData の名前空間を書面化した契約に加え、予測可能なリリース尖峰にだけ 日/週単位のバーストレンタルを出す判断基準です。構成:六つの落とし穴 → 意思決定表二枚 → 貼り付け用スニペット → 六ステップ Runbook → 三 KPI → 締めの指針。セルフホストランナーのラベルおよびタイムゾーン越えリレー CIと併読してください。
2026 年のリモート Mac はインタラクティブ作業、夜間 CI、署名許可リストが混在しがちです。GitHub Actions と GitLab はリポジトリイベントとキューの対応がすでに明瞭です。Jenkins コントローラや Buildkite キューを足すと、同じ実行面上に第二の制御ループが入ります。時間でずらさずパスも分離しないと重ね合わせが起き、コントローラ A はホストが空いていると見なしている一方で、コントローラ B が同一ユーザー下で四本の xcodebuild を走らせている、という状態になります。以下の六つは「セルフホストの信頼」を最も早く損なうパターンです。
mac や ios だけでは Xcode のマイナー、署名要件、UI セッション可否を表せず、Jenkins と Actions が同じ文脈へ盲配布します。max-parallel は、別コントローラが同じ macOS アカウントでジョブを起動するのを止めません。ランナーラベルとシークレット分離がまだ文書化されていない場合は、第二のコントローラに進む前に GitHub Actions と GitLab Runner のチェックリストへ戻ってください。本稿は 再現可能ビルドのスナップショット記事と組み合わせ、コントローラごとの DerivedData 接頭辞を同じベースラインに書き込みます。
アーキテクチャレビュー向けです。間隔は一般的な工学上のトレードオフであり、ベンダ SLA ではありません。
| 次元 | Jenkins(典型的なセルフホスト制御面) | Buildkite(ホスト型制御面+セルフホストエージェント) | Actions/GitLab との共存 |
|---|---|---|---|
| キューと承認 | パラメータ付きリリース向けプラグインが成熟 | パイプラインとマルチリポジトリのキュー視認性が明確 | 既定ラベル集合は共有しない。bk- や jk- など接頭付きタグを使う |
| 実行の結合 | コントローラとエージェントの版を揃えるのは利用側 | エージェント更新は SaaS リリースから独立して動かせる | 並行度を上げる前に、ずらし窓の内でエージェントを更新する |
| 運用負荷 | 高い(プラグイン、バックアップ、アップグレード) | 中程度(エージェント+ブートストラップのシークレット) | どの UTC 時刻以降に誰が macOS ジョブを流せるか文書化する — 口頭だけの方針は避ける |
注:Buildkite はキュー名とエージェントタグで親和性を表し、Jenkins はラベルとノード属性を使います。語彙は違っても目的は同じで、Xcode のメジャー/マイナー、署名要件、UI セッション方針をエンコードし、スケジューラに推測させないことです。
専用ベアメタル、健全な NVMe、常駐 LLM ゲートウェイのような重いサイドカーがない前提です。自前のコンパイルグラフで調整してください。数値は計画の目安でありベンチマークではありません。
| ハードウェア | 典型的な非 UI 並行ビルド | 複数 Simulator/UI テストあり | 六地域でのヒント |
|---|---|---|---|
| Mac mini M4 | 重いコンパイルはおおよそ 1〜2 本+軽作業が多い | 重いコンパイルから UI テストを時間分割し、キュー深さを安定させる | 主 Git リージョンに寄せ、狭いずらし窓の中でフェッチの尾を短くする |
| M4 Pro | モジュールグラフ次第で並行 2〜3 本が多い | Simulator ワーカーを増やせるが、コントローラごとにキャッシュルートを分ける必要がある | リージョンが分かれるときは、長い成果物アップロードと短い内輪ビルドをリースプールで分ける |
mac-01 のような即席ラベルを禁止する。~/DerivedData-gha と ~/DerivedData-bk、パイプラインで -derivedDataPath を明示する。m4-signing を UTC 10:00〜14:00 のみ」。リレー CIのビジネスタイムゾーン表と揃える。burst をキューに付けない。# Buildkite 例:キュー+エージェントタグ(名前空間は置き換え)
steps:
- label: "iOS build (ずらしプール)"
agents:
queue: "mac-m4"
os: "darwin"
xcode: "16.2"
controller: "buildkite"
commands:
- xcodebuild -scheme App -destination 'generic/platform=iOS' -derivedDataPath "$BUILDKITE_BUILD_PATH/DerivedData-bk"
# Jenkins:ノードラベル+パイプライン環境の DERIVED_DATA で対応
しきい値は経験的ガードレールであり Apple やクラウド SLA ではありません。SRE スタックと整合し、重複や沈黙アラートを避けてください。
制御論の言い方をすれば、第二コントローラは別のフィードバックループです。NVMe と署名コンテキストが共有のままなら、制御面が洗練されていても負荷下では結合します。キャッシュの論理/物理分離は、エージェントを増やすことより重要です。六地域では Git と成果物の配置も同設計し、CPU だけずらしてもリージョン横断のバルク転送は直りません。
二重コントローラは監査可能性の要求が上がります。ずらし窓、ラベル辞書、シークレット注入順序がレビュー可能である必要があります。専用テナンシーやリース上限なしの場当たり共有は、障害対応で Jenkins と Actions を同じインタラクティブユーザーに寄せ、コンプライアンスとトリアージコストを悪化させがちです。
個人ノートと非公式共有ホストでは、安定した出口、キーチェーン境界、書面のずらし方針を同時に満たしにくいです。APAC と北米でコンパイルプールと承認/署名プールを分ける組織では、複数リージョンの足跡と月次/四半期レンタルが予測可能なガバナンス付きベアメタル Mac クラウドのほうが、アドホック調整に勝ちやすいです。MACCOME は六地域で Apple Silicon ベアメタルと柔軟なストレージ階層を提供します。並行度を広げる前にラベルでエージェントプールを分離する用途に使えます。公開のレンタル料金を確認し、成果物の経路に合う地域ページを選んでください。
パイロットの型:主 Git と主コラボの近くでホスト二台を選び、一系統だけを KPI 付きで二週間走らせ、その後に第二コントローラの窓を開ける — コントローラ変更とキャパ変更を同一リリース夜に重ねないこと。
よくある質問
Jenkins と GitHub Actions は同一 macOS ユーザーを共有できますか?
可能ですが弱い到達状態です。アカウントと DerivedData を分けてください。ノードとリースのベースラインは多地域ノードガイドを参照してください。
ビジネスがずらし窓を破りました。どうしますか?
KPI インシデントとして記録し、ラベルとキャパをレビューします。無制限並行ではなく、承認チェーン用の専用 M4 Pro 月次プールに予算を回してください。サポート:ヘルプセンター。
エージェント更新と Xcode 更新は同じ夜に入れるべきですか?
避けるのが無難です。同一夜の変更はきれいな二分探索を妨げます。六ステップ Runbook の凍結順に従い、ランナーラベルのプレイブックと併読してください。