この記事では、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 の移行」を参照してください。
Azure portal を使用してアーティファクト リポジトリを追加する
Azure Repos リポジトリまたは GitHub リポジトリから成果物リポジトリを追加できます。 認証するには、マネージド ID へのアクセス許可の割り当て、GitHub アプリ認証、または PAT の使用のいずれかを選択できます。 マネージド ID の詳細については、Azure リソースのマネージド ID とはを参照してください。
使用するリポジトリと認証の種類のタブを選択します。
- マネージド ID を持つ Azure Repos リポジトリ
- PAT を使用した Azure Repos リポジトリ
- GitHub リポジトリとデベロッパー センター アプリ
- PAT を使用した GitHub リポジトリ
成果物リポジトリを追加するには、次のタスクを実行します。
- マネージド ID に対して Azure Repos でアクセス許可を割り当てます。
- 成果物リポジトリを追加します。
マネージド ID に対して Azure Repos でアクセス許可を割り当てる
Azure Repos のリポジトリに対するアクセス許可をマネージド ID に付与する必要があります。
Azure DevOps 組織にサインインします。
Note
Azure DevOps 組織は、ラボが含まれている Azure サブスクリプションと同じディレクトリに存在する必要があります。
[組織の設定] を選択します。
[概要] ページで [ユーザー] を選択します。
[ユーザー] ページで、[ユーザーの追加] を選択します。
次の情報を入力または選択して [新しいユーザーの追加] を完了し、[追加] を選択します。
Name Value ユーザーまたはサービス プリンシパル ラボの名前を入力します。
システム割り当てマネージド ID を使用する場合は、マネージド アカウントのオブジェクト ID ではなく、ラボの名前を指定します。 ユーザー割り当てマネージド ID を使用する場合は、マネージド アカウントの名前を使用します。Access level Select Basic. プロジェクトへの追加 リポジトリを含むプロジェクトを選択します。 Azure DevOps グループ [プロジェクト閲覧者] を選択します。 メール招待状の送信 (ユーザーに対してのみ) チェックボックスをオフにします。
Azure portal で Azure DevOps 成果物リポジトリをラボに追加する
ラボの [概要 ] ページで、左側のウィンドウで [構成とポリシー ] を選択します。
[構成とポリシー] ページで、左側のウィンドウの [外部リソース] の下にある [リポジトリ] を選択します。
[リポジトリ] ページで、パブリック成果物リポジトリが自動的に表示され、DevTest Labs パブリック GitHub リポジトリに接続されます。 ラボでこのリポジトリが有効になっていない場合は、[ パブリック 成果物リポジトリ] の横にあるチェック ボックスをオンにし、ウィンドウの上部にある [有効にする ] を選択して有効にすることができます。
ラボにアーティファクト リポジトリを追加するには、ウィンドウの上部にある [ 追加 ] を選択します。
[リポジトリ] ウィンドウで、次の情報を入力します。
- 名前: ラボで使用するリポジトリ名。
- Git クローン URL: Azure Repos からの Git HTTPS クローン URL。
- ブランチ (省略可能): 成果物の定義が含まれているブランチ。
- フォルダー パス: Git クローン URL に対して相対的な ARM テンプレート定義のフォルダー。 必ず、フォルダー パスの先頭にスラッシュを含めるようにしてください。
- マネージド ID: 認証にマネージド ID を使用するには、このオプションを選択します。
Select Save.
これで、ラボの [リポジトリ] 一覧にリポジトリが表示されます。
ARM テンプレートを使用して成果物リポジトリを追加する
ARM テンプレートは、作成する Azure リソースを記述する JSON ファイルです。 ARM テンプレートの詳細については、「ARM テンプレートの構造と構文について」を参照してください。
次の ARM テンプレートは、成果物リポジトリをラボに追加します。 ラボがまだ存在しない場合は、テンプレートによって作成されます。
ARM テンプレートを確認する
サンプル テンプレートでは、次の情報がパラメーターに収集されます。 一部のパラメーターには既定値がありますが、デプロイ コマンドでは、ラボ名、成果物リポジトリの URI、リポジトリの種類、リポジトリの個人用アクセス トークンを指定する必要があります。
- Lab name.
- DevTest Labs 内での成果物リポジトリの表示名。 既定値は
Team Repositoryです。 - 成果物リポジトリの URI (前にコピーしたもの)。
- 成果物が含まれているリポジトリ ブランチ。 既定値は
mainです。 - 成果物が含まれているフォルダーの名前。 既定値は
/Artifactsです。 - Repository type. 許可されている値は、
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 テンプレートをデプロイするには、いくつかの方法があります。 詳細と手順については、次の記事を参照してください。
- ARM テンプレートと Azure PowerShell を使用したリソースのデプロイ
- ARM テンプレートと Azure CLI でリソースをデプロイする
- Azure portal で ARM テンプレートを使用してリソースをデプロイする
- ARM テンプレートと Resource Manager REST API を使用してリソースをデプロイする
この手順では、Azure PowerShell を使用してテンプレートをデプロイします。
Note
テンプレートをデプロイするコマンドレットはコンテキスト固有であるため、現在のテナントとサブスクリプションが使用されます。 コンテキストを変更する必要がある場合は、テンプレートをデプロイする前に Set-AzContext を使用します。
New-AzResourceGroup を使用してリソース グループを作成します。 使用するリソース グループが既に存在する場合は、この手順を省略してください。
New-AzResourceGroup -Name MyLabResourceGroup1 -Location westusNew-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 a name isn't 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 aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e
.\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 it's 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
# Alternative 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
Parameters
PowerShell スクリプトは次のパラメーターを受け取ります。
| Parameter | Description |
|---|---|
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 it's not set by user.
if ($ArtifactRepositoryName -eq $null){
$ArtifactRepositoryName = "PrivateRepo" + (Get-Random -Maximum 999)
}
PowerShell commands
スクリプトでは、次の PowerShell コマンドが使用されます。
| Command | Notes |
|---|---|
| Get-AzResource | ラボの場所など、ラボに関する詳細を取得します。 ラボと同じ場所および同じリソース グループに成果物リポジトリのソースを作成します。 |
| New-AzResource | Azure リソースを追加します。 アーティファクト リポジトリを追加するための特定のコマンドは存在しません。 このコマンドレットでは、作成するリソースの種類を知るために、ResourceIdまたは ResourceName と ResourceType のいずれかのペアが必要です。 上記のスクリプトでは、 ResourceName と ResourceType のペアが使用されています。 |
リソース名とリソースの種類の情報を見つけるのに有効な方法は、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}
リソースの種類は、中かっこ (providers) の項目を除き、URI に{}した後に一覧表示されるすべてのものです。 リソース名は、中かっこ内に示されているすべてです。 複数の項目をリソース名に使用する場合は、各項目をスラッシュで区切ります。
$resourcetype = 'Microsoft.DevTestLab/labs/artifactSources'
$resourceName = $LabName + '/' + $ArtifactRepositoryName
PowerShell スクリプトの実行
LabName、LabResourceGroupName、ArtifactRepositoryName、RepositoryUri、PersonalAccessToken、SourceTypeの値の例を独自の値に置き換えて、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"