DevTest Labs を Azure Pipelines に統合する

Azure DevTest Labs Tasks 拡張機能を使用して、Azure Pipelines の継続的インテグレーションと配信 (CI/CD) パイプラインに Azure DevTest Labs を統合することができます。 この拡張機能では、次を含むいくつかのタスクが Azure Pipelines にインストールされます。

  • 仮想マシン (VM) の作成
  • VM からカスタム イメージを作成する
  • VM を削除する

これらのタスクにより、たとえば "ゴールデン イメージ" VM をすばやくデプロイし、特定のテストを実行し、VM を削除することが簡単になります。

この記事では、Azure DevTest Labs Tasks を使用して、VM の作成とデプロイ、カスタム イメージの作成、および VM の削除のすべてを 1 つのリリース パイプラインとして実行する方法を示します。 通常、これらのタスクは、独自のビルド、テスト、およびデプロイ パイプラインで個別に実行します。

Azure DevTest Labs を使用する

Azure を利用するのが初めてであれば、 無料の Azure アカウントを作成してください

既に Azure をご利用中であれば、 DevTest Labs での最初のラボでの作業開始: Azure DevTest Labs の使用を数分で開始します

前提条件

  • Azure portal で、DevTest Labs ラボを作成するか、既存のものを使用します。

  • Azure DevOps Services 組織に登録またはサインインし、その組織にプロジェクトを作成するか、既存のプロジェクトを使用します。

  • Visual Studio Marketplace から Azure DevTest Labs Tasks の拡張機能をインストールします。

    1. Azure DevTest Labs タスクに移動します。
    2. [Get it free](無料で入手) を選択します。
    3. ドロップダウンから Azure DevOps Services 組織を選択し、[インストール] を選択します。

ラボ VM を構築するためのテンプレートを作成する

まず、必要に応じてラボ VM を作成する Azure Resource Manager (ARM) テンプレートを作成します。

  1. Azure portal のラボで、上部のメニュー バーから [追加] を選択します。
  2. [ベースの選択] 画面で、VM 用の Windows 基本イメージを選択します。
  3. [ラボ リソースの作成] 画面の [成果物] で、[成果物を追加または削除] を選択します。
  4. [成果物の追加] 画面で、winrm を検索し、[Configure WinRM](WinRM を構成する) の横にある矢印を選択します。
  5. [成果物の追加] 画面で、VM の完全修飾ドメイン名 (FQDN) を入力します。たとえば contosolab00000000000000.westus3.cloudapp.azure.com のようになります。 [OK] を選択してから、もう一度 [OK] を選択します。
  6. [詳細設定] タブを選択し、[IP アドレス][Public](パブリック) を選択します。

    Note

    共有 IP アドレスで WinRM 成果物を使用する場合は、外部ポートを WinRM ポートにマップするネットワーク アドレス変換 (NAT) 規則を追加する必要があります。 パブリック IP アドレスを使用して VM を作成する場合は、NAT 規則は不要です。 このチュートリアルでは、パブリック IP アドレスを使用して VM を作成します。

  7. [View ARM template](ARM テンプレートの表示) を選択します。
  8. テンプレート コードをコピーし、ローカルのソース管理ブランチに CreateVMTemplate.json という名前のファイルとして保存します。
  9. プロジェクトのソース管理システムにテンプレートをチェックインします。

詳細については、「Resource Manager テンプレートを使用する」を参照してください。

VM のプロパティを取得するスクリプトを作成する

次に、Azure File Copy (Azure ファイル コピー)PowerShell on Target Machines (ターゲット コンピューターでの PowerShell) などのタスク ステップでアプリを VM にデプロイするために使用する値を収集するスクリプトを作成します。 通常、これらのタスクを使用して、独自のアプリを Azure VM にデプロイします。 これらのタスクには、VM リソース グループ名、IP アドレス、FQDN などの値が必要です。

注意

Azure を操作するには、Azure Az PowerShell モジュールを使用することをお勧めします。 作業を開始するには、Azure PowerShell のインストールに関する記事を参照してください。 Az PowerShell モジュールに移行する方法については、「AzureRM から Az への Azure PowerShell の移行」を参照してください。

GetLabVMParams.ps1 などの名前で以下のスクリプトを保存し、プロジェクトのソース管理システムにチェックインします。

Param( [string] $labVmId)

$labVmComputeId = (Get-AzResource -Id $labVmId).Properties.ComputeId

# Get lab VM resource group name
$labVmRgName = (Get-AzResource -Id $labVmComputeId).ResourceGroupName

# Get the lab VM Name
$labVmName = (Get-AzResource -Id $labVmId).Name

# Get lab VM public IP address
$labVMIpAddress = (Get-AzPublicIpAddress -ResourceGroupName $labVmRgName -Name $labVmName).IpAddress

# Get lab VM FQDN
$labVMFqdn = (Get-AzPublicIpAddress -ResourceGroupName $labVmRgName -Name $labVmName).DnsSettings.Fqdn

# Set a variable labVmRgName to store the lab VM resource group name
Write-Host "##vso[task.setvariable variable=labVmRgName;]$labVmRgName"

# Set a variable labVMIpAddress to store the lab VM Ip address
Write-Host "##vso[task.setvariable variable=labVMIpAddress;]$labVMIpAddress"

# Set a variable labVMFqdn to store the lab VM FQDN name
Write-Host "##vso[task.setvariable variable=labVMFqdn;]$labVMFqdn"

Azure Pipelines にリリース パイプラインを作成する

次に、Azure Pipelines でリリース パイプラインを作成します。 パイプライン タスクでは、ARM テンプレートの作成時に VM に割り当てた値が使用されます。

  1. Azure DevOps Services プロジェクト ページの左側のナビゲーションで [パイプライン]>[リリース] を選択します。
  2. [新しいパイプライン] を選択します。
  3. [テンプレートの選択] ペインで [空のジョブ] を選びます。
  4. [ステージ] ペインを閉じます。
  5. [新しいリリース パイプライン] ページで、[変数] タブを選択します。
  6. [追加] を選択し、次の名前のペアを入力し、それぞれ追加した後に [追加] を選択します。
    • vmName: ARM テンプレートで割り当てた VM 名。
    • userName: VM にアクセスするユーザー名。
    • password: ユーザー名のパスワード。 ロック アイコンを選択し、パスワードを非表示にして保護します。

アーティファクトの追加

  1. 新しいリリース パイプライン ページの [パイプライン] タブで [成果物の追加] を選びます。
  2. [成果物の追加] ペイン[Azure リポジトリ] を選びます。
  3. [プロジェクト] 一覧で DevOps プロジェクトを選びます。
  4. [ソース (リポジトリ)] 一覧でソース リポジトリを選びます。
  5. [既定のブランチ] 一覧でチェックアウトするブランチを選びます。
  6. [追加] を選択します。

DevTest Labs VM の作成

次のステップでは、将来のデプロイに使用するゴールデン イメージ VM を作成します。 このステップでは、[Azure DevTest Labs Create VM](Azure DevTest Labs: VM の作成) タスクを使用します。

  1. 新しいリリース パイプライン ページの [パイプライン] タブで、[ステージ 1] のハイパーリンク テキスト を選択します。

  2. 左側のウィンドウで、[エージェント ジョブ] の横にあるプラス記号 + を選択します。

  3. 右側のウィンドウの [Add tasks](タスクの追加) で、[Azure DevTest Labs Create VM](Azure DevTest Labs: VM の作成) を探して選択し、[追加] を選択します。

  4. 左側のウィンドウで [Create Azure DevTest Labs VM](Azure DevTest Labs: VM の作成) を選択します。

  5. 右側のウィンドウのフォームに、次のとおりに入力します。

    • Azure RM サブスクリプション: ドロップダウン リストからサービス接続またはサブスクリプションを選択し、必要に応じて 承認 を選択します。

      Note

      Azure サブスクリプションへのさらに制限されたアクセス許可を持つ接続の作成方法については、Azure Resource Manager サービス エンドポイントに関するページを参照してください。

    • [ラボ]: DevTest Labs のラボ名を選択します。

    • 仮想マシン名: 仮想マシン名に指定した変数: $vmName

    • [テンプレート]: プロジェクト リポジトリにチェックインしたテンプレート ファイルを参照して選択します。

    • パラメーター ファイル: パラメーター ファイルをリポジトリにチェックインした場合は、参照して選びます。

    • [パラメーターのオーバーライド]: 「-newVMName '$(vmName)' -userName '$(userName)' -password '$(password)'」と入力します。

    • [出力変数] まで下がり、[参照名] に、作成したラボ VM ID の変数を入力します。 簡潔にするために、[参照名]に「vm」と入力します。 labVmId はこの変数の属性になり、後で $vm.labVmId として参照されます。 他の名前を使用する場合は、後続のタスクで必ず使用してください。

      ラボ VM ID は次の形式になります: /subscriptions/{subscription Id}/resourceGroups/{resource group Name}/providers/Microsoft.DevTestLab/labs/{lab name}/virtualMachines/{vmName}

DevTest Labs VM の詳細情報の収集

次に、パイプラインでは作成したスクリプトを実行して、DevTest Labs VM の詳細情報を収集します。

  1. リリース パイプラインの [タスク] タブで、[エージェント ジョブ] の横にあるプラス記号 + を選びます。
  2. 右側のウィンドウの [Add tasks](タスクの追加) で、[Azure PowerShell] を探して選択し、[追加] を選択します。
  3. 左側のウィンドウで、[Azure PowerShell スクリプト: FilePath] タスクを選択します。
  4. 右側のウィンドウのフォームに、次のとおりに入力します。
    • [Azure RM サブスクリプション]: サービス接続またはサブスクリプションを選択します。
    • [スクリプトの種類]: [スクリプト ファイル パス] を選択します。
    • [スクリプトのパス]: ソース コード リポジトリにチェックインした PowerShell スクリプトを参照して選択します。 組み込みのプロパティを使用して、パスを簡略化できます。次に例を示します$(System.DefaultWorkingDirectory/Scripts/GetLabVMParams.ps1
    • スクリプト引数: 値を -labVmId $(vm.labVmId) として入力します。

このスクリプトは、必要な値を収集し、それらをリリース パイプライン内の環境変数に格納して、以降のステップで参照できるようにします。

DevTest Labs VM からの VM イメージの作成

次のタスクでは、ラボで新しくデプロイされた VM のイメージを作成します。 このイメージを使用して、開発者タスクを実行したりテストを実行したりするために、必要に応じて VM のコピーを作成できます。

  1. リリース パイプラインの [タスク] タブで、[エージェント ジョブ] の横にあるプラス記号 + を選びます。
  2. [Add tasks](タスクの追加) で、[Azure DevTest Labs Create Custom Image](Azure DevTest Labs: カスタム イメージの作成) を選択し、[追加] を選択します。
  3. 左側のウィンドウで [Azure DevTest Labs Create Custom Image](Azure DevTest Labs: カスタム イメージの作成) タスクを選択します。
  4. 右側のウィンドウのフォームに、次のとおりに入力します。
    • [Azure RM サブスクリプション] で、サービス接続またはサブスクリプションを選択します。
    • [ラボ]: ラボを選択します。
    • [カスタム イメージ名]: カスタム イメージの名前を入力します。
    • [説明]: 適切なイメージを簡単に選択できるようにするための説明を必要に応じて入力します。
    • [Source Lab VM](ソース ラボ VM): ソースの labVmId。 値を $(vm.labVmId) として入力します。
    • [出力変数]: 必要に応じて、既定のカスタム イメージ ID 変数の名前を編集できます。

DevTest Labs VM へのアプリのデプロイ (省略可能)

アプリを新しい DevTest Labs VM にデプロイするタスクを追加できます。 DevTest Labs VM とカスタム イメージの作成を実験するだけで、アプリを展開しない場合は、この手順をスキップできます。

アプリをデプロイするために通常使用するタスクは、Azure File Copy (Azure ファイル コピー)PowerShell on Target Machines (ターゲット コンピューターでの PowerShell) です。 タスク パラメーターに必要な VM 情報は、リリース パイプライン内の labVmRgNamelabVMIpAddresslabVMFqdn という名前の 3 つの構成変数から見つけることができます。

VM の削除

最後のタスクは、ラボにデプロイした VM を削除することです。 通常は、開発者タスクの実行や、展開した VM で必要なテストを実行した後、VM を削除します。

  1. リリース パイプラインの [タスク] タブで、[エージェント ジョブ] の横にあるプラス記号 + を選びます。
  2. [Add tasks](タスクの追加) で、[Azure DevTest Labs Delete VM](Azure DevTest Labs: VM の削除) を選択し、[追加] を選択します。
  3. 次に示すようにタスクを構成します。
    • [Azure RM サブスクリプション] で、サービス接続またはサブスクリプションを選択します。
    • [ラボ]: ラボを選択します。
    • 仮想マシン: 値を $(vm.labVmId) として入力します。
    • [出力変数]: [参照名] の下で、labVmId 変数の既定の名前を変更した場合、それをここに入力します。 既定値は $(labVmId) です。

リリース パイプラインの保存

新しいリリース パイプラインを保存するには、次の手順を実行します。

  1. リリース パイプラインのページの上部にある [新しいリリース パイプライン] を選択し、パイプラインの新しい名前を入力します。
  2. 右上の [保存] を選択します。

リリースの作成と実行

新しいパイプラインを使用してリリースを作成および実行するには、次の手順を実行します。

  1. リリース パイプラインのページの右上にある [Create release](リリースの作成) を選択します。
  2. [成果物] で、最新のビルドを選択し、[作成] を選択します。

各リリース ステージで、Azure portal のラボのビューを更新して、VM の作成、イメージの作成、および VM の削除を表示します。

カスタム イメージを使用して、必要な場合にいつでも VM を作成できます。

次のステップ