Dodawanie artefaktów do maszyn wirtualnych usługi DevTest Labs
W tym artykule opisano sposób dodawania artefaktów do maszyn wirtualnych usługi Azure DevTest Labs. Artefakty określają akcje do wykonania w celu aprowizacji maszyny wirtualnej, takie jak uruchamianie skryptów programu 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 uzyskać dostęp do niestandardowych artefaktów, 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 zmienić ani usunąć obowiązkowych artefaktów w czasie tworzenia maszyny wirtualnej, ale możesz dodać dowolne dostępne pojedyncze artefakty. W tym artykule opisano sposób dodawania dostępnych artefaktów do maszyn wirtualnych przy użyciu witryny Azure Portal lub programu Azure PowerShell.
Dodawanie artefaktów do maszyn wirtualnych z witryny 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:
Na stronie głównej laboratorium wybierz pozycję Dodaj.
Na stronie Wybieranie podstawy wybierz odpowiedni typ maszyny wirtualnej.
Na ekranie Tworzenie zasobu laboratorium wybierz pozycję Dodaj lub Usuń artefakty.
Na stronie Dodawanie artefaktów wybierz strzałkę obok każdego artefaktu, który chcesz dodać do maszyny wirtualnej.
W każdym okienku Dodawanie artefaktu wprowadź wymagane i opcjonalne wartości parametrów , a następnie wybierz przycisk OK. Artefakt zostanie wyświetlony w obszarze Wybrane artefakty i liczba skonfigurowanych aktualizacji artefaktów.
Artefakty można zmienić po dodaniu.
- Domyślnie artefakty są instalowane w kolejności dodawania ich. 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ń.
Po zakończeniu dodawania i rozmieszczania artefaktów wybierz przycisk OK.
Na ekranie Tworzenie zasobu laboratorium jest wyświetlana liczba dodanych artefaktów. Aby dodać, edytować, zmienić kolejność lub usunąć artefakty przed utworzeniem maszyny wirtualnej, ponownie wybierz 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:
Na stronie głównej laboratorium wybierz maszynę wirtualną z listy Moje maszyny wirtualne.
Na stronie Maszyny wirtualnej wybierz pozycję Artefakty na górnym pasku menu lub lewym pasku nawigacyjnym.
Na stronie Artefakty wybierz pozycję Zastosuj artefakty.
Na stronie Dodawanie artefaktów wybierz i skonfiguruj artefakty tak samo jak dla nowej maszyny wirtualnej.
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 programu Azure PowerShell
Uwaga
Do interakcji z platformą Azure zalecamy używanie modułu Azure Az w programie PowerShell. Aby rozpocząć, zobacz Instalowanie programu Azure PowerShell. 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"
}