症状 → Mac Agentがオンラインなのに、Xcodeのビルドや署名で失敗する。 最短の対処 → コントローラーはジョブを振り分け、Mac AgentでApple関連タスクを実行します。署名タスクは信頼できるジョブに限定し、実際の流水線を通してから本番利用を決めてください。
Jenkinsを管理するIT担当者には、コントローラーと実行ノードの境界を整理するためのガイドです。
iOS・macOS流水線を設計するエンジニアには、構築・テスト・リリースの割り当て方を示します。
公開作業を統括する技術責任者には、署名情報へのアクセスと受け入れ判定の観点をまとめます。
Jenkins Macビルドマシンの構築はコントローラーとAgentを分ける
Jenkinsのコントローラーはジョブの管理と実行先の選択を担当し、Mac AgentはXcodeなどを使うAppleプラットフォームのタスクを実行します。ビルド処理までコントローラーに担わせると、管理処理とジョブ実行が同じリソースを使います。JenkinsのAgentに関する公式ガイドも、コントローラーとAgentの役割や、コントローラー上でのビルド実行を避ける考え方を説明しています。
Agentのラベルは、そのノードで実行するタスクの種類を表すために使います。たとえば、macos-xcodeをXcodeビルド用に定義し、Pipelineからラベルを指定します。JenkinsのPipeline構文に関する公式資料では、Agentをラベルで選択する書き方を確認できます。
ただし、Agentの画面にオンラインと表示されることは、接続を確認できたという意味です。Xcodeの選択、依存関係の取得、テスト、署名を含む作業が成功するかどうかは、実際のジョブで別途確認してください。
| タスクの場面 | Jenkinsでの実行先の考え方 | 受け入れ時に確認すること |
|---|---|---|
| ソースの静的確認など | 通用の実行環境で可能かを先に判定 | Mac固有のツールや依存関係が混入していないか |
| Xcodeによるビルド | 対応するツールチェーンを備えたMac Agent | 作業ディレクトリ、Xcode選択、成果物 |
| シミュレーターテスト | 対象の開発環境を備えたMac Agent | シミュレーター起動だけでなくテスト完了まで |
| 署名・公開 | 権限を制限した信頼できる実行先 | 認証情報、ジョブ権限、公開結果 |
通常のコミットではMacが必要な処理だけを振り分ける
すべての工程をMac Agentに送る必要はありません。Appleの開発ツールを使わない検査と、XcodeやmacOS環境が必要なビルドを切り分ければ、Macノードの用途を明確にできます。どこまで分離できるかは、リポジトリの依存関係と各ジョブの実装で判断します。
JenkinsでiOSのビルドをMac Agentに割り当てるには、何を設定しますか。
Mac Agentに役割を示すラベルを付け、PipelineのAgent指定で同じラベルを選びます。次のように、実環境に合わせてラベル名を決めてください。
pipeline {
agent { label 'macos-xcode' }
stages {
stage('Build') {
steps {
sh 'xcodebuild -scheme App -configuration Debug build'
}
}
}
}
これはラベルによる振り分け方を示す例です。Appや構成名はあなたのプロジェクトに置き換え、実際のスキーム、作業ディレクトリ、ビルド方式に合わせてください。JenkinsのラベルによるAgent選択の仕様も参照し、想定したMac Agent以外にジョブが流れないことを確認します。
受け入れでは、Jenkinsから起動したジョブの実行アカウントで、リポジトリの取得、依存関係の復元、ビルド、成果物の保存まで通します。管理者が対話型ターミナルで成功させただけでは、Jenkinsサービスの環境変数、権限、作業場所まで同じとは限りません。
シミュレーターテストは起動とテスト完了を分けて判定する
xcodebuildなどのコマンドラインツールはXcodeに含まれます。AppleのXcodeコマンドラインツールのインストール資料を確認し、利用するXcodeがAgentに導入されていることを確かめてください。Xcodeのコマンドやオプションは、Appleのコマンドラインツールリファレンスを参照します。
Mac Agentがオンラインなのにxcodebuildで失敗する場合、どこを調べますか。
Jenkinsジョブと同じ実行アカウントで、選択中の開発者ディレクトリ、Xcodeの利用可否、プロジェクトのスキーム、依存関係の解決結果を確認します。たとえば、ジョブログにxcode-select -pの結果を記録し、xcodebuild -versionで利用しているXcodeを確認します。コマンドの結果が管理者の端末と異なる場合は、Agentサービスの環境や起動方法を調べます。
シミュレーターの起動が成功しても、テストケースが完了したとは限りません。プロジェクトが実際に使うxcodebuild testと対象の指定を流水線で実行し、テスト結果がJenkins上で失敗として検出され、ログや成果物を追跡できることまで確認します。
署名・公開タスクは信頼境界をジョブ単位で決める
開発用ビルドと本番の署名・公開では、必要な権限が異なります。公開用ジョブだけが署名情報にアクセスできるよう、Jenkinsのジョブ権限、認証情報の利用範囲、実行先のラベルを合わせて設計してください。テスト目的のジョブや信頼性を確認できない変更が、本番用認証情報を利用できる構成は避けます。
シミュレーターのテストと署名・公開には、別々のMacノードが必要ですか。
必ず別ノードにするという一律の要件はありません。公開用認証情報を使うジョブの範囲を狭められ、権限や実行環境を明確に管理できるなら、同じノードを使える場合もあります。一方、共有ノード上で一般のビルドジョブが公開用情報に触れうるなら、公開タスク用の実行先やジョブの分離を検討してください。判断基準はノードのラベルだけではなく、ジョブを実行できる利用者と認証情報の権限です。
Jenkinsの認証情報に関するセキュリティ資料は、ログ上のマスキングだけで悪意あるコードから認証情報を守れるわけではないと説明しています。また、マルチブランチPipelineの認証情報に関する説明を読み、ブランチやジョブの信頼性を踏まえて認証情報の公開範囲を確認してください。ラベルによるルーティングだけを、完全なセキュリティ隔離として扱わないでください。
私有リポジトリや依存関係はAgentの実行条件で確認する
プライベートなソースコード、依存パッケージ、Appleのサービスへ接続する構成では、企業のネットワーク・セキュリティ担当とアクセス要件を照合します。必要な接続先や通信条件は、利用するリポジトリ、パッケージ管理方式、社内プロキシにより異なります。根拠なくホスト名やポート番号を固定せず、組織の承認済み情報を使ってください。
証明書の信頼、プロキシ設定、リポジトリ認証を、Jenkins Agentのサービスアカウントで確認します。対話型の管理者アカウントでは成功するのにジョブでは失敗する場合、権限、証明書ストア、環境変数、ネットワーク経路の違いを一つずつ調べます。原因が特定できるよう、各工程の実行ログと失敗箇所も保存してください。
本番投入は実流水線の合否で判定する
企業のJenkins Macビルドマシンを本番投入する前に、どの作業を検証しますか。
次の条件を、実際のリポジトリとJenkinsの実行アカウントで確認します。Agentの接続表示だけを合格条件にしないことが重要です。
- ジョブが意図したラベルを選び、対象外のノードでは実行されない。
- ソース取得と依存関係の復元が、企業の承認した経路で完了する。
- 使用するXcodeと開発者ディレクトリをログから特定できる。
- ビルド成果物を後続の工程で取得でき、失敗時にはジョブが失敗として終了する。
- シミュレーターテストが実行され、結果と失敗ログを確認できる。
- 署名・公開の認証情報を利用できるジョブと利用者が限定されている。
- Agentや依存サービスに問題が起きた際に、運用担当が原因を追跡し、復旧手順を実行できる。
導入方法は、すでにMacを購入して継続利用する方法と、必要な期間に合わせてリモートMacを使う方法に分かれます。購入は物理機器や継続運用を自社で管理できる一方、初期調達、保守、余剰時間の扱いが課題になります。リモート利用は手元に機器を置かずに試せますが、接続方式、権限、実流水線の適合性を契約前に確認する必要があります。購入を検討する場合は、Mac miniの調達情報も比較材料にしてください。
Jenkins Macビルドマシンの構築では、先に小さな実ジョブで接続、ビルド、テスト、署名の境界を確かめてから、継続運用の方式を選ぶのが堅実です。リモートMacを検証先として使う場合は、利用可能な環境や接続条件を確認したうえで、KVMNODEの案内から実際の提供内容を照合し、チームのコントローラーにAgentを接続した後の受け入れ条件を自社で確認してください。