Adicionar artefactos a VMs do DevTest Labs

Este artigo descreve como adicionar artefactos a máquinas virtuais (VMs) Azure DevTest Labs. Os artefactos especificam ações a tomar para aprovisionar uma VM, como executar Windows PowerShell scripts, executar comandos bash ou instalar software. Pode utilizar parâmetros para personalizar os artefactos para as suas próprias necessidades.

Os artefactos do DevTest Labs podem ser provenientes do repositório Git do DevTest Labs público ou de repositórios git privados. Para criar os seus próprios artefactos personalizados e armazená-los num repositório, veja Criar artefactos personalizados. Para adicionar o repositório de artefactos a um laboratório para que os utilizadores de laboratório possam aceder aos artefactos personalizados, consulte Adicionar um repositório de artefactos ao laboratório.

Os proprietários do laboratório DevTest Labs podem especificar artefactos obrigatórios a serem instalados em todas as VMs de laboratório durante a criação. Para obter mais informações, veja Especificar artefactos obrigatórios para VMs do DevTest Labs.

Não pode alterar ou remover artefactos obrigatórios na hora de criação da VM, mas pode adicionar quaisquer artefactos individuais disponíveis. Este artigo descreve como adicionar artefactos disponíveis a VMs com o portal do Azure ou Azure PowerShell.

Adicionar artefactos a VMs a partir do portal do Azure

Pode adicionar artefactos durante a criação da VM ou adicionar artefactos a VMs de laboratório existentes.

Para adicionar artefactos durante a criação da VM:

  1. Na home page do laboratório, selecione Adicionar.

  2. Na página Escolher uma base , selecione o tipo de VM que pretende.

  3. No ecrã Criar recurso de laboratório , selecione Adicionar ou Remover Artefactos.

  4. Na página Adicionar artefactos , selecione a seta junto a cada artefacto que pretende adicionar à VM.

  5. Em cada painel Adicionar artefacto , introduza os valores de parâmetro obrigatórios e opcionais e, em seguida, selecione OK. O artefacto é apresentado em Artefactos selecionados e o número de atualizações de artefactos configurados.

    Captura de ecrã que mostra a adição de artefactos no painel Adicionar artefactos.

  6. Pode alterar os artefactos depois de os adicionar.

    • Por predefinição, os artefactos são instalados pela ordem em que os adiciona. Para reorganizar a ordem, selecione as reticências ... junto ao artefacto na lista Artefactos selecionados e selecione Mover para cima, Mover para baixo, Mover para cima ou Mover para baixo.
    • Para editar os parâmetros do artefacto, selecione Editar para reabrir o painel Adicionar artefacto .
    • Para eliminar o artefacto da lista Artefactos selecionados , selecione Eliminar.
  7. Quando terminar de adicionar e organizar artefactos, selecione OK.

  8. O ecrã Criar recurso de laboratório mostra o número de artefactos adicionados. Para adicionar, editar, reorganizar ou eliminar os artefactos antes de criar a VM, selecione Adicionar ou Remover Artefactos novamente.

Depois de criar a VM, os artefactos instalados são apresentados na página Artefactos da VM. Para ver detalhes sobre a instalação de cada artefacto, selecione o nome do artefacto.

Para instalar artefactos numa VM existente:

  1. Na home page do laboratório, selecione a VM na lista As minhas máquinas virtuais .

  2. Na página VM, selecione Artefactos na barra de menus superior ou navegação à esquerda.

  3. Na página Artefactos , selecione Aplicar artefactos.

    Captura de ecrã a mostrar o painel Artefactos de um V M existente.

  4. Na página Adicionar artefactos , selecione e configure artefactos da mesma forma que para uma nova VM.

  5. Quando terminar de adicionar artefactos, selecione Instalar. Os artefactos são instalados na VM imediatamente.

Adicionar artefactos a VMs com Azure PowerShell

Nota

Recomendamos que utilize o módulo do Azure Az PowerShell para interagir com o Azure. Veja Instalar o Azure PowerShell para começar. Para saber como migrar para o módulo do Az PowerShell, veja Migrar o Azure PowerShell do AzureRM para o Az.

O seguinte script do PowerShell aplica um artefacto a uma VM com o 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"
}

Passos seguintes