アーティファクト リポジトリをラボに追加する

この記事では、Azure DevTest Labs 内のラボに "成果物" リポジトリを追加する方法について説明します。 成果物は、仮想マシン (VM) にインストールするツールまたはアプリケーションです。 成果物は、GitHub または Azure Repos Git リポジトリから読み込む JSON ファイルで定義します。

パブリック DevTest Labs GitHub 成果物リポジトリでは、Windows および Linux 用の多くの一般的な成果物が提供されます。 既定では、このパブリック リポジトリ内の成果物は DevTest Labs で入手できます。 成果物を VM に追加する方法の詳細については、「成果物を DevTest Labs VM に追加する」を参照してください。

パブリック成果物リポジトリで使用できないカスタム成果物を作成することもできます。 カスタム アーティファクトの作成の詳細については、カスタム アーティファクトの作成に関するページを参照してください。 カスタム成果物を独自の成果物リポジトリに追加し、そのリポジトリをラボに追加して、すべてのラボ ユーザーが成果物を使用できるようにすることができます。

この記事では、Azure portal、Azure Resource Management (ARM) テンプレート、または Azure PowerShell を使用して、成果物リポジトリをラボに追加する方法について説明します。 また、Azure PowerShell または Azure CLI スクリプトを使用して、成果物リポジトリのラボへの追加を自動化することもできます。

Note

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

前提条件

成果物リポジトリをラボに追加するには、成果物ファイルがある GitHub または Azure Repos リポジトリの Git HTTPS クローン URL と個人用アクセス トークンを知っている必要があります。

GitHub のクローン URL と個人用アクセス トークンを取得する

  1. 成果物がある GitHub リポジトリのホーム ページで、[コード] を選択し、[クローン] で、HTTPS URL をコピーします。
  2. GitHub の右上隅にあるプロファイル画像を選択し、[設定] を選択します。
  3. プロファイル ページの左側のメニューで、[開発者設定][個人用アクセス トークン] の順に選択します。
  4. [新しいトークンの生成] を選択します。
  5. [新しい個人用アクセス トークン] ページの[注意] の下に、トークンの説明を入力します (省略可能)。 すべての既定値をそのまま使用し、[トークンの生成] を選択します。
  6. 生成されたトークンを保存します。

Azure Repos のクローン URL と個人用アクセス トークンを取得する

  1. 成果物があるリポジトリのメイン ページで、[クローン] を選択します。 [リポジトリのクローン] ページで、クローン URL をコピーします。
  2. Azure DevOps ページの右上隅で、[ユーザー設定]>[個人用アクセス トークン] の順に選択します。
  3. [個人用アクセス トークン] ページで、[新しいトークン] を選択します。
  4. トークンの情報を入力し、スコープの [読み取り] を選択して、[作成] を選択します。
  5. Azure Repos では、トークンが保存されたり、再度表示されたりしないため、[成功] ページで、トークンを必ずコピーしてください。

Azure portal で成果物リポジトリをラボに追加する

  1. ラボの [概要] ページで、左側のナビゲーションから [構成とポリシー] を選択します。

  2. [構成とポリシー] ページで、左側のナビゲーションの [外部リソース] の下にある [リポジトリ] を選択します。

    [リポジトリ] ページで、パブリック成果物リポジトリが自動的に表示され、DevTest Labs パブリック GitHub リポジトリに接続されます。 このリポジトリがラボで有効になっていない場合は、[パブリック成果物リポジトリ] の横にあるチェックボックスをオンにし、上部のメニュー バーで[有効にする] を選択して有効にすることができます。

  3. 成果物リポジトリをラボに追加するには、上部のメニュー バーで [追加] を選択します。

    リポジトリの構成画面を示すスクリーンショット。

  4. [リポジトリ] ウィンドウで、次の情報を入力します。

    • 名前: ラボで使用するリポジトリ名。
    • Git クローン URL: GitHub または Azure Repos からの Git HTTPS クローン URL。
    • ブランチ (省略可能): 成果物の定義が含まれているブランチ。
    • 個人用アクセス トークン: GitHub または Azure Repos からの個人用アクセス トークン。
    • フォルダー パス: Git クローン URL に対して相対的な ARM テンプレート定義のフォルダー。 必ず、フォルダー パスの先頭にスラッシュを含めるようにしてください。
  5. [保存] を選択します。

    ラボへの新しい成果物リポジトリの追加を示すスクリーンショット。

これで、ラボの [リポジトリ] 一覧にリポジトリが表示されます。

ARM テンプレートを使用して成果物リポジトリを追加する

ARM テンプレートは、作成する Azure リソースを記述する JSON ファイルです。 ARM テンプレートの詳細については、「ARM テンプレートの構造と構文について」を参照してください。

次の ARM テンプレートは、成果物リポジトリをラボに追加します。 このテンプレートでは、ラボがまだ存在しない場合は作成されます。

ARM テンプレートを確認する

サンプル テンプレートでは、次の情報がパラメーターに収集されます。 一部のパラメーターには既定値がありますが、デプロイ コマンドでは、ラボ名、成果物リポジトリの URI、リポジトリの種類、リポジトリの個人用アクセス トークンを指定する必要があります。

  • ラボ名。
  • DevTest Labs 内での成果物リポジトリの表示名。 既定値は Team Repository です。
  • 成果物リポジトリの URI (前にコピーしたもの)。
  • 成果物が含まれているリポジトリ ブランチ。 既定値は main です。
  • 成果物が含まれているフォルダーの名前。 既定値は /Artifacts です。
  • リポジトリの種類。 許可されている値は、VsoGit (Azure Repos の場合)、または GitHub です。
  • リポジトリの個人用アクセス トークン (前にコピーしたもの)。
{

    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "labName": {
            "type": "string"
        },
        "artifactRepositoryDisplayName": {
            "type": "string",
            "defaultValue": "Team Repository"
        },
        "artifactRepoUri": {
            "type": "string"
        },
        "artifactRepoBranch": {
            "type": "string",
            "defaultValue": "main"
        },
        "artifactRepoFolder": {
            "type": "string",
            "defaultValue": "/Artifacts"
        },
        "artifactRepoType": {
            "type": "string",
            "allowedValues": ["VsoGit", "GitHub"]
        },
        "artifactRepoSecurityToken": {
            "type": "securestring"
        }
    },
    "variables": {
        "artifactRepositoryName": "[concat('Repo-', uniqueString(subscription().subscriptionId))]"
    },
    "resources": [{
            "apiVersion": "2016-05-15",
            "type": "Microsoft.DevTestLab/labs",
            "name": "[parameters('labName')]",
            "location": "[resourceGroup().location]",
            "resources": [
                {
                    "apiVersion": "2016-05-15",
                    "name": "[variables('artifactRepositoryName')]",
                    "type": "artifactSources",
                    "dependsOn": [
                        "[resourceId('Microsoft.DevTestLab/labs', parameters('labName'))]"
                    ],
                    "properties": {
                        "uri": "[parameters('artifactRepoUri')]",
                        "folderPath": "[parameters('artifactRepoFolder')]",
                        "branchRef": "[parameters('artifactRepoBranch')]",
                        "displayName": "[parameters('artifactRepositoryDisplayName')]",
                        "securityToken": "[parameters('artifactRepoSecurityToken')]",
                        "sourceType": "[parameters('artifactRepoType')]",
                        "status": "Enabled"
                    }
                }
            ]
        }
    ]
}

テンプレートのデプロイ

Azure リソースを作成または更新するために ARM テンプレートをデプロイするには、いくつかの方法があります。 詳細と手順については、次の記事を参照してください。

この例では、Azure PowerShell を使用してテンプレートをデプロイします。

Note

テンプレートをデプロイするコマンドレットはコンテキスト固有であるため、現在のテナントとサブスクリプションが使用されます。 コンテキストを変更する必要がある場合は、テンプレートをデプロイする前に、Set-AzContext を使用します

  1. New-AzResourceGroup を使用してリソース グループを作成します。 使用するリソース グループが既に存在する場合は、この手順を省略してください。

    New-AzResourceGroup -Name MyLabResourceGroup1 -Location westus
    
  2. New-AzResourceGroupDeployment を使用して、リソース グループへのデプロイを作成します。 同じリソース グループに対して複数のリソースをデプロイできます。 同じリソース グループに複数回デプロイする場合は、各デプロイ名が一意であることを確認します。

    New-AzResourceGroupDeployment `
        -Name MyLabResourceGroup-Deployment1 `
        -ResourceGroupName MyLabResourceGroup1 `
        -TemplateFile azuredeploy.json `
        -TemplateParameterFile azuredeploy.parameters.json
    

New-AzResourceGroupDeployment が正常に実行されると、出力には、プロビジョニング状態 (succeeded である必要があります) やテンプレートの出力などの重要な情報が表示されます。

Azure PowerShell を使用して成果物リポジトリを追加する

次の PowerShell スクリプトの例 (New-DevTestLabArtifactRepository.ps1) では、成果物リポジトリをラボに追加します。 完全なスクリプトには、いくつかの詳細メッセージとコメントが含まれます。


<#

.SYNOPSIS
This script creates a new custom repository and adds it to an existing DevTest Lab.

.PARAMETER LabName
The name of the lab.

.PARAMETER LabResourceGroupName
The name of the resource group that contains the lab.

.PARAMETER ArtifactRepositoryName
Name for the new artifact repository. The script creates a random name for the repository if not specified.

.PARAMETER ArtifactRepositoryDisplayName
Display name for the artifact repository.
This name appears in the list of artifact repositories for a lab.

.PARAMETER RepositoryUri
Uri to the artifact repository.

.PARAMETER RepositoryBranch
Branch that contains the artifact files. Defaults to 'main'.

.PARAMETER FolderPath
Folder that contains the artifact files. Defaults to '/Artifacts'

.PARAMETER PersonalAccessToken
Personal access token for the GitHub or Azure Repos repository.

.PARAMETER SourceType
Whether the artifact repository is a VSOGit (Azure Repos) or GitHub repository.

.EXAMPLE
Set-AzContext -SubscriptionId 11111111-1111-1111-1111-111111111111
.\New-DevTestLabArtifactRepository.ps1 -LabName "mydevtestlab" -LabResourceGroupName "mydtlrg" -ArtifactRepositoryName "MyTeam Repository" -RepositoryUri "https://github.com/<myteam>/<nameofrepo>.git" -PersonalAccessToken "1111...." -SourceType "GitHub"

.NOTES
The script uses the current Azure context. To set the context, use Set-AzContext.

#>


[CmdletBinding()]
Param(

    [Parameter(Mandatory=$true)]
    $LabName,

    [Parameter(Mandatory=$true)]
    $LabResourceGroupName,
    $ArtifactRepositoryName,
    $ArtifactRepositoryDisplayName  = 'Team Artifact Repository',

    [Parameter(Mandatory=$true)]
    $RepositoryUri,
    $RepositoryBranch = 'main',
    $FolderPath = '/Artifacts',

    [Parameter(Mandatory=$true)]
    $PersonalAccessToken ,

    [Parameter(Mandatory=$true)]
    [ValidateSet('VsoGit', 'GitHub')]
    $SourceType
)

# Set artifact repository internal name if not specified.

if ($ArtifactRepositoryName -eq $null){
    $ArtifactRepositoryName = "PrivateRepo" + (Get-Random -Maximum 999)
}

# Sign in to Azure.
Connect-AzAccount


#Get Lab Resource.
$LabResource = Get-AzResource -ResourceType 'Microsoft.DevTestLab/labs' -ResourceName $LabName -ResourceGroupName $LabResourceGroupName

Write-Verbose "Lab Name: $($LabResource.Name)"
Write-Verbose "Lab Resource Group Name: $($LabResource.ResourceGroupName)"
Write-Verbose "Lab Resource Location: $($LabResource.Location)"

Write-Verbose "Artifact Repository Internal Name: $ArtifactRepositoryName"

#Prepare properties object for the call to New-AzResource.
$propertiesObject = @{
    uri = $RepositoryUri;
    folderPath = $FolderPath;
    branchRef = $RepositoryBranch;
    displayName = $ArtifactRepositoryDisplayName;
    securityToken = $PersonalAccessToken;
    sourceType = $SourceType;
    status = 'Enabled'
}

Write-Verbose "Properties to be passed to New-AzResource:$($propertiesObject | Out-String)"

#Add resource to the current subscription.
$resourcetype = 'Microsoft.DevTestLab/labs/artifactSources'
$resourceName = $LabName + '/' + $ArtifactRepositoryName
Write-Verbose "Az ResourceType: $resourcetype"
Write-Verbose "Az ResourceName: $resourceName"

Write-Verbose "Creating artifact repository '$ArtifactRepositoryDisplayName'..."
$result = New-AzResource -Location $LabResource.Location -ResourceGroupName $LabResource.ResourceGroupName -properties $propertiesObject -ResourceType $resourcetype -ResourceName $resourceName -ApiVersion 2016-05-15 -Force

#Alternate implementation:
# Use resourceId rather than resourcetype and resourcename parameters.
# Using resourceId lets you specify the $SubscriptionId rather than using the
# subscription id of Get-AzContext.
#$resourceId = "/subscriptions/$SubscriptionId/resourceGroups/$($LabResource.ResourceGroupName)/providers/Microsoft.DevTestLab/labs/$LabName/artifactSources/$ArtifactRepositoryName"
#$result = New-AzResource -properties $propertiesObject -ResourceId $resourceId -ApiVersion 2016-05-15 -Force


# Check the result.
if ($result.Properties.ProvisioningState -eq "Succeeded") {
    Write-Verbose ("Successfully added artifact repository source '$ArtifactRepositoryDisplayName'")
}
else {
    Write-Error ("Error adding artifact repository source '$ArtifactRepositoryDisplayName'")
}

#Return the newly created resource to use in later scripts.
return $result

パラメーター

PowerShell スクリプトは次のパラメーターを受け取ります。

パラメーター 説明
LabName ラボの名前。
ArtifactRepositoryName 新しいアーティファクト リポジトリの名前。 リポジトリの名前が指定されていない場合、このスクリプトではランダムな名前が作成されます。
ArtifactRepositoryDisplayName ラボの成果物リポジトリの一覧に表示される表示名。
RepositoryUri 成果物リポジトリの URI (前にコピーしたもの)。
RepositoryBranch 成果物が含まれているリポジトリ ブランチ。 既定値は main です。
FolderPath 成果物が含まれているフォルダー。 既定値は /Artifacts です。
PersonalAccessToken リポジトリにアクセスするためのセキュリティ トークン (前にコピーしたもの)。
SourceType 成果物リポジトリが VSOGit (Azure Repos) リポジトリまたは GitHub リポジトリのどちらであるか。

リポジトリには、識別のための内部名が必要です。これは、Azure portal での表示名とは異なります。 内部名は、Azure portal の使用時には表示されませんが、Azure REST API または Azure PowerShell の使用時に表示されます。 デプロイ コマンドで指定しない場合、スクリプトによってランダムな名前が作成されます。

#Set artifact repository name, if not set by user
if ($ArtifactRepositoryName -eq $null){
    $ArtifactRepositoryName = "PrivateRepo" + (Get-Random -Maximum 999)
}

PowerShell コマンド

スクリプトでは、次の PowerShell コマンドが使用されます。

コマンド Notes
Get-AzResource ラボの場所など、ラボに関する詳細を取得します。 ラボと同じ場所および同じリソース グループに成果物リポジトリのソースを作成します。
New-AzResource Azure リソースを追加します。 アーティファクト リポジトリを追加するための特定のコマンドは存在しません。 このコマンドレットでは、作成するリソースの種類を知るために、ResourceIdまたは ResourceNameResourceType のいずれかのペアが必要です。 現在のスクリプトでは、ResourceNameResourceType のペアを使用します。

リソース名とリソースの種類の情報を見つけるのに有効な方法は、Azure REST API ブラウザーの Web サイトを使用することです。 DevTest Labs の [成果物ソース] に、DevTest Labs 成果物ソースを作成および管理するための REST API が表示されます。 現在のスクリプトでは、次のリソース ID を使用します。

https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DevTestLab/labs/{labName}/artifactsources/{name}

リソースの種類は、中かっこ内に示されている項目を除き、URI の providers の後に示されているすべてです。 リソース名は、中かっこ内に示されているすべてです。 複数の項目をリソース名に使用する場合は、各項目をスラッシュで区切ります。

$resourcetype = 'Microsoft.DevTestLab/labs/artifactSources'
$resourceName = $LabName + '/' + $ArtifactRepositoryName

PowerShell スクリプトの実行

LabNameLabResourceGroupNameArtifactRepositoryNameRepositoryUriPersonalAccessTokenSourceTypeの値の例を独自の値に置き換えて、PowerShell スクリプトを実行します。

Set-AzContext -SubscriptionId <Your Azure subscription ID>

.\New-DevTestLabArtifactRepository.ps1 -LabName "mydevtestlab" -LabResourceGroupName "mydtlrg" -ArtifactRepositoryName "myteamrepository" -RepositoryUri "https://github.com/myteam/myteamrepository.git" - "1111...." -SourceType "GitHub"

次の手順