Microsoft ホステッド ビルド エージェントまたはセルフホステッド ビルド エージェントを選択する
- 6 分
このユニットでは、ビルド エージェントの選択時に考慮すべきいくつかの要因について説明します。 Microsoft ホステッド エージェントを使用することのベネフィットと制限事項、および、独自のプライベート ビルド エージェントをセットアップするときに必要なものについて説明します。
ビルド エージェントとエージェント プールとは
ビルド エージェントは、ビルド タスクを実行するシステムです。 ビルド プロセスを実行する専用サーバーだと考えてください。
1 日に何度もビルド要求を受け取る Azure Pipelines プロジェクトがある、またはそれぞれが同じ種類のビルド エージェントを使用できる複数のプロジェクトがあるとします。 ビルド エージェントを エージェント プール に整理して、各ビルド要求を処理する準備ができているサーバーがあることを確認できます。
ビルドがトリガーされると、利用可能なビルド エージェントを Azure Pipelines がプールから選択します。 すべてのエージェントがビジー状態の場合、プロセスはどれかが利用可能になるまで待ちます。
Microsoft ホステッド エージェントを使用するときは、使用する VM イメージをプールから指定します。 次に示すのは、Ubuntu 20.04 ビルド エージェントを使用する既存のビルド構成の例です。
pool:
vmImage: 'ubuntu-20.04'
demands:
- npm
Microsoft ホステッド エージェントを使用するときは、vmImage
を使用して、必要なシステムの種類を指定します。 Microsoft では、Windows、macOS、各種 Linux を実行するものを含め、多くの種類の VM イメージを提供しています。
demands
セクションでは、ビルド コンピューターに必要なソフトウェアまたは機能を指定します。
独自のプール (プライベート プールとも呼ばれます) からビルド エージェントを使用する場合は、 プールの名前を指定します。 次に例を示します。
pool:
name: 'MyAgentPool'
demands:
- npm
demands
セクションが不要な場合、次のように構文を短縮できます。
pool: 'MyAgentPool'
このモジュールの後半で、ビルド エージェントを作成してプールに追加します。
どのようなエージェントを使用できますか?
ビルド エージェントを選択する際、考慮すべき 2 つの要因があります。
- ビルドを行うオペレーティング システム
- Microsoft ホステッド エージェントを使用できるか、それとも独自のエージェントを提供する必要があるか
Azure Pipelines では、次のオペレーティング システムがサポートされています。
選択するビルド エージェントは、主に、コードをビルドするために使用するツールによって決まります。 たとえば、Xcode を使用してアプリケーションをビルドする場合、macOS エージェントを選択できます。 Visual Studio が必要な場合、おそらく Windows エージェントを選択します。
既存のビルド構成では、Microsoft ホステッド エージェントを使用します。 ホステッド エージェントは、Microsoft が提供するインフラストラクチャ上で動作します。
プライベート エージェントは、独自に提供されるインフラストラクチャを使用します。 エージェントは、クラウドまたはデータセンターで動作するシステムにすることができます。 エージェントが要件を満たし、Azure Pipelines に接続できるのであれば、どちらのシステムでも機能します。 このモジュールでは、こちらで用意した、Azure 上で動作する VM を使用します。
独自のビルド エージェントはいつ使用するべきですか?
多くのビルド タスクでは、Microsoft ホステッド エージェントでも、必要な処理はすべて実行できます。 それは最も手軽に始められる方法です。
セキュリティやその他のオペレーティング システムの更新プログラムは、Microsoft によって適切に管理されます。 開発者は、実行したいビルド構成を定義するだけで済みます。
ホステッド エージェントには、多くの一般的な種類のアプリケーションをビルドするためのソフトウェアも含まれています。 必要なその他のソフトウェアをビルド プロセス中に追加できます。
Microsoft ホステッド エージェントには、次のようないくつかの制限があります。
- ビルド期間: ビルド ジョブは最大 6 時間実行できます。
- ディスク領域: ホストされるエージェントは、ソースとビルド出力に対して固定量のストレージを提供します。 これは十分なストレージではないおそれがあります。
- CPU、メモリ、ネットワーク: ホストされたエージェントは、Microsoft Azure 汎用 VM 上で実行されます。 Standard_DS2_v2 では、期待できる CPU、メモリ、ネットワークの特性について説明します。
- 対話機能: ホストされているエージェントにサインインすることはできません。
- ファイル共有: ビルド成果物を UNC (Universal Naming Convention) ファイル共有にドロップすることはできません。
ホステッド エージェントのセットアップは比較的簡単ですが、先に述べた制限とは別に、独自のビルド エージェントを使用することにはいくつかのベネフィットがあります。
たとえば、ホステッド エージェントを使用しているときは、他の Azure DevOps ユーザーとインフラストラクチャを共有しています。 通常、ビルドの開始には数秒しかかかりませんが、Microsoft システムの負荷によってはもっと時間がかかることがあります。
また、ホステッド エージェントの使用時は、ビルドごとにクリーンなシステムが得られます。 独自のビルド エージェントを使用する場合は、毎回クリーン ビルドを実行するか 、増分ビルドを実行するかを決定できます。 増分ビルドの場合、既存のビルド ツールとコンパイルされたコードに基づいてビルドします。 インクリメンタル ビルドでは、既に多くのビルド ツールと依存コンポーネントがシステムにインストールされているため、完了までの時間を短縮できます。
トレードオフとしては、ビルド インフラストラクチャが自前であるため、最新のソフトウェアとセキュリティ パッチがビルド エージェントにインストールされていることを保証する責任があります。
プライベート ビルド エージェントをどのようにセットアップしますか?
プライベート ビルド エージェントには、アプリケーションをビルドするために必要なソフトウェアが含まれます。 また、システムが Azure Pipelines に接続してビルド ジョブを受信できるようにするエージェント ソフトウェアも含まれます。
プライベート エージェントをセットアップするときは、ビルドを実行するインフラストラクチャを提供します。 そのため、柔軟なやり方でエージェントを立ち上げて保守することができます。
たとえば、次のようなことができます。
ビルド エージェントを手動で設定する: システムを起動し、サインインし、ビルド ツールとエージェント ソフトウェアを対話形式でインストールします。
プロセスを自動化する: システムを起動し、スクリプトまたはツールを実行してビルド ツールとエージェント ソフトウェアをインストールします。 システムがオンラインになった後、またはプロビジョニング プロセス中にエージェントを構成できます。
たとえば、Azure 上でビルド エージェントを実行している場合、Azure Resource Manager テンプレート (ARM テンプレート) または Bicep を使用すれば、システムの起動と、システムをビルド エージェントとして実行するための構成がすべて 1 ステップで行えます。 HashiCorp による Terraform は、プロセスを自動化するもう 1 つの方法です。 Terraform は、Azure を含むさまざまな種類のインフラストラクチャと連携します。
イメージを作成する: 構成された環境のイメージ (またはスナップショット) を作成します。 その後、そのイメージを使用して、同じシステムを必要な数だけプールに作成します。
手動構成は、プロセスを理解できるため、開始するのに適した方法です。 ビルド エージェントが 1 つだけ必要なときに最速でセットアップするための方法でもあります。
自動化は、多数のビルド エージェントが必要な場合、またはビルド インフラストラクチャを定期的に開始して終了する必要がある場合に役立ちます。 複数のエージェントが必要な場合は、手動プロセスから自動プロセスに移行できます。
イメージは自動化の一種です。 すべてのソフトウェアが事前に構成されているため、時間を節約できます。 トレードオフとしては、最新の OS パッチやビルド ツールを取り込むために、定期的なイメージのリビルドが必要な場合があります。 HashiCorp による Packer は、画像を作成するための一般的なツールです。
Space Game シナリオでは、プライベート ビルド エージェントを使用することにします。