次の方法で共有


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

この記事では、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 とは?」を参照してください

使うリポジトリと認証の種類のタブを選びます。

成果物リポジトリを追加するには、次のタスクを実行します。

  • マネージド ID に対して Azure Repos でアクセス許可を割り当てます。
  • 成果物リポジトリを追加します。

マネージド ID に対して Azure Repos でアクセス許可を割り当てる

Azure Repos のリポジトリに対するアクセス許可をマネージド ID に付与する必要があります。

  1. Azure DevOps 組織にサインインします。

    Note

    Azure DevOps 組織は、ラボが含まれている Azure サブスクリプションと同じディレクトリに存在する必要があります。

  2. [組織の設定] を選択します

    [組織の設定] が強調表示されている Azure DevOps 組織のページを示すスクリーンショット。

  3. [概要] ページで [ユーザー] を選択します。

    [ユーザー] が強調表示されている組織の概要ページを示すスクリーンショット。

  4. [ユーザー] ページで、[ユーザーの追加] を選択します。

    [ユーザー] ページを示すスクリーンショット。[ユーザーの追加] が強調表示されています。

  5. 次の情報を入力または選択して [新しいユーザーの追加] を完了し、[追加] を選択します。

    名前
    ユーザーまたはサービス プリンシパル ラボの名前を入力します。
    システム割り当て MSI を使用する場合は、マネージド アカウントのオブジェクト ID ではなく、ラボの名前を指定します。 ユーザー割り当て MSI を使用する場合は、マネージド アカウントの名前を使用します。
    アクセス レベル [Basic] を選択します。
    プロジェクトへの追加 リポジトリを含むプロジェクトを選択します。
    Azure DevOps グループ [プロジェクト閲覧者] を選択します。
    メール招待状の送信 (ユーザーに対してのみ) チェックボックスをオフにします。

    [ユーザーの追加] のエントリの例を示すスクリーンショット。[追加] が強調表示されています。

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

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

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

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

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

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

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

    • 名前: ラボで使用するリポジトリ名。
    • Git クローン URL: Azure Repos からの Git HTTPS クローン URL。
    • ブランチ (省略可能): 成果物の定義が含まれているブランチ。
    • フォルダー パス: Git クローン URL に対して相対的な ARM テンプレート定義のフォルダー。 必ず、フォルダー パスの先頭にスラッシュを含めるようにしてください。
    • マネージド ID: 認証にマネージド ID を利用するには、このオプションを使用します。
  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 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または 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"

次の手順