Freigeben über


Hinzufügen von Artefakten zu DevTest Labs-VMs

In diesem Artikel wird beschrieben, wie Sie Artefakte zu Azure DevTest Labs-VMs hinzufügen. Artefakte geben Aktionen an, die für die Bereitstellung einer VM erforderlich sind, z. B. das Ausführen von Windows PowerShell-Skripts, das Ausführen von Bash-Befehlen oder die Installation von Software. Mithilfe von Parametern können Sie die Artefakte an Ihre eigenen Bedürfnisse anpassen.

Diese Artefakte können entweder aus dem öffentlichen Git-Repository für DevTest Labs oder aus privaten Git-Repositorys stammen. Informationen zum Erstellen benutzerdefinierter Artefakte und zum Speichern dieser Artefakte in einem Repository finden Sie unter Erstellen von benutzerdefinierten Artefakten. Informationen zum Hinzufügen Ihres Artefaktrepositorys zu einem Lab, damit Lab-Benutzer auf die benutzerdefinierten Artefakte zugreifen können, finden Sie unter Hinzufügen eines Artefaktrepositorys zu Ihrem Lab.

Besitzer von DevTest Labs-Labs können obligatorische Artefakte angeben, die bei der Erstellung auf allen Lab-VMs installiert werden sollen. Weitere Informationen finden Sie unter Festlegen verbindlicher Artefakte für Ihr Lab in Azure DevTest Labs.

Sie können obligatorische Artefakte zum Zeitpunkt der VM-Erstellung nicht ändern oder entfernen, aber Sie können beliebige der verfügbaren einzelnen Artefakte hinzufügen. In diesem Artikel wird beschrieben, wie Sie VMs mithilfe der Azure-Portal oder über Azure PowerShell verfügbare Artefakte hinzufügen.

Hinzufügen von Artefakten zu VMs über das Azure-Portal

Sie können Artefakte während der VM-Erstellung hinzufügen oder Artefakte zu vorhandenen Lab-VMs hinzufügen.

So fügen Sie Artefakte während der VM-Erstellung hinzu

  1. Wählen Sie auf der Startseite Ihres Labs Hinzufügen aus.

  2. Wählen Sie auf der Seite Basis auswählen den VM-Typ aus, den Sie verwenden möchten.

  3. Wählen Sie auf dem Bildschirm Labressource erstellen die Option Artefakte hinzufügen oder entfernen aus.

  4. Wählen Sie auf der Seite Artefakte hinzufügen den Pfeil neben jedem Artefakt aus, das Sie der VM hinzufügen möchten.

  5. Geben Sie in jedem Bereich Artefakt hinzufügen alle erforderlichen und optionalen Parameterwerte ein, und klicken Sie dann auf OK. Das Artefakt wird unter Ausgewählte Artefakte angezeigt, und die Anzahl der konfigurierten Artefakte wird aktualisiert.

    Screenshot: Hinzufügen von Artefakten auf dem Bildschirm „Artefakte hinzufügen“

  6. Sie können die Artefakte ändern, nachdem Sie sie hinzugefügt haben.

    • Standardmäßig werden Artefakte in der Reihenfolge installiert, in der Sie sie hinzufügen. Klicken Sie zum Neuanordnen der Reihenfolge auf die Auslassungspunkte ... neben dem Artefakt in der Liste Ausgewählte Artefakte, und wählen Sie Nach oben, Nach unten, Nach oben verschieben oder Nach unten verschieben aus.
    • Um die Parameter des Artefakts zu bearbeiten, wählen Sie Bearbeiten aus, um erneut das Fenster Artefakt hinzufügen zu öffnen.
    • Um das Artefakt aus der Liste Ausgewählte Artefakte zu löschen, wählen Sie Löschen aus.
  7. Klicken Sie nach dem Hinzufügen und Anordnen von Artefakten auf OK.

  8. Auf dem Bildschirm Labressource erstellen wird die Anzahl der hinzugefügten Artefakte angezeigt. Um Artefakte vor der VM-Erstellung hinzuzufügen, zu bearbeiten, neu anzuordnen oder zu löschen wählen Sie erneut Artefakte hinzufügen oder entfernen aus.

Nachdem Sie die VM erstellt haben, werden die installierten Artefakte auf der Seite Artefakte der VM angezeigt. Um Details zur Installation jedes Artefakts anzuzeigen, wählen Sie den Artefaktnamen aus.

So installieren Sie Artefakte auf einer vorhandenen VM

  1. Wählen Sie auf der Startseite für Ihr Lab in der Liste Meine virtuellen Computer die VM aus.

  2. Klicken Sie auf der VM-Seite in der oberen Menüleiste oder im linken Navigationsbereich auf Artefakte.

  3. Wählen Sie auf der Seite Artefakte die Option Artefakte anwenden aus.

    Screenshot: Bildschirm „Artefakte“ für eine vorhandene VM

  4. Wählen Sie auf der Seite Artefakte hinzufügen die Artefakte aus, und konfigurieren Sie sie wie bei einer neuen VM.

  5. Wenn Sie mit dem Hinzufügen von Artefakten fertig sind, klicken Sie auf Installieren. Die Artefakte werden sofort auf der VM installiert.

Hinzufügen von Artefakten zu VMs mithilfe von Azure PowerShell

Hinweis

Es wird empfohlen, das Azure Az PowerShell-Modul für die Interaktion mit Azure zu verwenden. Informationen zu den ersten Schritten finden Sie unter Installieren von Azure PowerShell. Informationen zum Migrieren zum Az PowerShell-Modul finden Sie unter Migrieren von Azure PowerShell von AzureRM zum Az-Modul.

Das folgende PowerShell-Skript wendet mithilfe des Cmdlets Invoke-AzResourceAction ein Artefakt auf eine VM an.

#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"
}

Nächste Schritte