正典が GitLab にあり長期ワークフローが Jenkins に残る一方で、iOS と macOS のビルドだけは専用 Apple Silicon クラウドへ載せたいプラットフォームチームに不足しているのは別の CI ブランドではなく、executor の隔離、resource_group とラベルの意味論、成果物とレジストリの同リージョン配置、調達票に壁時計を書き込む手順です。本稿は KVMNODE 上の Mac mini M4 専用レンタルを前提に、まず五つの典型的な設計誤読を解体し、GitLab の shelldocker、SSH executor と Jenkins のインバウンド/SSH エージェントの責務境界を表で整理します。続いてタグと resource_group の YAML 例、裸機からグレースケール可能なプールまでの六段階、四半期報告に耐える三本の KPI を提示し、GitHub Actions 自ホスト Runner多地域 RTT と租期共有ノード統治 と相互参照できるようにしました。
01

2026 年、GitLab Runner と Jenkins macOS エージェントで「動く」を「拡張できる」と混同しないための五つの誤読

macOS 上の GitLab Runner は依然として shell executor が最短立ち上げですが、ログインキーチェーン、Screen Sharing でのパス変更、無人バッチを同一ユーザー文脈に束ねるため、長期運用では可変状態が蓄積します。Jenkins 側でコントローラへインバウンド接続を張る構成では、コントローラが米東にあり Git リモートとコンテナレジストリがシンガポールにあるような組み合わせが成立し、CPU 利用率は低いのに壁時計だけが伸びる現象が起きやすいです。専用クラウド Mac の価値は、executor を長期資産として命名凍結し監査可能な出口を固定できる点にあり、ラベルを増やすだけの暫定対処とは目的が異なります。

シンガポール、東京、ソウル、香港、米東、米西に開発者が散らばる場合、Git LFS とプライベートレジストリの大陸を無視して executor を近接だけで選ぶと、依存解決と成果物転送が支配的になります。まず 多地域 RTT でデータ面を契約に書き、Actions Runner のキュー語彙を借りて「どのレーンを GitHub に残し、どれを GitLab か Jenkins に移すか」を決めます。

日中の対話的 xcodebuild と夜間の署名ジョブが同一 login キーチェーンを共有すると、表向きは偶発的な署名失敗に見えます。共有ノード統治 で定義した SSH 席と CI キュー名を runner ラベルに写し、トリアージで二つの真実が衝突しないようにします。

GitLab SaaS の分数、オンプレ Jenkins の減価償却、専用ベアメタルの月額をコア数だけで比較すると、署名ローテーションとイメージドリフトの人件費が落ちます。また Xcode Cloud ハイブリッド と同一予算行に混ぜるとピーク時の並列度を二重計上する危険があります。以下の五項目をすべて潰してから次節の表に進む運用を推奨します。

01

shell executor を恒久前提にする:検証には最適ですが、本番では docker か SSH 隔離へ分岐し、グローバル npm 接頭辞を共有可変状態にしないことが重要です。

02

同一ホストに GitLab Runner と Jenkins を登録しラベルを分けない:launchd スロットと Xcode 選択が競合しログが上書きされます。

03

resource_group と throttle を無視する:深夜でもマトリクスがディスクを埋め、財務には「もう一台」だけが見えます。

04

コントローラと executor の TLS をゼロコストと見なす:大陸を跨ぐインバウンドはリリース週に尾が伸びます。ミラーを同大陸へ置きます。

05

Xcode と CLT の凍結ペアを文書化しない:無人ホストのパッチ差分は Codesign 挙動に直結します。

誤読を排除したうえでの採用判断は、秘密情報の封筒、イメージ凍結、キュー所有者、リージョン親和の四行に圧縮でき、ストレージとメモリ階層 の叙述と整合させると調達レビューが通りやすくなります。

近距離の日割り検証から米東の長期プールへ移る場合は、キュー P95、resolver 比率、ドリフト件数を両方の窓で残し、ネットワークが速かっただけの成功をアーキテクチャ改善と誤認しないようにします。外注 QA が同一アカウントへ入るならラベル分割かサービスアカウント分離を即時要件にします。

02

対照表:GitLab executor、Jenkins 接続方式、GitHub Actions を参照レーンとして

オーケストレータを増やしても executor を長命ラベル付き資産として扱えば、法務と財務は Apple ホストパスと同じ語彙で比較できます。Xcode Cloud ハイブリッド と同様に短いスパイクはホストへ、署名や大容量成果物の尾は専用機へ、という結論は変わりません。GitLab と Jenkins の差はパイプライン宣言の近さかプラグイン重力かであり、macOS キーチェーンの物理制約は共通です。

形態向いている場面追加で検証すべき項目
GitLab shell単一チームで iOS ビルドを最速立ち上げCI ユーザーと対話ログインのキーチェーン分離、brew と npm の凍結
GitLab docker依存をイメージ層へ閉じたいApple ライセンスと macOS 上の docker 制約、ボリュームと codesign 境界
GitLab SSHスケジューラと実行ホストを分離StrictHostKey、踏み台、レジストリ同リージョン
Jenkins inboundコントローラが固定 DC、executor がクラウドTLS RTT、再接続嵐、ミラー大陸の整合
Jenkins SSHコントローラ主導の接続がポリシーに合うホストキー輪換、sudo 境界、launchd 上限
次元GitLab CIJenkinsGitHub Actions 参照
並行性resource_group とマトリクスthrottle とラベル式concurrency と runs-on
秘密CI 変数と保護ブランチCredential とフォルダ権限OIDC と environment
深掘りMR パイプラインとレジストリプラグイン尾と承認ノード専用記事

隔離レベルと秘密の封筒を先に決め、オーケストレータはその後です。最後にコア数を語ればスローガン化しません。

第二ノードの動機が CPU ではなく成果物 RTT なら、先に 二ノード判断 を読み、TLS 尾だけを大きくしたい場合は M4 Pro よりミラー整備を優先します。

03

タグ、resource_group、Jenkins ラベルに地理と負荷種別を埋め込む

launchd で長時間生存する runner でも、曖昧なラベルは MR スモークと notarize を同一プールに衝突させます。大陸と都市コードと負荷層をタグに埋め、GitLab の resource_group か Jenkins throttle で相互排他を表現します。固定 IP と出口方針は ヘルプセンター の接続系ドキュメントと併読してください。

例のリージョン文字列は貴社の調達票の KVMNODE 行と一致させ、障害時にデータ面と executor を一対一で辿れるようにします。

YAML
stages: [build, sign]

default:
  tags: ["macos", "region-apac-1", "workload-mr"]

build_ios:
  stage: build
  resource_group: ios-binaries-${CI_PROJECT_ID}
  script:
    - xcodebuild -scheme "$SCHEME" -destination 'platform=iOS Simulator,name=iPhone 16' build

sign_pkg:
  stage: sign
  tags: ["macos", "region-usw-1", "workload-release"]
  resource_group: notary-${CI_PROJECT_ID}
  script:
    - xcodebuild -exportArchive ...

ヒント:resource_group はスケジューラ語彙で排他を表します。Jenkins の throttle とはフィールド名が異なり、口頭で混同しないでください。

GitLab と Jenkins を同一ホストへ載せる場合は launchd の Label 接頭辞とログディレクトリを分け、変更チケットにどちらのスタックを触ったか必須項目にします。

04

六段階:裸機クラウド Mac からグレースケール可能な executor プールへ

01

Xcode と CLT の対を凍結:xcodebuild -versionxcode-select -p を Runbook に貼り、金曜メンテ窓だけで patch を上げます。

02

CI 専用ユーザーとキーチェーン分割:対話インポートと無人 login を分けます。

03

gitlab-runner register か Jenkins plist:launchd で常駐し、対話シェル依存を禁止します。

04

読み取り専用スモークから:デプロイ秘密を付けず checkout と SPM とキャッシュ基線だけを見ます。

05

署名と notary を重ねる:アプリ固有パスワードはチケットで輪換し、平文複製を禁止します。

06

並列を灰度しロールバック:resource_group 単位で P95 を観測し、失敗時はイメージ tag を戻します。

六段階後はリージョン、SKU 意図、凍結 Xcode バッチ、キュー所有者、ロールバック責任者を KVMNODE の日次/月次行と同じ列で説明でき、検証から本番への移行で叙述を書き直す必要が薄れます。

05

経営報告に耐える三本の KPI と M4 対 M4 Pro の分岐

A

キュー P95:resource_group 内で enqueue から最初の script 行までの壁時計を二週連続で SLA 下に抑えます。

B

resolver 比率:xcodebuild -resolvePackageDependencies が全体の三割を超えたらミラーと RTT を先に直します。

C

ドリフト件数:マージ無関係の赤ビルドをイメージ差分で週次カウントしゼロへ収束させます。

注意:SaaS 分数と専用ベアメタルを署名人件費なしで比較すると TCO を過小評価します。GitLab・Jenkins・GitHub を一行予算に混ぜると並列度を二重計上します。

Mac mini M4 16GB/256GB は MR スモーク中心の shell プールに適し、並列マトリクスや複数 Xcode、大きな DerivedData と notary 成果物を同居させるなら 24GB/512GB か Mac mini M4 Pro 64GB/2TB、あるいは 二ノード 分岐を検討します。調達票にはピーク同時ジョブ数とピーク成果物体積を CPU 名と併記してください。

家庭用回線の executor はスリープと NAT と監査不能な出口に悩まされ、ネスト仮想化は Metal と署名境界を曖昧にします。シンガポール、東京、ソウル、香港、米東、米西で契約可能な専用 Apple Silicon と日次から月次までの弾性レンタルを組み合わせれば、検証コストを資本支出へ滑らせずに済みます。キュー指標と地理を財務と同じ語彙で固定したいチームにとって、KVMNODE の Mac mini クラウドレンタルはより現実的な運用解になりやすいです。料金は 価格ページ、接続は ヘルプセンター を参照してください。

コントローラをオンプレに残し executor だけクラウドへ移す場合は初週のインバウンド TLS の尾を必ず観測し、尾がキュー P95 と連動するなら M4 Pro よりミラーを先に直します。データ面が揃う前に統一メモリだけ上げても壁時計は伸びたままです。