アーティファクト リポジトリをラボに追加する
この記事では、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 Repos リポジトリまたは GitHub リポジトリから成果物リポジトリを追加できます。 認証するには、マネージド ID へのアクセス許可の割り当て、GitHub アプリ認証、または PAT の使用のいずれかを選択できます。 マネージド ID の詳細については、「Azure リソースのマネージド ID とは?」を参照してください
使うリポジトリと認証の種類のタブを選びます。
- MSI を使用した Azure Repos リポジトリ
- PAT を使用した Azure Repos リポジトリ
- GitHub リポジトリ DevCenter アプリ
- PAT を使用した GitHub リポジトリ
成果物リポジトリを追加するには、次のタスクを実行します。
- マネージド ID に対して Azure Repos でアクセス許可を割り当てます。
- 成果物リポジトリを追加します。
マネージド ID に対して Azure Repos でアクセス許可を割り当てる
Azure Repos のリポジトリに対するアクセス許可をマネージド ID に付与する必要があります。
Azure DevOps 組織にサインインします。
Note
Azure DevOps 組織は、ラボが含まれている Azure サブスクリプションと同じディレクトリに存在する必要があります。
[組織の設定] を選択します。
[概要] ページで [ユーザー] を選択します。
[ユーザー] ページで、[ユーザーの追加] を選択します。
次の情報を入力または選択して [新しいユーザーの追加] を完了し、[追加] を選択します。
名前 値 ユーザーまたはサービス プリンシパル ラボの名前を入力します。
システム割り当て MSI を使用する場合は、マネージド アカウントのオブジェクト ID ではなく、ラボの名前を指定します。 ユーザー割り当て MSI を使用する場合は、マネージド アカウントの名前を使用します。アクセス レベル [Basic] を選択します。 プロジェクトへの追加 リポジトリを含むプロジェクトを選択します。 Azure DevOps グループ [プロジェクト閲覧者] を選択します。 メール招待状の送信 (ユーザーに対してのみ) チェックボックスをオフにします。
Azure portal で Azure DevOps 成果物リポジトリをラボに追加する
ラボの [概要] ページで、左側のナビゲーションから [構成とポリシー] を選択します。
[構成とポリシー] ページで、左側のナビゲーションの [外部リソース] の下にある [リポジトリ] を選択します。
[リポジトリ] ページで、パブリック成果物リポジトリが自動的に表示され、DevTest Labs パブリック GitHub リポジトリに接続されます。 このリポジトリがラボで有効になっていない場合は、[パブリック成果物リポジトリ] の横にあるチェックボックスをオンにし、上部のメニュー バーで[有効にする] を選択して有効にすることができます。
成果物リポジトリをラボに追加するには、上部のメニュー バーで [追加] を選択します。
[リポジトリ] ウィンドウで、次の情報を入力します。
- 名前: ラボで使用するリポジトリ名。
- Git クローン URL: Azure Repos からの Git HTTPS クローン URL。
- ブランチ (省略可能): 成果物の定義が含まれているブランチ。
- フォルダー パス: Git クローン URL に対して相対的な ARM テンプレート定義のフォルダー。 必ず、フォルダー パスの先頭にスラッシュを含めるようにしてください。
- マネージド ID: 認証にマネージド ID を利用するには、このオプションを使用します。
[保存] を選択します。
これで、ラボの [リポジトリ] 一覧にリポジトリが表示されます。
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 テンプレートをデプロイするには、いくつかの方法があります。 詳細と手順については、次の記事を参照してください。
- 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 westus
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 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 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 または 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}
リソースの種類は、中かっこ内に示されている項目を除き、URI の providers
の後に示されているすべてです。 リソース名は、中かっこ内に示されているすべてです。 複数の項目をリソース名に使用する場合は、各項目をスラッシュで区切ります。
$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"