Azure 仮想マシン スケール セット エージェント

Azure DevOps Services

Azure 仮想マシン スケール セット エージェントは、次にスケール セット エージェントと呼ばれ、要求に合わせて自動スケーリングできるセルフホステッド エージェントの一種です。 この弾力性により、専用エージェントを常に実行する必要が減ります。 Microsoft がホストするエージェントとは異なり、エージェントを実行するマシンのサイズとイメージに対する柔軟性があります。

Microsoft でホストされるエージェントが好きでも、提供されるエージェントによって制限されている場合は、スケール セット エージェントを検討する必要があります。 次に例をいくつか示します。

  • Microsoft がネイティブの Microsoft ホステッド エージェントで提供するよりも多くのメモリ、より多くのプロセッサ、より多くのストレージ、またはより多くの IO が必要です。
  • 機械学習には、特定の命令セットを持つ NCv2 VM が必要です。
  • 受信接続がないプライベート VNET 内のプライベート Azure App Serviceにデプロイする必要があります。
  • Microsoft がホストするエージェントがサーバーと通信できるように、特定の IP アドレスに対する企業ファイアウォールを開く必要があります。
  • エージェント マシンのネットワーク接続を制限し、承認されたサイトのみにアクセスできるようにする必要があります。
  • ニーズを満たすのに十分なエージェントを Microsoft から入手することはできません。
  • ジョブが Microsoft ホスト型エージェントのタイムアウトを超えています。
  • Microsoft でホストされる並列ジョブを組織内の個々のプロジェクトまたはチームに分割することはできません。
  • 増分ソースとマシン レベルのパッケージ キャッシュを利用するために、エージェントで複数の連続するジョブを実行する必要があります。
  • エージェントがジョブの受け入れを開始する前に、追加の構成またはキャッシュ ウォームアップを実行する必要があります。

セルフホステッド エージェントが好きでも、管理を簡略化したい場合は、スケール セット エージェントを検討する必要があります。 次に例をいくつか示します。

  • 24 時間体制で専用エージェントを実行する必要はありません。 ジョブの実行に使用されていないエージェント マシンをプロビジョニング解除する必要がある。
  • パイプラインで信頼されていないコードを実行し、各ジョブの後にエージェント マシンを再イメージ化する必要があります。
  • エージェントの基本イメージの定期的な更新を簡略化する必要があります。

Note

  • スケール セットを使用して Mac エージェントを実行することはできません。 Windowsまたは Linux エージェントは、この方法でのみ実行できます。

  • Azure DevOps Servicesに VMSS エージェント プールを使用することは、Azure パブリック (グローバル サービス) クラウドでのみサポートされます。 現時点では、VMSS エージェント プールは、他の 国内クラウド オファリングをサポートしていません。

  • VMSS を複数のプールに関連付けてはいけません。

スケール セットを作成する

スケール セット エージェントを作成する準備として、まず、Azure portalに仮想マシン スケール セットを作成する必要があります。 Azure Pipelinesが管理できるように、特定の方法で仮想マシン スケール セットを作成する必要があります。 特に、受信パイプライン ジョブの数に基づいてスケーリングを実行する方法Azure Pipelines決定できるように、Azure の自動スケーリングを無効にする必要があります。 スケール セットを作成するには、次の手順を使用することをお勧めします。

次の例では、UbuntuLTS VM イメージを使用して、Azure Cloud Shellで新しいリソース グループと仮想マシン スケール セットを作成します。

Note

この例では、スケール セットに UbuntuLTS VM イメージが使用されます。 エージェントの基礎としてカスタマイズされた VM イメージが必要な場合は、「カスタム イメージ、ソフトウェア、またはディスク サイズを使用してスケール セットを作成する」の手順に従って 、スケール セットを作成する前にカスタマイズされたイメージを作成します。

  1. Azure Cloud Shellhttps://shell.azure.com/移動します。

  2. 次のコマンドを実行して、既定の Azure サブスクリプションを確認します。

    az account list -o table
    

    目的のサブスクリプションが既定として表示されない場合は、目的のサブスクリプションを選択します。

    az account set -s <your subscription ID>
    
  3. 仮想マシン スケール セットのリソース グループを作成します。

    az group create \
    --location westus \
    --name vmssagents
    
  4. リソース グループに仮想マシン スケール セットを作成します。 この例では、UbuntuLTS VM イメージが指定されています。

    az vmss create \
    --name vmssagentspool \
    --resource-group vmssagents \
    --image UbuntuLTS \
    --vm-sku Standard_D2_v3 \
    --storage-sku StandardSSD_LRS \
    --authentication-type SSH \
    --instance-count 2 \
    --disable-overprovision \
    --upgrade-policy-mode manual \
    --single-placement-group false \
    --platform-fault-domain-count 1 \
    --load-balancer ""
    

    スケール セットAzure Pipelines管理するため、次の設定が必要または推奨されます。

    • --disable-overprovision - 必須
    • --upgrade-policy-mode manual - 必須
    • --load-balancer ""- Azure Pipelinesは、スケール セット エージェント プール内のエージェントにジョブをルーティングするためにロード バランサーを必要としませんが、ロード バランサーの構成は、ファイアウォール規則に使用できるスケール セット エージェントの IP アドレスを取得する 1 つの方法です。 スケール セット エージェントの IP アドレスを取得するもう 1 つのオプションは、オプションを使用してスケール セットを作成することです --public-ip-address 。 ロード バランサーまたはパブリック IP アドレスを使用してスケール セットを構成する方法の詳細については、Virtual Machine Scale Setsドキュメントaz vmss create を参照してください。
    • --instance-count 2 - この設定は必須ではありませんが、エージェント プールを作成する前に、スケール セットが完全に機能していることを確認できます。 2 つの VM の作成には数分かかる場合があります。 後でエージェント プールを作成すると、Azure Pipelinesはこれら 2 つの VM を削除し、新しい VM を作成します。

    重要

    Windowsで Azure CLI を使用してこのスクリプトを実行する場合は、次のように一重引用符で--load-balancer ""囲む""必要があります。--load-balancer '""'

    VM サイズで エフェメラル OS ディスクがサポートされている場合、エフェメラル OS ディスクを有効にする次のパラメーターは省略可能ですが、仮想マシンの再イメージ化時間を短縮することをお勧めします。

    • --ephemeral-os-disk true
    • --os-disk-caching readonly

    重要

    エフェメラル OS ディスクは、すべての VM サイズでサポートされているわけではありません。 サポートされている VM サイズの一覧については、「 Azure VM のエフェメラル OS ディスク」を参照してください

    スケール セットを作成するには、linux イメージまたは Windows イメージ (Azure Marketplace または独自のカスタム イメージ) を選択します。 イメージにAzure Pipelinesエージェントをプレインストールしないでください。 Azure Pipelinesは、新しい仮想マシンをプロビジョニングすると、エージェントを自動的にインストールします。 上の例では、プレーン UbuntuLTS イメージを使用しました。 カスタム イメージを作成して使用する手順については、FAQ を参照 してください

    任意の VM SKU とストレージ SKU を選択します。

    Note

    ライセンスに関する考慮事項により、Microsoft がホストするイメージの配布が制限されます。 これらのイメージをスケール セット エージェントで使用することはできません。 ただし、これらのイメージの生成に使用するスクリプトはオープンソース。 これらのスクリプトを自由に使用して、独自のカスタム イメージを作成できます。

  5. スケール セットを作成したら、Azure portalでスケール セットに移動し、次の設定を確認します。

    • アップグレード ポリシー - 手動

      Verify upgrade policy.

      この設定は、次の Azure CLI コマンドを実行して確認することもできます。

      az vmss show --resource-group vmssagents --name vmssagentspool --output table
      
      Name            ResourceGroup    Location    Zones    Capacity    Overprovision    UpgradePolicy
      --------------  ---------------  ----------  -------  ----------  ---------------  ---------------
      vmssagentspool  vmssagents       westus               0           False            Manual
      
    • スケーリング - 手動スケール

      Verify manual scale policy.

スケール セット エージェント プールを作成する

  1. Azure DevOps Project設定に移動し、Pipelinesの [エージェント プール] を選択し、[プールの追加] を選択して新しいエージェント プールを作成します。

    Create agent pool.

    重要

    スケール セット プールはProject設定または組織設定で作成できますが、スケール セット プールを削除する場合は、設定をProjectするのではなく、組織の設定から削除する必要があります。

  2. プールの種類として Azure 仮想マシン スケール セット を選択します。 スケール セットを含む Azure サブスクリプション を選択し、[ 承認] を選択し、そのサブスクリプションから目的の仮想マシン スケール セットを選択します。 既存の サービス接続 がある場合は、サブスクリプションではなく一覧から選択できます。

    重要

    • スケール セット エージェント プールを構成するには、選択したサブスクリプションに対する 所有者 または ユーザー アクセス管理者 のアクセス許可が必要です。 これらのアクセス許可のいずれかを持っていて、[ 承認] を選択したときにエラーが発生する場合は、 トラブルシューティングを参照してください。

    • 現在サポートされている唯一のサービス接続は、サービス プリンシパル キーに基づく Azure Resource Manager (ARM) サービス接続です。 証明書の資格情報またはマネージド ID に基づく ARM サービス接続は失敗します。 サブスクリプション内の既存のスケール セットを一覧表示しようとすると、次のようなエラーが表示されます。

      Invalid Service Endpoint with Id <guid> and Scope <guid>

  3. そのサブスクリプションから目的の仮想マシン スケール セットを選択します。

  4. エージェント プールの名前を指定します。

  5. 次のオプションを構成します。

    • 使用するたびに仮想マシンが自動的に破棄 されます。すべてのジョブに新しい VM インスタンスが使用されます。 ジョブの実行後、VM はオフラインになり、別のジョブを取得する前に再イメージ化されます。
    • 問題のあるエージェントを調査用に保存 する - 問題のある エージェント VM を 削除するのではなく、トラブルシューティングのために保存するかどうか。
    • スケール セット内の仮想マシンの最大数 - Azure Pipelinesはエージェントの数を自動的にスケールアウトしますが、この制限を超えることはありません。
    • スタンバイ状態に維持するエージェントの数 - Azure Pipelinesはエージェントの数を自動的にスケーリングしますが、新しいジョブを実行するために常にこの多数のエージェントが使用可能であることを確認します。 たとえば、少量のジョブのコストを節約するためにこれを 0 に設定した場合、Azure Pipelinesはジョブがある場合にのみ VM を起動します。
    • 余分なアイドル状態のエージェントを削除するまでの遅延 (分単位) - 1 日を通してビルド負荷の変動を考慮するために、Azure Pipelinesは、過剰なアイドル 状態のエージェントを削除するまで、この時間を待ちます。
    • 対話型テストを実行するように VM を構成する (Windows Server OS のみ) - Windowsエージェントは、自動ログオンと対話型 UI を使用して未検証で実行するように構成することも、昇格されたアクセス許可で実行するように構成することもできます。 対話型 UI を使用して未検証で実行するには、このチェック ボックスをオンにします。 どちらの場合も、エージェント ユーザーは Administrators グループのメンバーです。
  6. 設定が構成されたら、[ 作成 ] を選択してエージェント プールを作成します。

スケール セット エージェント プールを使用する

スケール セット エージェント プールの使用は、他のエージェント プールと似ています。 クラシック ビルド、リリース、または YAML パイプラインで使用できます。 ユーザーのアクセス許可、パイプラインのアクセス許可、承認、およびその他のチェックは、他のエージェント プールと同じように動作します。 詳細については、「 エージェント プール」を参照してください。

重要

Azure portalでスケール セットに直接変更を加える場合は、注意が必要です。

  • Azure portalでスケール セット構成設定の多くを変更することはできません。 Azure Pipelinesスケール セットの構成を更新します。 スケール セットに対して手動で変更を加えた場合、Azure Pipelinesの操作が妨げられる可能性があります。
  • Azure Pipelinesでスケール セット プールを最初に削除しないと、スケール セットの名前を変更または削除することはできません。

スケール セットAzure Pipelines管理する方法

スケール セット エージェント プールが作成されると、Azure Pipelinesはエージェント マシンを自動的にスケーリングします。

Azure Pipelines、プール内のエージェントとスケール セット内の仮想マシンの状態を 5 分ごとにサンプリングします。 スケール インまたはスケールアウトの決定は、その時点のアイドル状態のエージェントの数に基づいています。 エージェントがオンラインで、パイプライン ジョブを実行していない場合、エージェントはアイドル状態と見なされます。 Azure Pipelinesは、次のいずれかの条件が満たされた場合にスケールアウト操作を実行します。

  • アイドル 状態のエージェントの数が、指定したスタンバイ エージェントの数を下回る
  • キューで待機しているパイプライン ジョブをサービスするアイドル 状態のエージェントはありません

これらの条件のいずれかが満たされた場合、Azure Pipelines VM の数が増えます。 スケールアウトは、プールの最大サイズに対する一定の割合の増分で行われます。 各ステップでマシンを作成するには、20 分かかります。

Azure Pipelines、アイドル状態のエージェントの数が 30 分を超えるとエージェントでスケーリングされます (過剰なアイドル エージェントを削除するまでの遅延 (分単位) を使用して構成できます)。

このすべてを例に示すには、2 つのスタンバイ エージェントと 4 つの最大エージェントで構成されたスケール セット エージェント プールを検討してください。 使用するたびに VM を破棄するとします。 また、スケール セットで開始する VM がないと仮定します。

  • アイドル エージェントの数は 0 であり、アイドル状態のエージェントの数がスタンバイ数 2 を下回っているため、Azure Pipelinesスケールアウトされ、スケール セットに 2 つの VM が追加されます。 これらのエージェントがオンラインになると、2 つのアイドル 状態のエージェントが存在します。

  • たとえば、1 つのパイプライン ジョブが到着し、いずれかのエージェントに割り当てられているとします。

  • 現時点では、アイドル状態のエージェントの数は 1 で、スタンバイ数が 2 未満です。 そのため、Azure Pipelinesスケールアウトし、さらに 2 つの VM (この例で使用される増分サイズ) を追加します。 現時点では、プールには 3 つのアイドル エージェントと 1 つのビジー エージェントがあります。

  • 最初のエージェントのジョブが完了したとします。 Azure Pipelinesは、そのエージェントをオフラインにして、そのマシンを再イメージ化します。 数分後に、新鮮な画像が返されます。 現時点では、4 つのアイドル 状態のエージェントがあります。

  • 他のジョブが 30 分間到着しない場合 (過剰なアイドル エージェントを削除する前の分単位で遅延を使用して構成可能)、Azure Pipelinesは必要以上にアイドル 状態のエージェントが存在することを決定します。 そのため、プール内で 2 つのエージェントにスケーリングされます。

この操作全体を通して、Azure Pipelinesの目標は、スタンバイ状態のアイドル 状態のエージェントの必要な数に達することです。 プールはスケールアウトされ、ゆっくりとスケールインされます。 1 日の間に、要求が朝キューに入るとプールがスケールアウトされ、夕方に負荷が下がるとスケールインします。 さまざまな場合に、必要以上にアイドル状態のエージェントが観察される場合があります。 これは、Azure Pipelinesが指定した制約に徐々に収束するためです。

Note

Azure Pipelinesが仮想マシンをスケールアウトまたはスケールインするには、1 時間以上かかることがあります。 Azure Pipelinesは、ステップでスケールアウトし、エラーの操作を監視し、使用できないマシンを削除し、その過程で新しいマシンを作成することで対応します。 この修正操作には 1 時間以上かかる場合があります。

最大限の安定性を実現するために、スケール セット操作は順番に実行されます。 たとえば、プールをスケールアウトする必要があり、削除するマシンも異常な場合、Azure Pipelinesは最初にプールをスケールアウトします。 プールがスケールアウトされ、スタンバイ時に必要な数のアイドル エージェントに達すると、異常なマシンが削除されます。これは、 調査用に異常なエージェントを保存する 設定に応じて行われます。 詳細については、「 異常なエージェント」を参照してください。

サンプリング サイズが 5 分であるため、すべてのエージェントが短時間パイプラインを実行でき、スケールアウトは発生しない可能性があります。

パイプライン エージェントの構成のカスタマイズ

スケール セットのオペレーティング システム カスタム イメージで環境変数を定義することで、Azure Pipelines エージェントの構成をカスタマイズできます。 たとえば、スケール セット エージェントの作業ディレクトリの既定値は、Windowsの場合は C:\a、Linux の場合は /agent/_work です。 作業ディレクトリを変更する場合は、VSTS_AGENT_INPUT_WORKという名前の環境変数を目的の作業ディレクトリに設定します。 詳細については、Pipelines エージェントの無人構成に関するドキュメントを参照してください。 次に例をいくつか示します。

  • VSTS_AGENT_INPUT_WORK
  • VSTS_AGENT_INPUT_PROXYURL
  • VSTS_AGENT_INPUT_PROXYUSERNAME
  • VSTS_AGENT_INPUT_PROXYPASSWORD

重要

Pipelines エージェントをカスタマイズするときは注意が必要です。 一部の設定が他の必要な設定と競合し、エージェントの登録に失敗し、VM が削除されます。 これらの設定は、設定または変更しないでください。

  • VSTS_AGENT_INPUT_URL
  • VSTS_AGENT_INPUT_AUTH
  • VSTS_AGENT_INPUT_TOKEN
  • VSTS_AGENT_INPUT_USERNAME
  • VSTS_AGENT_INPUT_PASSWORD
  • VSTS_AGENT_INPUT_POOL
  • VSTS_AGENT_INPUT_AGENT
  • VSTS_AGENT_INPUT_RUNASSERVICE
  • ...展開グループに関連するあらゆるもの。

カスタム スクリプト拡張機能を使用した仮想マシンの起動のカスタマイズ

ユーザーは、それらのマシンがパイプライン ジョブの実行を開始する前に、スケールセット エージェント マシンでスタートアップ スクリプトを実行できます。 スタートアップ スクリプトの一般的なユース ケースには、ソフトウェアのインストール、キャッシュのウォーム化、リポジトリのフェッチなどがあります。 スタートアップ スクリプトを実行するには、Windows用のカスタム スクリプト拡張機能または Linux 用カスタム スクリプト拡張機能をインストールします。 この拡張機能は、作成または再イメージ化された直後に、スケール セット内のすべての仮想マシンで実行されます。 カスタム スクリプト拡張機能は、Azure Pipelines エージェント拡張機能が実行される前に実行されます。

Linux 用のカスタム スクリプト拡張機能を作成する例を次に示します。

az vmss extension set \
--vmss-name <scaleset name> \
--resource-group <resource group> \
--name CustomScript \
--version 2.0 \
--publisher Microsoft.Azure.Extensions \
--settings '{ \"fileUris\":[\"https://<myGitHubRepoUrl>/myScript.sh\"], \"commandToExecute\": \"bash ./myScript.sh /myArgs \" }'

Windowsのカスタム スクリプト拡張機能を作成する例を次に示します。

az vmss extension set \
--vmss-name <scaleset name> \
--resource-group <resource group> \
--name CustomScriptExtension \
--version 1.9 \
--publisher Microsoft.Compute \
--settings '{ \"FileUris\":[\"https://<myGitHubRepoUrl>/myscript.ps1\"], \"commandToExecute\": \"Powershell.exe -ExecutionPolicy Unrestricted -File myscript.ps1 -myargs 0 \" }'

重要

VM が VM 作成プロセスを完了するには、カスタム スクリプト拡張機能で実行されたスクリプトが終了コード 0 で返される必要があります。 カスタム スクリプト拡張機能が例外をスローするか、0 以外の終了コードを返した場合、Azure Pipeline 拡張機能は実行されず、VM はエージェント プールAzure DevOps登録されません。

スケール セット エージェントのライフサイクル

Azure Pipelines仮想マシン スケール セット エージェントの操作フローを次に示します。

  1. Azure DevOps スケール セット エージェント プールのサイズ設定ジョブは、プールにアイドル 状態のエージェントが少なすぎてスケールアウトする必要があることを決定します。Azure Pipelinesは、スケール セットの容量を増やすために Azure スケール セットを呼び出します。

  2. Azure スケール セットが新しい仮想マシンの作成を開始します。 仮想マシンが実行されると、Azure Scale Sets によって、インストールされている VM 拡張機能が順番に実行されます。

  3. カスタム スクリプト拡張機能がインストールされている場合は、Azure Pipelines エージェント拡張機能の前に実行されます。 カスタム スクリプト拡張機能から 0 以外の終了コードが返された場合、VM の作成プロセスは中止され、削除されます。

  4. Azure Pipelines エージェント拡張機能が実行されます。 この拡張機能は、Azure Pipelines エージェントの最新バージョンと、ここに記載されている構成スクリプトをダウンロードします。

    Note

    これらの URL は変更される可能性があります。

  5. 構成スクリプトは、オペレーティング システムがサーバーまたは Linux Windows場合に、その名前AzDevOpsのローカル ユーザーを作成します。 Windows 10 クライアント OS の場合、エージェントは LocalSystem として実行されます。 その後、スクリプトはAzure Pipelines エージェントを解凍、インストール、および構成します。 構成の一環として、エージェントはAzure DevOps エージェント プールに登録され、オフライン状態のエージェント プールの一覧に表示されます。

  6. ほとんどのシナリオでは、構成スクリプトは、ローカル ユーザーとして実行するエージェントをすぐに開始します AzDevOps。 エージェントはオンラインになり、パイプライン ジョブを実行する準備が整います。

    プールが対話型 UI 用に構成されている場合、エージェントの構成後に仮想マシンが再起動します。 再起動後、ローカル ユーザーは自動ログインし、すぐにパイプライン エージェントを開始します。 その後、エージェントはオンラインになり、パイプライン ジョブを実行する準備が整います。

カスタム イメージ、ソフトウェア、またはディスク サイズを使用してスケール セットを作成する

パブリックに利用可能な Azure イメージを使用して既定の 128 GB OS ディスクでスケール セットを作成するだけの場合は、手順 10 に進み、パブリック イメージ名 (UbuntuLTS、Win2019DataCenter など) を使用してスケール セットを作成します。 それ以外の場合は、次の手順に従って VM イメージをカスタマイズします。

  1. 目的の OS イメージを使用して VM を作成し、必要に応じて OS ディスク サイズを 128 GB から 128 GB に拡張します <myDiskSizeGb>

    • 使用可能な Azure Image で始まる場合 (例: <myBaseImage> = (Win2019DataCenter、UbuntuLTS):

      az vm create --resource-group <myResourceGroup> --name <MyVM> --image <myBaseImage> --os-disk-size-gb <myDiskSize>  --admin-username myUserName --admin-password myPassword
      
    • 一般化された VHD で始まる場合:

      1. まず、目的のサイズのアンマネージド ディスクを使用して VM を作成し、次にマネージド ディスクに変換します。

        az vm create --resource-group <myResourceGroup> --name <MyVM> --image <myVhdUrl> --os-type windows --os-disk-size-gb <myDiskSizeGb> --use-unmanaged-disk --admin-username <myUserName> --admin-password <myPassword> --storage-account <myVhdStorageAccount>
        
      2. VM のシャット ダウン

        az vm stop --resource-group <myResourceGroup> --name <MyVM>
        
      3. VM の割り当てを解除する

        az vm deallocate --resource-group <myResourceGroup> --name <MyVM>
        
      4. マネージド ディスクへの変換

        az vm convert --resource-group <myResourceGroup> --name <MyVM>
        
      5. VM を再起動する

        az vm start --resource-group <myResourceGroup> --name <MyVM>
        
  2. イメージをカスタマイズするために、VM のパブリック IP アドレスへのリモート デスクトップ (または SSH)。 RDP (3389) または SSH (22) ポートのブロックを解除するには、ファイアウォールでポートを開く必要がある場合があります。

    1. Windows - 128 GB を超える場合<MyDiskSizeGb>は、上記で宣言したディスク サイズを満たすように OS ディスク サイズを拡張します。

      DiskPart ツールを管理者として開き、次の DiskPart コマンドを実行します。

      1. list volume (ボリュームを表示するには)
      2. select volume 2 (OS ドライブのボリュームによって異なります)
      3. extend size 72000 (ドライブを 72 GB、128 GB から 200 GB に拡張する場合)
  3. VM に追加のソフトウェアをインストールします。

  4. パイプライン エージェント ユーザーのアクセス許可をカスタマイズするには、名前付きの AzDevOpsユーザーを作成し、必要なアクセス許可をそのユーザーに付与します。 このユーザーが存在しない場合は、スケールセット エージェントのスタートアップ スクリプトによって作成されます。

  5. カスタマイズが完了したら VM を再起動する

  6. VM を一般化します。

    • Windows - 管理コンソール ウィンドウから:
      C:\Windows\System32\sysprep\sysprep.exe /generalize /oobe /shutdown
      
    • Linux:
      sudo waagent -deprovision+user -force
      

    重要

    VM の一般化とシャットダウンが完了するまで待ちます。 VM が停止するまで続行しないでください。 60 分を許可します。

  7. VM の割り当てを解除する

    az vm deallocate --resource-group <myResourceGroup> --name <MyVM>
    
  8. VM を汎用化済みとしてマークする

    az vm generalize --resource-group <myResourceGroup> --name <MyVM>
    
  9. 一般化されたイメージに基づいて VM イメージを作成します。 これらの手順を実行して既存のスケールセット イメージを更新する場合は、出力内のイメージ ID URL を書き留めます。

    az image create  --resource-group <myResourceGroup> --name <MyImage> --source <MyVM>
    
  10. カスタム VM イメージに基づいてスケール セットを作成する

    az vmss create --resource-group <myResourceGroup> --name <myScaleSet> --image <MyImage> --admin-username <myUsername> --admin-password <myPassword> --instance-count 2 --disable-overprovision --upgrade-policy-mode manual --load-balancer '""'
    
  11. スケール セットで作成された両方の VM がオンラインになり、異なる名前を持ち、成功した状態に達していることを確認します

これで、このスケール セットを使用してエージェント プールを作成する準備ができました。

新しいカスタム イメージを使用して既存のスケール セットを更新する

既存のスケール セットのイメージを更新するには、前の「 カスタム イメージ、ソフトウェア、またはディスク サイズを使用してスケール セットを作成 する」セクションの az image create 手順に従って、カスタム OS イメージを生成します。 コマンドから出力される ID プロパティ URL を書き az image create 留めます。 次の例に示すように、新しいイメージでスケール セットを更新します。 スケールセット イメージが更新されると、スケールセット内のすべての将来の VM が新しいイメージで作成されます。

az vmss update --resource-group <myResourceGroup> --name <myScaleSet> --set virtualMachineProfile.storageProfile.imageReference.id=<id url>

Supported Operating Systems

スケール セット エージェントは現在、Ubuntu Linux、Windows Server/DataCenter 2016/2019、および Windows 10 クライアントをサポートしています。

既知の問題

  • Debian または RedHat Linux はサポートされていません。 Ubuntu のみ。
  • Windows 10 クライアントでは、パイプライン エージェントをローカル ユーザーとして実行することはサポートされていないため、エージェントは UI と対話できません。 代わりに、エージェントはローカル サービスとして実行されます。

問題のトラブルシューティング

Azure DevOps Project設定に移動し、Pipelinesの [エージェント プール] を選択し、エージェント プールを選択します。 [診断] というラベルの付いたタブ をクリックします

[診断] タブには、Azure スケール セット内の VM を作成、削除、または再イメージ化するためにAzure DevOpsによって実行されたすべてのアクションが表示されます。 診断では、これらのアクションの実行中に発生したエラーもログに記録されます。 エラーを確認して、スケール セットにスケールアウトするのに十分なリソースがあることを確認します。Azure サブスクリプションが VM、CPU コア、ディスク、または IP アドレスのリソース制限に達した場合、これらのエラーがここに表示されます。

異常なエージェント

エージェントまたは仮想マシンの起動に失敗したり、Azure DevOpsに接続したり、予期せずオフラインになったりすると、Azure DevOpsエージェント プールの [診断] タブにエラーが記録され、関連する仮想マシンの削除が試みられます。 ネットワーク構成、イメージのカスタマイズ、保留中の再起動によって、これらの問題が発生する可能性があります。 VM に接続してログをデバッグして収集すると、調査に役立ちます。

異常なエージェント VM を調査用に保存し、異常な状態が検出されたときに自動的に削除されないようにAzure DevOpsする場合は、Azure DevOpsのProject設定に移動し、Pipelinesの下にあるエージェント プールを選択し、エージェント プールを選択します。 [設定] を選択し、[調査のために異常なエージェントを保存する] オプションを選択し、[保存] を選択します。

Save unhealthy agent setting.

これで、スケール セットで異常なエージェントが検出されると、Azure DevOpsはそのエージェントと関連付けられている仮想マシンを保存します。 保存されたエージェントは、エージェント プール UI の [ 診断 ] タブに表示されます。 Azure DevOps Project設定に移動し、[Pipelines] で [エージェント プール] を選択し、[エージェント プール] を選択し、[診断] を選択して、エージェント名を書き留めます。

Saved agents card.

[インスタンス] の一覧で、Azure portalを使用して、Azure 仮想マシン スケール セット内の関連する仮想マシンを検索します。

Azure portal virtual machine scale set instances.

インスタンスを選択し、Connectを選択して調査を実行します。

Connect to virtual machine instance.

調査が完了したら、保存したエージェントを削除するには、Azure DevOpsのProject設定に移動し、Pipelinesの下にあるエージェント プールを選択し、エージェント プールを選択します。 [診断] というラベルの付いたタブ を選択します。 調査用に 保存されたエージェント カードでエージェントを見つけて、[ 削除] を選択します。 これにより、プールからエージェントが削除され、関連付けられている仮想マシンが削除されます。

Saved agents card delete button.

よく寄せられる質問

Microsoft でホストされているエージェントに使用されるイメージはどこで見つかりますか?

ライセンスに関する考慮事項により、Microsoft がホストするイメージの配布が制限されます。 スケール セット エージェントで使用するために、これらのイメージを提供することはできません。 ただし、これらのイメージの生成に使用するスクリプトはオープンソース。 これらのスクリプトを自由に使用して、独自のカスタム イメージを作成できます。

UI テストを実行するようにスケール セット エージェントを構成操作方法?

Windows サーバー OS を使用してスケール セットを作成し、エージェント プールを作成するときに、[対話型テストを実行するように VM を構成する] オプションを選択します。

エージェントを削除するにはどうすればよいですか?

Azure DevOps Project設定に移動し、Pipelinesの [エージェント プール] を選択し、エージェント プールを選択します。 [エージェント] というラベルの付いたタブをクリック します。 [有効] トグル ボタンをクリックして、エージェントを無効にします。 無効になっているエージェントは、現在実行中のパイプラインを完了し、追加の作業を受け取りません。 現在のパイプライン ジョブが完了してから数分以内に、エージェントが削除されます。

スケール セット エージェント プールを構成して、スタンバイ状態のエージェントを 0 にすることはできますか?

はい。スタンバイ状態を維持するエージェントの数を 0 に設定した場合 (たとえば、少量のジョブのコストを節約するため)、ジョブがある場合にのみ VM を起動Azure Pipelines。

スケール セット エージェントのコストはどれくらいですか?

スケール セット エージェントの価格は、他のセルフホステッド エージェントと似ています。 エージェント ソフトウェアとジョブを実行するインフラストラクチャを提供し、並列ジョブを購入することで同時に実行できる必要な数のジョブに対して支払います。

スケール セット エージェントの場合、エージェント ソフトウェアとジョブを実行するインフラストラクチャは Azure Virtual Machine Scale Setsであり、価格についてはVirtual Machine Scale Sets価格で説明されています。

並列ジョブの購入については、「並列ジョブ の構成と支払い」を参照してください。