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:
Tarefa estável do Construtor de Imagens de VM: a compilação estável mais recente que foi testada e não relata problemas com o Regulamento Geral de Proteção de Dados (GDPR).
Tarefa do Construtor de Imagens de VM instável: Oferecemos a chamada tarefa instável para que você possa testar as atualizações e os recursos mais recentes antes de lançarmos o código da tarefa como estável. Após cerca de uma semana, se não houver problemas de telemetria ou relatados pelo cliente, promovemos o código da tarefa para estável.
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
Selecione Release Pipeline>Edit.
No User Agent, selecione o sinal de adição (+) para adicionar e procure Image Builder.
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.
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:
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. Owebapp
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
Azure Compute Gallery
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:
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.