Добавление репозитория артефактов в лабораторию

В этой статье рассказывается, как добавить репозиторий артефактов в лабораторию Azure DevTest Labs. Артефакты — это средства или приложения для установки на виртуальных машинах. Они определяются в JSON-файле, загружаемом из репозитория Git в GitHub или Azure Repos.

Общедоступный репозиторий артефактов GitHub в DevTest Labs предоставляет множество стандартных артефактов для Windows и Linux. Артефакты в этом общедоступном репозитории доступны по умолчанию в DevTest Labs. Сведения о добавлении артефактов на виртуальные машины см. в статье Добавление артефактов в виртуальные машины DevTest Labs.

Вы также можете создавать пользовательские артефакты, которые недоступны в общедоступном репозитории артефактов. Дополнительные сведения о создании пользовательских артефактов см. в статье Создание пользовательских артефактов. Вы можете добавить пользовательские артефакты в собственный репозиторий артефактов, а затем добавить этот репозиторий в лабораторию, чтобы все ее пользователи могли работать с этими артефактами.

В этой статье показано, как добавить репозиторий артефактов в лабораторию с помощью портала Azure, шаблона Azure Resource Manager (ARM) или Azure PowerShell. Можно также использовать скрипт Azure PowerShell или Azure CLI для автоматизации добавления репозитория артефактов в лабораторию.

Примечание

Для взаимодействия с Azure рекомендуется использовать модуль Azure Az PowerShell. Чтобы начать работу, см. статью Установка Azure PowerShell. Дополнительные сведения см. в статье Перенос Azure PowerShell с AzureRM на Az.

Предварительные требования

Чтобы добавить репозиторий артефактов в лабораторию, необходимо знать URL-адрес клона HTTPS Git и личный маркер доступа для репозитория GitHub или Azure Repos, в котором содержатся файлы артефактов.

Получение URL-адреса клона и личного маркера доступа для GitHub

  1. На домашней странице репозитория GitHub, в котором находятся артефакты, нажмите кнопку Code (Код), а затем в разделе Clone (Клон) скопируйте URL-адрес HTTPS.
  2. В правом верхнем углу GitHub выберите изображение профиля и щелкните Settings (Параметры).
  3. На странице профиля в меню слева выберите пункт Developer Settings (Параметры разработчика), а затем выберите Personal access tokens (Личные маркеры доступа).
  4. Выберите Создать новый маркер.
  5. На странице New personal access token (Новый личный маркер доступа) в разделе Note (Примечание) введите необязательное описание маркера. Примите все значения по умолчанию, а затем нажмите Generate token (Создать маркер).
  6. Сохраните созданный маркер —

Получение URL-адреса клона и личного маркера доступа для Azure Repos

  1. На главной странице репозитория, в котором находятся артефакты, выберите Клон. На странице Клонирование репозитория скопируйте URL-адрес клона.
  2. В правом верхнем углу страницы Azure DevOps выберите Параметры пользователя>Личные маркеры доступа.
  3. На странице Личные маркеры доступа выберите Новый маркер.
  4. Заполните сведения о маркере, выбрав Чтение для областей, и нажмите кнопку Создать.
  5. На странице Успех скопируйте маркер, так как он не сохраняется и больше не отображается в Azure Repos.

Добавление репозитория артефактов в лабораторию на портале Azure

  1. На странице обзора задания в области навигации слева выберите Конфигурация и политики.

  2. На странице Конфигурация и политики в области навигации слева выберите Репозитории в разделе Внешние ресурсы.

    На странице Репозиторииобщедоступный репозиторий артефактов появляется автоматически и подключается к общедоступному репозиторию GitHub DevTest Labs. Если этот репозиторий не включен для лаборатории, его можно включить, установив флажок Общедоступный репозиторий артефактов, а затем нажав Включить в верхней строке меню.

  3. Чтобы добавить репозиторий артефактов в лабораторию, нажмите Добавить в верхней строке меню.

    Снимок экрана: экран конфигурации репозиториев.

  4. В области Репозитории введите следующие сведения:

    • Имя: имя репозитория для использования в лаборатории.
    • URL-адрес клона Git: URL-адрес клона HTTPS Git из GitHub или Azure Repos.
    • Ветвь (необязательно): ветвь, в которой находятся определения артефактов.
    • Личный маркер доступа: личный маркер доступа из GitHub или Azure Repos.
    • Пути к папке: папка для определений шаблонов ARM относительно URL-адреса клона Git. Обязательно добавьте косую черту в начале пути к папке.
  5. Щелкните Сохранить.

    Снимок экрана: добавление нового репозитория артефактов в лабораторию.

Репозиторий теперь отображается в списке Репозитории для задания.

Добавление репозитория артефактов с помощью шаблона ARM

Шаблоны ARM — это файлы JSON, описывающие создаваемые ресурсы Azure. Дополнительные сведения о шаблонах 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"
                    }
                }
            ]
        }
    ]
}

Развертывание шаблона

Существует несколько способов развертывания шаблонов ARM для создания или обновления ресурсов Azure. Сведения и инструкции см. в следующих статьях:

Для этого примера разверните шаблон с помощью Azure PowerShell.

Примечание

Командлеты, которые развертывают шаблон, зависят от контекста, поэтому они используют текущий клиент и подписку. Если необходимо изменить контекст, используйте 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. Вы не видите внутреннее имя на портале Azure, но видите его при использовании интерфейсов REST API Azure или Azure PowerShell. Скрипт создает случайное имя, если оно не указано в команде развертывания.

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

Команды PowerShell

В этом скрипте используются следующие команды PowerShell:

Get-Help Примечания
Get-AzResource Получает сведения о лаборатории, например ее расположение. Вы создаете источник репозитория артефактов в том же расположении и в той же группе ресурсов, что и лаборатория.
New-AzResource Добавляет ресурс Azure. Специальной команды для добавления репозиториев артефактов нет. Для этого командлета требуется пара ResourceId или ResourceName и ResourceType, чтобы получить сведения о типе создаваемого ресурса. В текущем скрипте используется пара ResourceName и ResourceType.

Легко найти сведения об имени и типе ресурса можно на веб-сайте обозревателя REST API Azure. Источники артефактов DevTest Labs показывают интерфейсы REST API для создания источников артефактов DevTest Labs и управления ими. В текущем скрипте используется следующий идентификатор ресурса:

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

Запустите скрипт PowerShell, подставив собственные значения вместо примеров значений для LabName, LabResourceGroupName, ArtifactRepositoryName, RepositoryUri, PersonalAccessToken и SourceType:

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"

Дальнейшие действия