Tarefa DevOps do serviço Azure VM Image Builder (visualização)

Aplica-se a: ✔️ Linux VMs ✔️ Conjuntos de escala flexível

Neste artigo, você aprenderá a usar uma tarefa do Azure DevOps para injetar artefatos de compilação em uma imagem de máquina virtual (VM), para que possa instalar e configurar seu aplicativo e sistema operacional.

Importante

A tarefa do Azure DevOps para o Construtor de Imagens de VM está atualmente em pré-visualização. Veja Termos de Utilização Complementares da Pré-visualizações do Microsoft Azure para obter os termos legais que se aplicam às funcionalidades do Azure que estão na versão beta, na pré-visualização ou que ainda não foram lançadas para disponibilidade geral.

Versões de tarefas de DevOps

No momento, há duas tarefas de DevOps do Construtor de Imagens de VM do Azure:

Pré-requisitos

Nota

Atualmente, a tarefa do Construtor de Imagens de VM não suporta a Inicialização do Windows ou a execução de comandos elevados como Administrador. Ou seja, a tarefa não é adequada para cenários de Área de Trabalho Virtual do Azure ou personalizações do Windows que exigem esses recursos. Para usar o DevOps com o Construtor de Imagens de VM, aninhar o modelo em uma tarefa do Azure Resource Manager e usar tarefas da CLI ou do PowerShell do Azure.

Antes de começar, deve:

  • Instale a tarefa DevOps estável do Visual Studio Marketplace.

  • Tenha uma conta do Azure DevOps Services (anteriormente Visual Studio Team Services ou VSTS) e um Pipeline de Compilação criado.

  • Registre e habilite os requisitos de recurso do Construtor de Imagens de VM na assinatura usada pelos pipelines:

  • Crie uma conta de armazenamento padrão do Azure no grupo de recursos de imagem de origem. Você pode usar outros grupos de recursos ou contas de armazenamento. A conta de armazenamento é usada para transferir os artefatos de compilação da tarefa DevOps para a imagem.

    # Azure PowerShell
    $timeInt=$(get-date -UFormat "%s")
    $storageAccName="aibstorage"+$timeInt
    $location=westus
    # Create a storage account and blob in the resource group
    New-AzStorageAccount -ResourceGroupName $strResourceGroup -Name $storageAccName -Location $location -SkuName Standard_LRS
    
    # The Azure CLI
    location=westus
    scriptStorageAcc=aibstordot$(date +'%s')
    # Create a storage account and blob in the resource group
    az storage account create -n $scriptStorageAcc -g $strResourceGroup -l $location --sku Standard_LRS
    

Adicionar uma tarefa ao pipeline de liberação

  1. Selecione Release Pipeline>Edit.

  2. No User Agent, selecione o sinal de adição (+) para adicionar e procure Image Builder.

  3. Selecione Adicionar.

Nas seções a seguir, defina as propriedades da tarefa.

Subscrição do Azure

Na lista suspensa, selecione a assinatura que você deseja que o Construtor de Imagens de VM execute. Use a assinatura onde suas imagens de origem são armazenadas e as imagens devem ser distribuídas. Você precisa conceder ao contribuidor do Construtor de Imagens de VM acesso à assinatura ou ao grupo de recursos.

Grupo de recursos

Use o grupo de recursos onde o artefato de modelo de imagem temporário será armazenado. Quando você cria um artefato de modelo, outro grupo de recursos temporário do Construtor de Imagens de VM, IT_<DestinationResourceGroup>_<TemplateName>_guid, é criado. O grupo de recursos temporários armazena os metadados da imagem, como scripts. No final da tarefa, o artefato de modelo de imagem e o grupo de recursos temporário do Construtor de Imagens da VM são excluídos.

Location

O local é a região onde o VM Image Builder será executado. Apenas um número definido de regiões é suportado. As imagens de origem devem estar presentes neste local. Por exemplo, se você estiver usando a Galeria de Computação do Azure (anteriormente Galeria de Imagens Compartilhadas), uma réplica deverá existir nessa região.

Identidade gerenciada (obrigatório)

O Construtor de Imagens de VM requer uma identidade gerenciada, que ele usa para ler imagens personalizadas de origem, conectar-se ao Armazenamento do Azure e criar imagens personalizadas. Para obter mais informações, consulte Saiba mais sobre o VM Image Builder.

Suporte de rede virtual

Você pode configurar a VM criada para estar em uma rede virtual específica. Ao configurar a tarefa, forneça a ID do recurso de uma sub-rede pré-existente no campo de entrada Configuração de VNet (Opcional). Omita o ID do recurso se nenhuma rede virtual específica precisar ser usada. Para obter mais informações, consulte Opções de rede do serviço Azure VM Image Builder.

Origem

As imagens de origem devem ser dos sistemas operacionais VM Image Builder suportados. Você pode escolher imagens personalizadas existentes na mesma região em que o Construtor de Imagens da VM está sendo executado:

  • Imagem gerenciada: passe o ID do recurso. Por exemplo:

    /subscriptions/<subscriptionID>/resourceGroups/<rgName>/providers/Microsoft.Compute/images/<imageName>
    
  • Galeria de Computação: Passe o ID do recurso da versão da imagem. Por exemplo:

    /subscriptions/$subscriptionID/resourceGroups/$sigResourceGroup/providers/Microsoft.Compute/galleries/$sigName/images/$imageDefName/versions/<versionNumber>
    

    Se você precisar obter a versão mais recente da Galeria de Computação, use uma tarefa do Azure PowerShell ou da CLI do Azure para obtê-la e definir uma variável DevOps. Use a variável na tarefa VM Image Builder DevOps. Para obter mais informações, consulte os exemplos em Obter o ID de recurso da versão de imagem mais recente.

  • (Mercado) Imagem base: use a lista suspensa de imagens populares, que sempre usa a versão mais recente dos sistemas operacionais suportados.

    Se a imagem base não estiver na lista, você poderá especificar a imagem exata usando Publisher:Offer:Sku.

    (Opcional) Versão da imagem base: Você pode fornecer a versão da imagem que deseja usar. A versão padrão é latest.

Personalizar

As seções a seguir discutem várias maneiras de personalizar tarefas.

Provisionador

Inicialmente, há suporte para dois personalizadores, Shell e PowerShell. Apenas inline é suportado. Se você quiser baixar scripts, você pode passar comandos embutidos para fazê-lo.

Para seu sistema operacional, selecione PowerShell ou Shell.

A tarefa Windows Update

Apenas para Windows, a tarefa executa o Windows Update no final das personalizações. Ele também lida com as reinicializações necessárias.

A tarefa executa a seguinte configuração do Windows Update:

    "type": "WindowsUpdate",
    "searchCriteria": "IsInstalled=0",
    "filters": [
        "exclude:$_.Title -like '*Preview*'",
        "include:$true"

A tarefa instala atualizações importantes e recomendadas do Windows que não são versões de visualização .

Manipulação de reinicializações

Atualmente, a tarefa DevOps não oferece suporte à reinicialização de compilações do Windows. Se você tentar reinicializar com o código do PowerShell, a compilação falhará. No entanto, pode utilizar o código para reiniciar as compilações do Linux.

Caminho de construção

A tarefa foi projetada para poder injetar artefatos de liberação do DevOps Build na imagem. Para fazer isso funcionar, você precisa configurar um pipeline de compilação. Na configuração do pipeline de versão, adicione o repositório dos artefatos de compilação.

Captura de tela mostrando como adicionar um artefato no pipeline de versão.

Selecione o botão Caminho de compilação para escolher a pasta de compilação que você deseja colocar na imagem. A tarefa VM Image Builder copia todos os arquivos e diretórios dentro dela. Quando a imagem está sendo criada, o VM Image Builder implanta os arquivos e diretórios em caminhos diferentes, dependendo do sistema operacional.

Importante

Ao adicionar um artefato de repositório, você pode achar que o nome do diretório é prefixado com um caractere de sublinhado (_). O sublinhado pode causar problemas com os comandos embutidos. Certifique-se de usar as aspas apropriadas nos comandos.

O exemplo a seguir explica como isso funciona:

Captura de tela de uma estrutura de diretórios mostrando hierarquia.

  • Para Windows: Os arquivos existem na unidade C: . Um diretório chamado buildArtifacts é criado, que inclui o diretório webapp .

  • Para Linux: Os arquivos existem no /tmp diretório. O webapp diretório é criado, que inclui todos os arquivos e diretórios. Como este é um diretório temporário, você deve mover os arquivos para fora dele. Caso contrário, eles serão excluídos.

Script de personalização em linha

  • Para Windows: você pode inserir comandos embutidos do PowerShell, separados por vírgulas. Se você quiser executar um script em seu diretório de compilação, você pode usar:

    & 'c:\buildArtifacts\webapp\webconfig.ps1'
    

    Você pode fazer referência a vários scripts ou adicionar mais comandos. Por exemplo:

    & 'c:\buildArtifacts\webapp\webconfig.ps1'
    & 'c:\buildArtifacts\webapp\installAgent.ps1'
    
  • Para Linux: Os artefatos de compilação são colocados no diretório /tmp . No entanto, em muitos sistemas operacionais Linux, em uma reinicialização, o conteúdo do diretório /tmp é excluído. Se você quiser que os artefatos existam na imagem, você deve criar outro diretório e copiá-los. Por exemplo:

    sudo mkdir /lib/buildArtifacts
    sudo cp -r "/tmp/_ImageBuilding/webapp" /lib/buildArtifacts/.
    

    Se você estiver OK com o uso do diretório /tmp , poderá executar o script usando o seguinte código:

    # Grant execute permissions to run scripts
    sudo chmod +x "/tmp/_ImageBuilding/webapp/coreConfig.sh"
    echo "running script"
    sudo . "/tmp/AppsAndImageBuilderLinux/_WebApp/coreConfig.sh"
    

O que acontece com os artefatos de construção após a construção da imagem?

Nota

O Construtor de Imagens de VM não remove automaticamente os artefatos de compilação. Sugerimos fortemente que você sempre use código para remover os artefatos de compilação.

  • Para Windows: o VM Image Builder implanta arquivos no diretório C:\buildArtifacts . Como o diretório é persistente, você deve removê-lo executando um script. Por exemplo:

    # Clean up buildArtifacts directory
    Remove-Item -Path "C:\buildArtifacts\*" -Force -Recurse
    
    # Delete the buildArtifacts directory
    Remove-Item -Path "C:\buildArtifacts" -Force
    
  • Para Linux: Os artefatos de compilação são colocados no diretório /tmp . No entanto, em muitos sistemas operacionais Linux, o conteúdo do diretório /tmp é excluído na reinicialização. Sugerimos que você use o código para remover o conteúdo e não confie no sistema operacional para remover o conteúdo. Por exemplo:

    sudo rm -R "/tmp/AppsAndImageBuilderLinux"
    

Comprimento total da construção da imagem

O comprimento total ainda não pode ser alterado na tarefa de pipeline de DevOps. Ele usa o padrão de 240 minutos. Se quiser aumentar o buildTimeoutInMinutes, você pode usar uma tarefa da CLI do Azure no pipeline de versão. Configure a tarefa para copiar um modelo e enviá-lo. Para obter um exemplo de solução, consulte Usar variáveis e parâmetros de ambiente com o Construtor de Imagens de VM ou usar o Azure PowerShell.

Conta de armazenamento

Selecione a conta de armazenamento criada nos pré-requisitos. Se você não vê-lo na lista, o Construtor de Imagens de VM não tem permissões para ele.

Quando a compilação é iniciada, o VM Image Builder cria um contêiner chamado imagebuilder-vststask, onde os artefatos de compilação do repositório são armazenados.

Nota

Você precisa excluir manualmente a conta de armazenamento ou o contêiner após cada compilação.

Distribuir

Os três tipos de distribuição a seguir são suportados.

Imagem gerenciada

  • ID do Recurso:

    /subscriptions/<subscriptionID>/resourceGroups/<rgName>/providers/Microsoft.Compute/images/<imageName>
    
  • Localizações

A Galeria de Computação já deve existir.

  • ID do Recurso:

    /subscriptions/<subscriptionID>/resourceGroups/<rgName>/providers/Microsoft.Compute/galleries/<galleryName>/images/<imageDefName>
    
  • Regiões: uma lista de regiões, separadas por vírgula. Por exemplo,westus, eastus, centralus.

Disco rígido virtual

Você não pode passar nenhum valor para isso. O Construtor de Imagens de VM emite o VHD do disco rígido virtual para o grupo de recursos temporário do Construtor de Imagens de VM, IT_<DestinationResourceGroup>_<TemplateName>, no contêiner vhds . Quando você inicia a compilação de versão, o VM Image Builder emite logs. Quando o Construtor de Imagens de VM terminar, ele emitirá a URL VHD.

Configurações opcionais

Você pode substituir a configuração de tamanho da VM de seu tamanho padrão de Standard_D1_v2. Talvez você queira fazer isso para reduzir o tempo total de personalização. Ou talvez você queira criar imagens que dependem de determinados tamanhos de VM, como GPU (unidade de processamento gráfico), HPC (computação de alto desempenho) e assim por diante.

Como funciona a tarefa

Quando você cria a versão, a tarefa cria um contêiner na conta de armazenamento, chamado imagebuilder-vststask. Ele compacta (compacta) e carrega seus artefatos de construção e cria um token de assinatura de acesso compartilhado para o arquivo zip.

A tarefa usa as propriedades que são passadas para a tarefa para criar o artefato de modelo do Construtor de Imagens de VM. A tarefa faz o seguinte:

  • Baixa o arquivo zip do artefato de construção e quaisquer outros scripts associados. Os arquivos são salvos em uma conta de armazenamento no grupo IT_<DestinationResourceGroup>_<TemplateName>de recursos temporário do Construtor de Imagens da VM.

  • Cria um modelo prefixado com t_ e um inteiro monotônico de 10 dígitos. O modelo é salvo no grupo de recursos selecionado e existe durante a compilação no grupo de recursos.

Saída de exemplo:

start reading task parameters...
found build at:  /home/vsts/work/r1/a/_ImageBuilding/webapp
end reading parameters
getting storage account details for aibstordot1556933914
created archive /home/vsts/work/_temp/temp_web_package_21475337782320203.zip
Source for image:  { type: 'SharedImageVersion',
  imageVersionId: '/subscriptions/<subscriptionID>/resourceGroups/<rgName>/providers/Microsoft.Compute/galleries/<galleryName>/images/<imageDefName>/versions/<imgVersionNumber>' }
template name:  t_1556938436xxx
starting put template...

Quando a compilação da imagem é iniciada, o status da execução é relatado nos logs de versão:

starting run template...

Quando a compilação da imagem termina, a saída é semelhante ao seguinte texto:

2019-05-06T12:49:52.0558229Z starting run template...
2019-05-06T13:36:33.8863094Z run template:  Succeeded
2019-05-06T13:36:33.8867768Z getting runOutput for  SharedImage_distribute
2019-05-06T13:36:34.6652541Z ==============================================================================
2019-05-06T13:36:34.6652925Z ## task output variables ##
2019-05-06T13:36:34.6658728Z $(imageUri) =  /subscriptions/<subscriptionID>/resourceGroups/aibwinsig/providers/Microsoft.Compute/galleries/my22stSIG/images/winWAppimages/versions/0.23760.13763
2019-05-06T13:36:34.6659989Z ==============================================================================
2019-05-06T13:36:34.6663500Z deleting template t_1557146959485...
2019-05-06T13:36:34.6673713Z deleting storage blob imagebuilder-vststask\webapp/18-1/webapp_1557146958741.zip
2019-05-06T13:36:34.9786039Z blob imagebuilder-vststask\webapp/18-1/webapp_1557146958741.zip is deleted
2019-05-06T13:38:37.4884068Z delete template:  Succeeded

O modelo de imagem e IT_<DestinationResourceGroup>_<TemplateName> são excluídos.

Você pode pegar a $(imageUri) variável Azure DevOps Services (anteriormente Visual Studio Team Services ou VSTS) e usá-la na próxima tarefa ou apenas usar o valor e criar uma VM.

Variáveis de DevOps de saída

Aqui está o editor, a oferta, o SKU e a versão da imagem do mercado de origem:

  • $(pirPublisher)
  • $(pirOffer)
  • $(pirSku)
  • $(pirVersion)

Aqui está o URI da imagem, que é o ID do recurso da imagem distribuída:

  • $(imageUri)

FAQ

Posso usar um modelo de imagem existente que já criei, fora do DevOps?

Neste momento, não.

Posso especificar o nome do modelo de imagem?

N.º Um nome de modelo exclusivo é usado e, em seguida, excluído.

A tarefa VM Image Builder falhou. Como posso solucionar o problema?

Se houver uma falha de compilação, a tarefa DevOps não excluirá o grupo de recursos de preparo. Você pode acessar o grupo de recursos de preparo que contém o log de personalização de compilação.

Você verá um erro no log de DevOps para a tarefa do Construtor de Imagens de VM e a mensagem conterá o local customization.log . Por exemplo:

Captura de tela de um exemplo de erro de tarefa DevOps que descreve a falha e fornece o local do arquivo customization.log.

Para obter mais informações, consulte Solucionar problemas do serviço Construtor de Imagens de VM.

Depois de investigar a falha, você pode excluir o grupo de recursos de preparo. Primeiro, exclua o artefato de recurso de modelo do VM Image Builder. O artefato é prefixado com t_ e você pode encontrá-lo no log de compilação da tarefa DevOps:

...
Source for image:  { type: 'SharedImageVersion',
  imageVersionId: '/subscriptions/<subscriptionID>/resourceGroups/<rgName>/providers/Microsoft.Compute/galleries/<galleryName>/images/<imageDefName>/versions/<imgVersionNumber>' }
...
template name:  t_1556938436xxx
...

O artefato de recurso de modelo do Construtor de Imagens de VM está no grupo de recursos especificado inicialmente na tarefa. Quando terminar a solução de problemas, exclua o artefato. Se você estiver excluí-lo usando o portal do Azure, dentro do grupo de recursos, selecione Mostrar Tipos Ocultos para exibir o artefato.

Próximos passos

Para obter mais informações, consulte Visão geral do VM Image Builder.