🔖

Azure DevOpsでセルフホステッドエージェントをサービスプリンシパル認証で確立・構築する

2024/12/10に公開

0. はじめに

Azure DevOps Servicesにおけるセルフホステッドエージェントは、2024年12月時点、
以下の3つの認証方式が提供されています。

  • 個人用アクセストークン (PAT)
  • サービスプリンシパル (SP)
  • デバイスコードフロー (Microsoft Entra ID)

本記事では、サービスプリンシパルを使用したセルフホステッドエージェントの構築手順を説明しますが、まずはセルフホステッドエージェントの必要性とそのユースケースについて解説します。

Azure DevOpsには、Microsoftがホストするクラウドエージェント(Microsoft-hosted agent)と、ユーザーが管理するセルフホステッドエージェント(Self-hosted agent)の2種類のエージェントがあります。セルフホステッドエージェントは、エージェント環境を自由にカスタマイズできるという利点があります。

例えば、特定のビルドやデプロイメントに必要なツールやライブラリを事前にインストールすることで、すべてのジョブで一貫性のある環境を維持できます。また、ネットワークプロキシやファイアウォール設定など、企業独自のセキュリティ要件に対応する際にも選択肢となります。

さらに、コスト効率の観点では、Azureのクラウドエージェントは分単位で課金されるため、長時間実行するジョブや頻繁に利用されるジョブではセルフホステッドエージェントを使用することでコスト削減が期待できます。加えて、GPUや特殊なOSといった特定のハードウェアリソースが必要なケースも該当します。

以下の手順で環境を構築します。それぞれの詳細を画像付きで解説します。

  1. Azureへセルフホステッド用の仮想マシンを作成(今回はWindows)
  2. Azure Entra IDでサービスプリンシパルを作成
  3. Azure DevOps > Organization SettingsのAgent poolsでセルフホステッドエージェントを作成
  4. [3]で作成したエージェントのセキュリティへ管理者として、[2]で作成したサービスプリンシパルを付与する
  5. [2]で示されたエージェント構成ファイルをダウンロードする
  6. [5]でダウンロードした構成ファイルを[1]で作成した仮想マシンへ適用する
  7. 構成完了後AzureDevOpsのエージェントプールが作成されていることを確認する
  8. 作成したセルフホステッドエージェントを使ってPipelinesをテストする

1. Azureへセルフホステッド用の仮想マシンを作成(今回はWindows)

下記に従って仮想マシンを作成します。
https://zenn.dev/yutakaosada/articles/4d493316db2658

2. Azure Entra IDでサービスプリンシパルを作成

Azure Entra IDでサービスプリンシパルを作成します。

左側メニュー > Microsoft Entra ID > アプリの登録

シークレットの作成

3. Azure DevOps > Organization SettingsのAgent poolsでセルフホステッドエージェントを作成

Azure DevOpsの設定画面から以下の手順でエージェントプールを作成します。

  1. AzDO>Organization Settings>Agent pools>Add poolをクリックします。

  2. Self-hostedを選び、Create

4. 作成したエージェントのセキュリティへ管理者として、サービスプリンシパルを付与

[3]で作成したAgent poolをクリックし、SecurityへサービスプリンシパルをAdminで付与し、Saveします。

5. 作成したAgent poolで示されたエージェント構成ファイルをダウンロードする

  1. 作成したエージェントプール > Agents > New agentをクリック

  1. x64 or x86を選択の上、構成ファイルをダウンロードする。

6. ダウンロードした構成ファイルをセルフホステッド用の仮想マシンへ適用する

  1. 仮想マシンにログインし、構成ファイルを適切なフォルダ(例: C:\agent)に解凍

  1. 管理者権限のPowerShellを起動して以下を実行
# カレントディレクトリ
cd C:\agent
# 構成ファイルを実行
.\config.cmd

入力する設定値:

要素 設定値
Enter server URL https://dev.azure.com/%Organization_Name%
Enter Client(App) ID 作成したサービスプリンシパルのクライアントID
Enter Tenant ID 作成したサービスプリンシパルが所属するテナントID
Enter Client secret 作成したサービスプリンシパルのクライアントシークレット
Enter agent pool 作成したエージェントプール
その他の入力値 必要に応じて適宜設定

7. 構成完了後AzureDevOpsのエージェントプールが作成されていることを確認する

Azure DevOps > Organization Settings > Agent pools > Agentsをクリックし、ステータスがOnlineとなっていることを確認します。

8. 作成したセルフホステッドエージェントを使ってPipelinesをテストする

以下の簡単なPipelines YAMLを実行し、動作確認を行います。

trigger:
- none

pool:
  name: %作成したエージェント%

steps:
- script: echo Hello, world!
  displayName: 'Run a one-line script'

- script: |
    echo Add other tasks to build, test, and deploy your project.
    echo See https://aka.ms/yaml
  displayName: 'Run a multi-line script'

正常終了すればサービスプリンシパルによる、セルフホステッドエージェントの構築は完了です。

まとめ

セルフホステッドエージェントは、Azure DevOpsの柔軟性を最大限に引き出す機構となります。特に、特殊な環境構築が必要な場合やコスト最適化を目指す場合に有効なため、本記事の手順を参考に、セルフホステッドエージェントを安全かつ効率的に構築して、プロジェクトの成功に繋げてください。

リファレンス

https://learn.microsoft.com/ja-jp/azure/devops/pipelines/agents/windows-agent?view=azure-devops

https://learn.microsoft.com/ja-jp/azure/devops/pipelines/agents/agent-authentication-options?view=azure-devops

https://learn.microsoft.com/ja-jp/azure/devops/pipelines/agents/device-code-flow-agent-registration?view=azure-devops

GitHubで編集を提案

Discussion