Tarefa de devOps de devops de serviço de construtor de imagem AzureAzure Image Builder Service DevOps Task

Este artigo mostra-lhe como usar uma tarefa Azure DevOps para injetar artefactos de construção numa imagem VM para que possa instalar e configurar a sua aplicação e o SEU.This article shows you how to use an Azure DevOps task to inject build artifacts into a VM image so you can install and configure your application and OS.

Versões de tarefa de DevOpsDevOps Task versions

Existem duas tarefas de Construtor de Imagem Azure VM (AIB):There are two Azure VM Image Builder (AIB) DevOps Tasks:

  • Tarefa AIB 'estável',esta é a mais recente construção estável que foi testada, e a telemetria não mostra problemas.'Stable' AIB Task, this is the latest stable build that has been tested, and telemetry shows no issues.

  • Tarefa AIB 'instável',isto permite-nos colocar as últimas atualizações e funcionalidades, permitir que os clientes as testem, antes de a promovermos para a tarefa 'estável'.'Unstable' AIB Task, this allows us to put in the latest updates and features, allow customers to test them, before we promote it to the 'stable' task. Se não houver problemas relatados, e a nossa telemetria não apresentar problemas, aproximadamente uma semana depois, promoveremos o código de tarefa para "estável".If there are no reported issues, and our telemetry shows no issues, approximately 1 week later, we will promote the task code to 'stable'.

Pré-requisitosPrerequisites

  • Instale a Tarefa DevOps Estável do Mercado do Estúdio Visual.Install the Stable DevOps Task from Visual Studio Marketplace.

  • Você deve ter uma conta VSTS DevOps, e um Pipeline buildYou must have a VSTS DevOps account, and a Build Pipeline created

  • Registar e ativar os requisitos de funcionalidade do Construtor de Imagens na subscrição utilizada pelos gasodutos:Register and enable the Image Builder feature requirements in the subscription used by the pipelines:

  • Crie uma Conta de Armazenamento Standard Azure no Grupo de Recursos de imagem de origem, pode utilizar outras contas de Grupo de Recursos/Armazenamento.Create a Standard Azure Storage Account in the source image Resource Group, you can use other Resource Group/Storage accounts. A conta de armazenamento é usada para transferir os artefactos de construção da tarefa DevOps para a imagem.The storage account is used transfer the build artifacts from the DevOps task to the image.

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

Adicionar tarefa para lançar pipelineAdd Task to Release Pipeline

Selecione Editar pipeline de lançamento > Select Release Pipeline > Edit

No Agente utilizador, selecione + para adicionar então procure por Image Builder.On the User Agent, select + to add then search for Image Builder. Selecione Adicionar.Select Add.

Definir as seguintes propriedades de tarefa:Set the following task properties:

Subscrição do AzureAzure Subscription

Selecione a partir do menu suspenso que subscrição deseja que o Construtor de Imagens execute.Select from the drop-down menu which subscription you want the Image Builder to run. Utilize a mesma subscrição onde estão localizadas as imagens de origem e onde as imagens serão distribuídas.Use the same subscription where your source images are located and where the images are to be distributed. Tem de autorizar o acesso do colaborador do construtor de imagens ao Grupo de Assinatura ou Recursos.You need to authorize the image builder contributor access to the Subscription or Resource Group.

Grupo de RecursosResource Group

Utilize o grupo de recursos onde o artefacto do modelo de imagem temporária será armazenado.Use the resource group where the temporary image template artifact will be stored. Ao criar um artefacto de modelo, é criado um grupo de recursos temporários de Image IT_<DestinationResourceGroup>_<TemplateName>_guid Builder.When creating a template artifact, an additional temporary Image Builder resource group IT_<DestinationResourceGroup>_<TemplateName>_guid is created. O grupo de recursos temporários armazena os metadados de imagem, como scripts.The temporary resource group stores the image metadata, such as scripts. No final da tarefa, o artefacto do modelo de imagem e o grupo temporário de recursos do Construtor de Imagem são eliminados.At the end of the task, the image template artifact and temporary Image Builder resource group is deleted.

LocalizaçãoLocation

A localização é a região onde o Construtor de Imagem vai funcionar.The location is the region where the Image Builder will run. Apenas um número definido de regiões são apoiadas.Only a set number of regions are supported. As imagens de origem devem estar presentes neste local.The source images must be present in this location. Por exemplo, se estiver a utilizar a Galeria de Imagens Partilhadas, deve existir uma réplica nessa região.For example, if you are using Shared Image Gallery, a replica must exist in that region.

Identidade gerida (Requerida)Managed Identity (Required)

O Image Builder requer uma Identidade Gerida, que utiliza para ler imagens personalizadas de origem, ligar-se ao Azure Storage e criar imagens personalizadas.Image Builder requires a Managed Identity, which it uses to read source custom images, connect to Azure Storage, and create custom images. Aceda aqui para obter mais detalhes.See here for more details.

Suporte VNETVNET Support

Atualmente, a tarefa DevOps não suporta especificar uma sub-rede existente, esta está no roteiro, mas se quiser utilizar um VNET existente, pode utilizar um modelo ARM, com um modelo de Construtor de Imagem aninhado no interior, consulte os exemplos do Construtor de Imagens do Windows sobre como isto é alcançado, ou utilizar alternativamente o AZ AIB PowerShell.Currently the DevOps task does not support specifying an existing Subnet, this is on the roadmap, but if you want to utilize an existing VNET, you can use an ARM template, with an Image Builder template nested inside, please see the Windows Image Builder template examples on how this is achieved, or alternatively use AZ AIB PowerShell.

OrigemSource

As imagens de origem devem ser do OSs do Construtor de Imagem suportado.The source images must be of the supported Image Builder OSs. Pode escolher imagens personalizadas existentes na mesma região que o Image Builder está a correr:You can choose existing custom images in the same region as Image Builder is running from:

  • Imagem gerida - É necessário passar nos recursosId, por exemplo:Managed Image - You need to pass in the resourceId, for example:

    /subscriptions/<subscriptionID>/resourceGroups/<rgName>/providers/Microsoft.Compute/images/<imageName>
    
  • Galeria de Imagens Partilhadas Azure - É necessário passar nos recursosId da versão de imagem, por exemplo:Azure Shared Image Gallery - You need to pass in the resourceId of the image version, for example:

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

    Se precisar de obter a versão mais recente da Shared Image Gallery, pode ter uma tarefa CLI AZ PowerShell ou AZ antes de obter a versão mais recente e definir uma variável DevOps.If you need to get the latest Shared Image Gallery version, you can have an AZ PowerShell or AZ CLI task before that will get the latest version and set a DevOps variable. Utilize a variável na tarefa AZ VM Image Builder DevOps.Use the variable in the AZ VM Image Builder DevOps task. Para mais informações, consulte os exemplos.For more information, see the examples.

  • (Mercado) Imagem Base Existe uma lista de imagens populares, estas utilizarão sempre a versão 'mais recente' dos OS suportados.(Marketplace) Base Image There is a drop-down list of popular images, these will always use the 'latest' version of the supported OS's.

    Se a imagem base não estiver na lista, pode especificar a imagem exata que utiliza Publisher:Offer:Sku .If the base image is not in the list, you can specify the exact image using Publisher:Offer:Sku.

    Versão base de imagem (opcional) - Pode fornecer a versão da imagem que pretende utilizar, o padrão é latest .Base Image Version (optional) - You can supply the version of the image you want to use, default is latest.

PersonalizarCustomize

ProvisionerProvisioner

Inicialmente, dois personalizadores são suportados - Shell e PowerShell.Initially, two customizers are supported - Shell and PowerShell. Só a inline é suportada.Only inline is supported. Se quiser baixar scripts, pode passar comandos inline para o fazer.If you want to download scripts, then you can pass inline commands to do so.

Para o seu SISTEMA, selecione PowerShell ou Shell.For your OS, select PowerShell or Shell.

Tarefa de atualização do WindowsWindows Update Task

Apenas para o Windows, a tarefa executa o Windows Update no final das personalizações.For Windows only, the task runs Windows Update at the end of the customizations. Trata das reinicializações necessárias.It handles the required reboots.

É executada a seguinte configuração de Atualização do Windows:The following Windows Update configuration is executed:

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

Instala atualizações importantes e recomendadas do Windows que não são de pré-visualização.It installs important and recommended Windows Updates that are not preview.

Manipulação de RebootsHandling Reboots

Atualmente, a tarefa DevOps não tem suporte para reiniciar as construções do Windows, se tentar reiniciar com o código PowerShell, a construção falhará.Currently the DevOps task does not have support for rebooting Windows builds, if you try to reboot with PowerShell code, the build will fail. No entanto, pode usar código para reiniciar as construções do Linux.However, you can use code to reboot Linux builds.

Construir CaminhoBuild Path

A tarefa foi concebida para ser capaz de injetar artefactos de libertação de DevOps Build na imagem.The task is designed to be able to inject DevOps Build release artifacts into the image. Para que isto funcione, é preciso montar um oleoduto de construção.To make this work, you need to set up a build pipeline. Na configuração do gasoduto de libertação, deve adicionar o repo dos artefactos de construção.In the setup of the release pipeline, you must add the repo of the build artifacts.

Selecionar adicione um artefacto no gasoduto de libertação.

Selecione o botão 'Construir Caminho' para escolher a pasta de construção que pretende ser colocada na imagem.Select the Build Path button to choose the build folder you want to be placed on the image. A tarefa do Construtor de Imagens copia todos os ficheiros e diretórios dentro dela.The Image Builder task copies all files and directories within it. Quando a imagem está a ser criada, o Image Builder implanta os ficheiros e diretórios em diferentes caminhos, dependendo do SISTEMA.When the image is being created, Image Builder deploys the files and directories into different paths, depending on OS.

Importante

Ao adicionar um artefacto de repo, poderá descobrir que o diretório está pré-fixado com um sublinhado _.When adding a repo artifact, you may find the directory is prefixed with an underscore _. O sublinhado pode causar problemas com os comandos inline.The underscore can cause issues with the inline commands. Utilize as cotações apropriadas nos comandos.Use the appropriate quotes in the commands.

O exemplo a seguir explica como isto funciona:The following example explains how this works:

Uma estrutura de diretório mostrando hierarquia.

  • Windows - Os ficheiros existem em C:\ .Windows - Files exist in C:\. Um diretório nomeado buildArtifacts é criado que inclui o webapp diretório.A directory named buildArtifacts is created which includes the webapp directory.

  • Linux - Os ficheiros existem em /tmp .Linux - Files exist in /tmp. O webapp diretório é criado que inclui todos os ficheiros e diretórios.The webapp directory is created which includes all files and directories. Tens de tirar os ficheiros deste diretório.You must move the files from this directory. Caso contrário, serão suprimidas, uma vez que se encontra no diretório temporário.Otherwise, they will be deleted since it is in the temporary directory.

Roteiro de personalização inlineInline customization script

  • Windows - Pode introduzir comandos de linha PowerShell separados por vírgulas.Windows - You can enter PowerShell inline commands separated by commas. Se quiser executar um script no seu diretório de construção, pode usar:If you want to run a script in your build directory, you can use:

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

    Pode fazer referência a vários scripts ou adicionar mais comandos, por exemplo:You can reference multiple scripts, or add more commands, for example:

    & 'c:\buildArtifacts\webapp\webconfig.ps1'
    & 'c:\buildArtifacts\webapp\installAgent.ps1'
    
  • Linux - Nos sistemas Linux os artefactos de construção são colocados no /tmp diretório.Linux - On Linux systems the build artifacts are put into the /tmp directory. No entanto, em muitos OSs Linux, num reboot, os conteúdos do diretório /tmp são eliminados.However, on many Linux OSs, on a reboot, the /tmp directory contents are deleted. Se quiser que os artefactos existam na imagem, deve criar outro diretório e copiá-los.If you want the artifacts to exist in the image, you must create another directory and copy them over. Por exemplo:For example:

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

    Se estiver bem usando o diretório "/tmp", então pode usar o código abaixo para executar o script.If you are ok using the "/tmp" directory, then you can use the code below to execute the script.

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

O que acontece com os artefactos de construção depois da construção da imagem?What happens to the build artifacts after the image build?

Nota

O Image Builder não remove automaticamente os artefactos de construção, sugere-se fortemente que tenha sempre código para remover os artefactos de construção.Image Builder does not automatically remove the build artifacts, it is strongly suggested that you always have code to remove the build artifacts.

  • Windows - O construtor de imagens implementa ficheiros no c:\buildArtifacts diretório.Windows - Image builder deploys files to the c:\buildArtifacts directory. O diretório é persistido, deve retirar o diretório.The directory is persisted you must remove the directory. Pode removê-lo no guião que executa.You can remove it in the script you execute. Por exemplo:For example:

    # Clean up buildArtifacts directory
    Remove-Item -Path "C:\buildArtifacts\*" -Force -Recurse
    
    # Delete the buildArtifacts directory
    Remove-Item -Path "C:\buildArtifacts" -Force 
    
  • Linux - Os artefactos de construção são colocados no /tmp diretório.Linux - The build artifacts are put into the /tmp directory. No entanto, em muitos OSs Linux, num reboot, os conteúdos do /tmp diretório são eliminados.However, on many Linux OSs, on a reboot, the /tmp directory contents are deleted. Sugere-se que tenha código para remover o conteúdo e não depender do SO para remover o conteúdo.It is suggested that you have code to remove the contents and not rely on the OS to remove the contents. Por exemplo:For example:

    sudo rm -R "/tmp/AppsAndImageBuilderLinux"
    

Comprimento total da construção de imagemTotal length of image build

O comprimento total ainda não pode ser alterado na tarefa do gasoduto DevOps.Total length cannot be changed in the DevOps pipeline task yet. Usa o padrão de 240 minutos.It uses the default of 240 minutes. Se pretender aumentar a buildTimeoutInMinutes,então pode utilizar uma tarefa CLI AZ no Pipeline de Lançamento.If you want to increase the buildTimeoutInMinutes, then you can use an AZ CLI task in the Release Pipeline. Configurar a tarefa de copiar um modelo e submetê-lo.Configure the task to copy a template and submit it. Por exemplo, consulte esta soluçãoou utilize a Az PowerShell.For an example, see this solution, or use Az PowerShell.

Conta de ArmazenamentoStorage Account

Selecione a conta de armazenamento que criou nos pré-requisitos.Select the storage account you created in the prerequisites. Se não o vir na lista, o Image Builder não tem permissões.If you do not see it in the list, Image Builder does not have permissions to it.

Quando a construção começar, o Image Builder criará um recipiente chamado imagebuilder-vststask .When the build starts, Image Builder will create a container called imagebuilder-vststask. O recipiente é onde os artefactos de construção do repo estão armazenados.The container is where the build artifacts from the repo are stored.

Nota

É necessário eliminar manualmente a conta de armazenamento ou o recipiente após cada construção.You need to manually delete the storage account or container after each build.

DistribuirDistribute

Existem 3 tipos de distribuição suportados.There are 3 distribute types supported.

Imagem geridaManaged Image

  • ResourceID:ResourceID:

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

A Galeria de Imagens Partilhadas já deve existir.The Shared Image Gallery must already exist.

  • ResourceID:ResourceID:

    /subscriptions/<subscriptionID>/resourceGroups/<rgName>/providers/Microsoft.Compute/galleries/<galleryName>/images/<imageDefName>
    
  • Regiões: lista de regiões, vírgula separada.Regions: list of regions, comma separated. Por exemplo, westus, este, centralFor example, westus, eastus, centralus

VHDVHD

Não é possível passar valores para isto, o Image Builder emitirá o VHD para o grupo temporário de recursos do Construtor de IT_<DestinationResourceGroup>_<TemplateName> Imagem, no recipiente vhds.You cannot pass any values to this, Image Builder will emit the VHD to the temporary Image Builder resource group, IT_<DestinationResourceGroup>_<TemplateName>, in the vhds container. Quando inicia a construção do desbloqueio, o construtor de imagens emite registos.When you start the release build, image builder emits logs. Quando terminar, emitirá o URL VHD.When it has finished, it will emit the VHD URL.

Definições opcionaisOptional Settings

  • Tamanho VM - Pode sobrepor-se ao tamanho VM, a partir do padrão de Standard_D1_v2.VM Size - You can override the VM size, from the default of Standard_D1_v2. Pode sobrepor-se para reduzir o tempo total de personalização, ou porque pretende criar as imagens que dependem de certos tamanhos VM, como GPU/HPC, etc.You may override to reduce total customization time, or because you want to create the images that depend on certain VM sizes, such as GPU / HPC etc.

Como funcionaHow it works

Ao criar o desbloqueio, a tarefa cria um recipiente na conta de armazenamento, denominado imagebuilder-vststask.When you create the release, the task creates a container in the storage account, named imagebuilder-vststask. Fecha e carrega os seus artefactos de construção e cria um Sas Token para o ficheiro zip.It zips and uploads your build artifacts and creates a SAS Token for the zip file.

A tarefa utiliza as propriedades passadas para a tarefa de criar o artefacto do Modelo de Construtor de Imagem.The task uses the properties passed to the task to create the Image Builder Template artifact. A tarefa faz o seguinte:The task does the following:

  • Descarrega o arquivo zip de construção de artefactos e quaisquer outros scripts associados.Downloads the build artifact zip file and any other associated scripts. Os ficheiros são guardados numa conta de armazenamento no grupo de recursos temporários do Construtor de Imagens IT_<DestinationResourceGroup>_<TemplateName> .The files are saved in a storage account in the temporary Image Builder resource group IT_<DestinationResourceGroup>_<TemplateName>.
  • Cria um t_ pré-fixado do modelo e um número inteiro monotónico de 10 dígitos.Creates a template prefixed t_ and a 10-digit monotonic integer. O modelo é guardado para o grupo de recursos que selecionou.The template is saved to the resource group you selected. O modelo existe durante a duração da construção no grupo de recursos.The template exists for the duration of the build in the resource group.

Exemplo de saída:Example output:

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 construção da imagem começa, o estado de execução é relatado nos registos de libertação:When the image build starts, the run status is reported in the release logs:

starting run template...

Quando a construção da imagem termina, vê-se uma saída semelhante ao seguinte texto:When the image build completes, you see output similar to following text:

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> é eliminado.The image template and IT_<DestinationResourceGroup>_<TemplateName> is deleted.

Pode pegar na variável VSTS '$(imageUri)' e usá-la na tarefa seguinte ou apenas usar o valor e construir um VM.You can take the '$(imageUri)' VSTS variable and use it in the next task or just use the value and build a VM.

Variáveis de devOps de saídaOutput DevOps Variables

Pub/oferta/SKU/Versão da imagem do mercado de origem:Pub/offer/SKU/Version of the source marketplace image:

  • $(pirPublisher)$(pirPublisher)
  • $(pirOffer)$(pirOffer)
  • $(pirSku)$(pirSku)
  • $(pirVersão)$(pirVersion)

Imagem URI - O ResourceID da imagem distribuída:Image URI - The ResourceID of the distributed image:

  • $(imageUri)$(imageUri)

FAQFAQ

Posso usar um modelo de imagem existente que já criei, fora do DevOps?Can I use an existing image template I have already created, outside of DevOps?

Atualmente, não neste momento.Currently, not at this time.

Posso especificar o nome do modelo de imagem?Can I specify the image template name?

N.ºNo. Um nome de modelo único é usado e, em seguida, apagado.A unique template name is used and then deleted.

O construtor de imagens falhou.The image builder failed. Como posso resolver problemas?How can I troubleshoot?

Se houver uma falha de construção, a tarefa DevOps não elimina o grupo de recursos de encenação.If there is a build failure, the DevOps task does not delete the staging resource group. Pode aceder ao grupo de recursos de encenação que contém o registo de personalização de construção.You can access the staging resource group that contains the build customization log.

Verá um erro no registo de DevOps para a tarefa VM Image Builder e verá a localização .log personalização.You will see an error in the DevOps log for the VM Image Builder task, and see the customization.log location. Por exemplo:For example:

Exemplo DevOps erro de tarefa que mostra uma falha.

Para obter mais informações sobre a resolução de problemas, consulte o Serviço de Construtores de Imagem Azure .For more information on troubleshooting, see Troubleshoot Azure Image Builder Service.

Depois de investigar a falha, pode eliminar o grupo de recursos de encenação.After investigating the failure, you can delete the staging resource group. Primeiro, elimine o artefacto do recurso do modelo de imagem.First, delete the Image Template Resource artifact. O artefacto é pré-fixado com t_ e pode ser encontrado no registo de construção de tarefas DevOps:The artifact is prefixed with t_ and can be found in the DevOps task build log:

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

O artefacto do recurso do modelo de imagem está no grupo de recursos especificado inicialmente na tarefa.The Image Template resource artifact is in the resource group specified initially in the task. Quando acabares de resolver problemas, apaga o artefacto.When you're done troubleshooting delete the artifact. Se eliminar utilizando o portal Azure, dentro do grupo de recursos, selecione Mostrar Tipos Ocultos, para visualizar o artefacto.If deleting using the Azure portal, within the resource group, select Show Hidden Types, to view the artifact.

Passos seguintesNext steps

Para mais informações, consulte a visão geral do Azure Image Builder.For more information, see Azure Image Builder overview.