Microsoft ホステッド ビルド エージェントまたはセルフホステッド ビルド エージェントを選択する
このユニットでは、ビルド エージェントの選択時に考慮すべきいくつかの要因について説明します。 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) ファイル共有にドロップすることはできません。
ホステッド エージェントのセットアップは比較的簡単ですが、先に述べた制限とは別に、独自のビルド エージェントを使用することにはいくつかのベネフィットがあります。
たとえば、ホステッド エージェントを使用しているときは、他の Azure DevOps ユーザーとインフラストラクチャを共有しています。 通常、ビルドの開始には数秒しかかかりませんが、Microsoft システムの負荷によってはもっと時間がかかることがあります。
また、ホステッド エージェントの使用時は、ビルドごとにクリーンなシステムが得られます。 独自のビルド エージェントを利用する場合は、毎回クリーン ビルドを実行するか、"増分ビルド" を実行するかを決めることができます。 増分ビルドの場合、既存のビルド ツールとコンパイルされたコードに基づいてビルドします。 インクリメンタル ビルドでは、既に多くのビルド ツールと依存コンポーネントがシステムにインストールされているため、完了までの時間を短縮できます。
トレードオフとしては、ビルド インフラストラクチャが自前であるため、最新のソフトウェアとセキュリティ パッチがビルド エージェントにインストールされていることを保証する責任があります。
プライベート ビルド エージェントをどのようにセットアップしますか?
プライベート ビルド エージェントには、アプリケーションをビルドするために必要なソフトウェアが含まれます。 また、システムが Azure Pipelines に接続してビルド ジョブを受信できるようにするエージェント ソフトウェアも含まれます。
プライベート エージェントをセットアップするときは、ビルドを実行するインフラストラクチャを提供します。 そのため、柔軟なやり方でエージェントを立ち上げて保守することができます。
たとえば、次のようなことができます。
ビルド エージェントを手動で設定する: システムを起動してサインインし、ビルド ツールとエージェント ソフトウェアを対話形式でインストールします。
プロセスを自動化する: システムを起動し、スクリプトまたはツールを実行して、ビルド ツールとエージェント ソフトウェアをインストールします。 システムがオンラインになった後、またはプロビジョニング プロセス中にエージェントを構成できます。
たとえば、Azure 上でビルド エージェントを実行している場合、Azure Resource Manager テンプレート (ARM テンプレート) または Bicep を使用すれば、システムの起動と、システムをビルド エージェントとして実行するための構成がすべて 1 ステップで行えます。 HashiCorp 社の Terraform は、プロセスを自動化するもう 1 つの方法です。 Terraform は、Azure を含むさまざまな種類のインフラストラクチャと連携します。
イメージの作成:構成済み環境のイメージ (スナップショット) を作成します。 その後、そのイメージを使用して、同じシステムを必要な数だけプールに作成します。
プロセスを理解するために、最初は手動での構成をお勧めします。 ビルド エージェントが 1 つだけ必要なときに最速でセットアップするための方法でもあります。
自動化は、多数のビルド エージェントが必要な場合、またはビルド インフラストラクチャを定期的に開始して終了する必要がある場合に役立ちます。 複数のエージェントが必要な場合は、手動プロセスから自動プロセスに移行できます。
イメージは自動化の一種です。 すべてのソフトウェアが事前に構成されているため、時間を節約できます。 トレードオフとしては、最新の OS パッチやビルド ツールを取り込むために、定期的なイメージのリビルドが必要な場合があります。 HashiCorp 社の Packer は、イメージを作成するための定評あるツールです。
Space Game シナリオでは、プライベート ビルド エージェントを使用することにします。