Dodawanie artefaktów do maszyn wirtualnych usługi DevTest Labs

W tym artykule opisano sposób dodawania artefaktów do maszyn wirtualnych Azure DevTest Labs. Artefakty określają akcje do wykonania w celu aprowizacji maszyny wirtualnej, takie jak uruchamianie skryptów Windows PowerShell, uruchamianie poleceń powłoki Bash lub instalowanie oprogramowania. Możesz użyć parametrów, aby dostosować artefakty do własnych potrzeb.

Artefakty usługi DevTest Labs mogą pochodzić z publicznego repozytorium Git usługi DevTest Labs lub z prywatnych repozytoriów Git. Aby utworzyć własne artefakty niestandardowe i przechowywać je w repozytorium, zobacz Tworzenie artefaktów niestandardowych. Aby dodać repozytorium artefaktów do laboratorium, aby użytkownicy laboratorium mogli uzyskiwać dostęp do artefaktów niestandardowych, zobacz Dodawanie repozytorium artefaktów do laboratorium.

Właściciele laboratoriów usługi DevTest Labs mogą określić obowiązkowe artefakty do zainstalowania na wszystkich maszynach wirtualnych laboratorium podczas tworzenia. Aby uzyskać więcej informacji, zobacz Określanie obowiązkowych artefaktów dla maszyn wirtualnych usługi DevTest Labs.

Nie można zmieniać ani usuwać obowiązkowych artefaktów w czasie tworzenia maszyny wirtualnej, ale możesz dodać wszystkie dostępne poszczególne artefakty. W tym artykule opisano sposób dodawania dostępnych artefaktów do maszyn wirtualnych przy użyciu Azure Portal lub Azure PowerShell.

Dodawanie artefaktów do maszyn wirtualnych z Azure Portal

Artefakty można dodawać podczas tworzenia maszyny wirtualnej lub dodawać artefakty do istniejących maszyn wirtualnych laboratorium.

Aby dodać artefakty podczas tworzenia maszyny wirtualnej:

  1. Na stronie głównej laboratorium wybierz pozycję Dodaj.

  2. Na stronie Wybierz bazę wybierz odpowiedni typ maszyny wirtualnej.

  3. Na ekranie Tworzenie zasobu laboratorium wybierz pozycję Dodaj lub Usuń artefakty.

  4. Na stronie Dodawanie artefaktów wybierz strzałkę obok każdego artefaktu, który chcesz dodać do maszyny wirtualnej.

  5. W każdym okienku Dodawanie artefaktu wprowadź wymagane i opcjonalne wartości parametrów, a następnie wybierz przycisk OK. Artefakt jest wyświetlany w obszarze Wybrane artefakty i liczba skonfigurowanych aktualizacji artefaktów.

    Zrzut ekranu przedstawiający dodawanie artefaktów w okienku Dodawanie artefaktów.

  6. Artefakty można zmienić po dodaniu.

    • Domyślnie artefakty są instalowane w kolejności ich dodawania. Aby zmienić kolejność, wybierz wielokropek ... obok artefaktu na liście Wybrane artefakty , a następnie wybierz pozycję Przenieś w górę, Przenieś w dół, Przenieś w dół, Przenieś do góry lub Przenieś do dołu.
    • Aby edytować parametry artefaktu, wybierz pozycję Edytuj , aby ponownie otworzyć okienko Dodawanie artefaktu .
    • Aby usunąć artefakt z listy Wybrane artefakty , wybierz pozycję Usuń.
  7. Po zakończeniu dodawania i rozmieszczania artefaktów wybierz przycisk OK.

  8. Na ekranie Tworzenie zasobu laboratorium jest wyświetlana liczba dodanych artefaktów. Aby dodać, edytować, ponownie rozmieszczać lub usuwać artefakty przed utworzeniem maszyny wirtualnej, wybierz ponownie pozycję Dodaj lub Usuń artefakty .

Po utworzeniu maszyny wirtualnej zainstalowane artefakty są wyświetlane na stronie Artefakty maszyny wirtualnej. Aby wyświetlić szczegółowe informacje o instalacji każdego artefaktu, wybierz nazwę artefaktu.

Aby zainstalować artefakty na istniejącej maszynie wirtualnej:

  1. Na stronie głównej laboratorium wybierz maszynę wirtualną z listy Moje maszyny wirtualne .

  2. Na stronie maszyny wirtualnej wybierz pozycję Artefakty na górnym pasku menu lub lewym pasku nawigacyjnym.

  3. Na stronie Artefakty wybierz pozycję Zastosuj artefakty.

    Zrzut ekranu przedstawiający okienko Artefakty dla istniejącej maszyny wirtualnej.

  4. Na stronie Dodawanie artefaktów wybierz i skonfiguruj artefakty tak samo jak dla nowej maszyny wirtualnej.

  5. Po zakończeniu dodawania artefaktów wybierz pozycję Zainstaluj. Artefakty są instalowane natychmiast na maszynie wirtualnej.

Dodawanie artefaktów do maszyn wirtualnych przy użyciu Azure PowerShell

Uwaga

Do interakcji z platformą Azure zalecamy używanie modułu Azure Az w programie PowerShell. Zobacz Instalowanie programu Azure PowerShell, aby rozpocząć. Aby dowiedzieć się, jak przeprowadzić migrację do modułu Az PowerShell, zobacz Migracja programu Azure PowerShell z modułu AzureRM do modułu Az.

Poniższy skrypt programu PowerShell stosuje artefakt do maszyny wirtualnej przy użyciu polecenia cmdlet 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"
}

Następne kroki