Добавление артефактов в виртуальные машины DevTest Labs

В этой статье описано добавление артефактов в виртуальные машины Azure DevTest Labs. Артефакты указывают действия, предпринимаемые для подготовки виртуальной машины к работе, например выполнение сценариев Windows PowerShell, выполнение команд Bash или установка программного обеспечения. С помощью параметров можно настроить артефакты в соответствии с текущими целями.

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

Владельцы тестовой службы DevTest Labs могут указать обязательные артефакты, которые должны быть установлены на всех виртуальных машинах тестовой службы при их создании. Дополнительные сведения см. в разделе Указание обязательных артефактов для виртуальных машин DevTest Labs.

Нельзя изменить или удалить обязательные артефакты во время создания виртуальной машины, но можно добавить любые доступные отдельные артефакты. В этой статье описывается, как добавить доступные артефакты в виртуальные машины с помощью портал Azure или Azure PowerShell.

Добавление артефактов в виртуальные машины с портала Azure

Артефакты можно добавлять во время создания виртуальной машины, а также можно добавлять артефакты в существующие виртуальные машины тестовой службы.

Чтобы добавить артефакты во время создания виртуальной машины, выполните следующие действия:

  1. На домашней странице тестовой службы щелкните Добавить.

  2. На странице Выбор базы данных выберите тип виртуальной машины.

  3. На экране Создание ресурса тестовой службы выберите Добавить или удалить артефакты.

  4. На странице Добавление артефактов щелкните стрелку рядом с каждым артефактом, который необходимо добавить в виртуальную машину.

  5. На каждой панели Добавить артефакт введите необходимые и дополнительные значения параметров, а затем нажмите кнопку ОК. Артефакт и число настроенных обновлений артефактов отобразится в разделе Выбранные артефакты.

    Снимок экрана: добавление артефактов на панели Добавление артефактов.

  6. Артефакты можно изменять после их добавления.

    • По умолчанию артефакты устанавливаются в том порядке, в котором они добавляются. Чтобы изменить порядок артефактов, нажмите кнопку с многоточием ... рядом с артефактом в списке Выбранные артефакты и выберите Переместить вверх, Переместить вниз, Переместить в началоили Переместить в конец.
    • Чтобы изменить параметры артефакта, нажмите кнопку Изменить, чтобы снова открыть панель Добавить артефакт.
    • Чтобы удалить артефакт из списка Выбранные артефакты, выберите Удалить.
  7. Завершив добавление и упорядочение артефактов, нажмите кнопку ОК.

  8. На экране Создание ресурса тестовой службы отобразится число добавленных артефактов. Чтобы добавить, переупорядочить или удалить артефакты перед созданием виртуальной машины, снова выберите Добавить или удалить артефакты.

После создания виртуальной машины установленные артефакты отображаются на странице Артефакты виртуальной машины. Чтобы просмотреть сведения об установке каждого артефакта, выбирайте имена артефактов.

Чтобы установить артефакты на существующую виртуальную машину, выполните следующие действия:

  1. На домашней странице тестовой службы выберите виртуальную машину из списка Мои виртуальные машины.

  2. На странице виртуальной машины выберите Артефакты в верхней строке меню или в области навигации слева.

  3. На странице Артефакты выберите Применить артефакты.

    Снимок экрана: область артефактов для существующей виртуальной машины.

  4. На странице Добавление артефактов выберите и настройте артефакты так же, как для новой виртуальной машины.

  5. После добавления артефактов выберите Установить. Артефакты будут незамедлительно установлены на виртуальной машине.

Добавление артефактов в виртуальные машины с помощью Azure PowerShell

Примечание

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

Следующий сценарий PowerShell применяет артефакт к виртуальной машине с помощью командлета Invoke-AzResourceAction.

#Requires -Module Az.Resources

param
(
[Parameter(Mandatory=$true, HelpMessage="The ID of the subscription that contains the lab")]
   [string] $SubscriptionId,
[Parameter(Mandatory=$true, HelpMessage="The name of the lab that has the VM")]
   [string] $DevTestLabName,
[Parameter(Mandatory=$true, HelpMessage="The name of the VM")]
   [string] $VirtualMachineName,
[Parameter(Mandatory=$true, HelpMessage="The repository where the artifact is stored")]
   [string] $RepositoryName,
[Parameter(Mandatory=$true, HelpMessage="The artifact to apply to the VM")]
   [string] $ArtifactName,
[Parameter(ValueFromRemainingArguments=$true)]
   $Params
)

# Set the appropriate subscription
Set-AzContext -SubscriptionId $SubscriptionId | Out-Null
 
# Get the lab resource group name
$resourceGroupName = (Get-AzResource -ResourceType 'Microsoft.DevTestLab/labs' | Where-Object { $_.Name -eq $DevTestLabName}).ResourceGroupName
if ($resourceGroupName -eq $null) { throw "Unable to find lab $DevTestLabName in subscription $SubscriptionId." }

# Get the internal repository name
$repository = Get-AzResource -ResourceGroupName $resourceGroupName `
                    -ResourceType 'Microsoft.DevTestLab/labs/artifactsources' `
                    -ResourceName $DevTestLabName `
                    -ApiVersion 2016-05-15 `
                    | Where-Object { $RepositoryName -in ($_.Name, $_.Properties.displayName) } `
                    | Select-Object -First 1

if ($repository -eq $null) { "Unable to find repository $RepositoryName in lab $DevTestLabName." }

# Get the internal artifact name
$template = Get-AzResource -ResourceGroupName $resourceGroupName `
                -ResourceType "Microsoft.DevTestLab/labs/artifactSources/artifacts" `
                -ResourceName "$DevTestLabName/$($repository.Name)" `
                -ApiVersion 2016-05-15 `
                | Where-Object { $ArtifactName -in ($_.Name, $_.Properties.title) } `
                | Select-Object -First 1

if ($template -eq $null) { throw "Unable to find template $ArtifactName in lab $DevTestLabName." }

# Find the VM in Azure
$FullVMId = "/subscriptions/$SubscriptionId/resourceGroups/$resourceGroupName`
                /providers/Microsoft.DevTestLab/labs/$DevTestLabName/virtualmachines/$virtualMachineName"

$virtualMachine = Get-AzResource -ResourceId $FullVMId

# Generate the artifact id
$FullArtifactId = "/subscriptions/$SubscriptionId/resourceGroups/$resourceGroupName`
                        /providers/Microsoft.DevTestLab/labs/$DevTestLabName/artifactSources/$($repository.Name)`
                        /artifacts/$($template.Name)"

# Handle the input parameters to pass through
$artifactParameters = @()

# Fill the artifact parameter with the additional -param_ data and strip off the -param_
$Params | ForEach-Object {
   if ($_ -match '^-param_(.*)') {
      $name = $_ -replace '^-param_'
   } elseif ( $name ) {
      $artifactParameters += @{ "name" = "$name"; "value" = "$_" }
      $name = $null #reset name variable
   }
}

# Create a structure to pass the artifact data to the action

$prop = @{
artifacts = @(
    @{
        artifactId = $FullArtifactId
        parameters = $artifactParameters
    }
    )
}

# Apply the artifact
if ($virtualMachine -ne $null) {
   # Apply the artifact by name to the virtual machine
   $status = Invoke-AzResourceAction -Parameters $prop -ResourceId $virtualMachine.ResourceId -Action "applyArtifacts" -ApiVersion 2016-05-15 -Force
   if ($status.Status -eq 'Succeeded') {
      Write-Output "##[section] Successfully applied artifact: $ArtifactName to $VirtualMachineName"
   } else {
      Write-Error "##[error]Failed to apply artifact: $ArtifactName to $VirtualMachineName"
   }
} else {
   Write-Error "##[error]$VirtualMachine was not found in the DevTest Lab, unable to apply the artifact"
}

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