Attività DevOps del servizio Image Builder di macchine virtuali di Azure (anteprima)

Si applica a: ✔️ Set di scalabilità flessibili di macchine virtuali ✔️ Linux

Questo articolo illustra come usare un'attività Di Azure DevOps per inserire artefatti di compilazione in un'immagine di macchina virtuale (VM), in modo da poter installare e configurare l'applicazione e il sistema operativo.

Versioni delle attività DevOps

Al momento sono disponibili due attività DevOps di Image Builder di macchine virtuali di Azure:

Prerequisiti

Nota

L'attività Generatore immagini macchina virtuale attualmente non supporta il riavvio di Windows o l'esecuzione di comandi con privilegi elevati come amministratore. Ovvero, l'attività non è adatta per scenari di Desktop virtuale Azure o personalizzazioni di Windows che richiedono tali funzionalità. Per usare DevOps con Image Builder della macchina virtuale, annidare il modello all'interno di un'attività di azure Resource Manager e usare l'interfaccia della riga di comando di Azure o le attività di PowerShell.

Prima di iniziare, è necessario eseguire queste operazioni:

  • Installare l'attività Stable DevOps da Visual Studio Marketplace.

  • Avere un account Azure DevOps Services (in precedenza Visual Studio Team Services o VSTS) e creare una pipeline di compilazione.

  • Registrare e abilitare i requisiti di funzionalità di Image Builder della macchina virtuale nella sottoscrizione usata dalle pipeline:

  • Creare un account di archiviazione di Azure standard nel gruppo di risorse dell'immagine di origine. È possibile usare altri gruppi di risorse o account di archiviazione. L'account di archiviazione viene usato per trasferire gli artefatti di compilazione dall'attività DevOps all'immagine.

    # 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
    

Aggiungere un'attività alla pipeline di versione

  1. Selezionare Release PipelineEdit (Modificapipeline> di versione).

  2. Nell'agente utente selezionare il segno più (+) per aggiungere e cercare Image Builder.

  3. Selezionare Aggiungi.

Nelle sezioni seguenti impostare le proprietà dell'attività.

La sottoscrizione di Azure

Nell'elenco a discesa selezionare la sottoscrizione che si vuole eseguire Image Builder della macchina virtuale. Usare la sottoscrizione in cui vengono archiviate le immagini di origine e le immagini devono essere distribuite. È necessario concedere al collaboratore di Image Builder della macchina virtuale l'accesso alla sottoscrizione o al gruppo di risorse.

Resource group

Usare il gruppo di risorse in cui verrà archiviato l'artefatto del modello di immagine temporaneo. Quando si crea un artefatto modello, viene creato un altro gruppo di risorse temporaneo di Image Builder, IT_<DestinationResourceGroup>_<TemplateName>_guid, . Il gruppo di risorse temporaneo archivia i metadati dell'immagine, ad esempio gli script. Alla fine dell'attività, l'artefatto del modello di immagine e il gruppo di risorse temporaneo image builder della macchina virtuale vengono eliminati.

Posizione

Il percorso è l'area in cui verrà eseguito Image Builder della macchina virtuale. Sono supportate solo un numero impostato di aree . Le immagini di origine devono essere presenti in questa posizione. Ad esempio, se si usa Azure Compute Gallery (in precedenza Raccolta immagini condivise), una replica deve esistere in tale area.

Identità gestita (obbligatorio)

Il generatore di immagini della macchina virtuale richiede un'identità gestita, che usa per leggere le immagini personalizzate di origine, connettersi ad Archiviazione di Azure e creare immagini personalizzate. Per altre informazioni, vedere Informazioni su Image Builder di macchine virtuali.

Supporto della rete virtuale

È possibile configurare la macchina virtuale creata in una rete virtuale specifica. Quando si configura l'attività, specificare l'ID risorsa di una subnet preesistente nel campo di input Configurazione rete virtuale (facoltativo). Omettere l'ID risorsa se non è necessario usare alcuna rete virtuale specifica. Per altre informazioni, vedere Opzioni di rete del servizio Image Builder per macchine virtuali di Azure.

Source (Sorgente)

Le immagini di origine devono essere dei sistemi operativi di Image Builder di macchine virtuali supportati. È possibile scegliere immagini personalizzate esistenti nella stessa area da cui è in esecuzione Image Builder della macchina virtuale:

  • Immagine gestita: passare l'ID risorsa. Ad esempio:

    /subscriptions/<subscriptionID>/resourceGroups/<rgName>/providers/Microsoft.Compute/images/<imageName>
    
  • Raccolta di calcolo: passare l'ID risorsa della versione dell'immagine. Ad esempio:

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

    Se è necessario ottenere la versione più recente di Compute Gallery, usare un Azure PowerShell o un'attività dell'interfaccia della riga di comando di Azure per ottenerla e impostare una variabile DevOps. Usare la variabile nell'attività DevOps di Image Builder della macchina virtuale. Per altre informazioni, vedere gli esempi in Ottenere l'ID risorsa della versione dell'immagine più recente.

  • (Marketplace) Immagine di base: usare l'elenco a discesa delle immagini più diffuse, che usa sempre la versione più recente dei sistemi operativi supportati.

    Se l'immagine di base non è presente nell'elenco, è possibile specificare l'immagine esatta usando Publisher:Offer:Sku.

    (Facoltativo) Versione dell'immagine di base: è possibile specificare la versione dell'immagine che si vuole usare. La versione predefinita è latest.

Personalizza

Le sezioni seguenti illustrano vari modi per personalizzare le attività.

Provisioner

Inizialmente, sono supportati due strumenti di personalizzazione, Shell e PowerShell. È supportato solo inline. Per scaricare gli script, è possibile passare i comandi inline a tale scopo.

Per il sistema operativo, selezionare PowerShell o Shell.

Attività di Windows Update

Solo per Windows, l'attività viene eseguita Windows Update alla fine delle personalizzazioni. Gestisce anche i riavvii necessari.

L'attività esegue la configurazione di Windows Update seguente:

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

L'attività installa windows Aggiornamenti importanti e consigliati che non sono versioni di anteprima.

Gestione dei riavvii

L'attività DevOps attualmente non supporta il riavvio delle build di Windows. Se si tenta di riavviare con il codice di PowerShell, la compilazione ha esito negativo. Tuttavia, è possibile usare il codice per riavviare le build Linux.

Percorso di compilazione

L'attività è progettata per essere in grado di inserire gli artefatti di versione devOps Build nell'immagine. Per eseguire questa operazione, è necessario configurare una pipeline di compilazione. Nella configurazione della pipeline di versione aggiungere il repository degli artefatti di compilazione.

Screenshot che mostra come aggiungere un elemento nella pipeline di versione.

Selezionare il pulsante Compila percorso per scegliere la cartella di compilazione da inserire nell'immagine. L'attività Generatore immagini macchina virtuale copia tutti i file e le directory al suo interno. Quando l'immagine viene creata, Image Builder di macchine virtuali distribuisce i file e le directory in percorsi diversi, a seconda del sistema operativo.

Importante

Quando si aggiunge un elemento del repository, è possibile che il nome della directory sia preceduto da un carattere di sottolineatura (_). Il carattere di sottolineatura può causare problemi con i comandi inline. Assicurarsi di usare le virgolette appropriate nei comandi.

L'esempio seguente illustra come funziona:

Screenshot di una struttura di directory che mostra la gerarchia.

  • Per Windows: i file sono presenti nell'unità C: . Viene creata una directory denominata buildArtifacts , che include la directory dell'app Web .

  • Per Linux: i file sono presenti nella directory /tmp . Viene creata la directory dell'app Web , che include tutti i file e le directory. Poiché si tratta di una directory temporanea, è necessario spostarvi i file. In caso contrario, verranno eliminati.

Script di personalizzazione inline

  • Per Windows: è possibile immettere i comandi inline di PowerShell, separati da virgole. Se si vuole eseguire uno script nella directory di compilazione, è possibile usare:

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

    È possibile fare riferimento a più script o aggiungere altri comandi. Ad esempio:

    & 'c:\buildArtifacts\webapp\webconfig.ps1'
    & 'c:\buildArtifacts\webapp\installAgent.ps1'
    
  • Per Linux: gli artefatti di compilazione vengono inseriti nella directory /tmp . Tuttavia, in molti sistemi operativi Linux, in un riavvio, il contenuto della directory /tmp viene eliminato. Se si desidera che gli artefatti esistano nell'immagine, è necessario creare un'altra directory e copiarli. Ad esempio:

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

    Se si usa la directory /tmp , è possibile eseguire lo script usando il codice seguente:

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

Cosa accade agli artefatti di compilazione dopo la compilazione dell'immagine?

Nota

Image Builder di macchine virtuali non rimuove automaticamente gli artefatti di compilazione. È consigliabile usare sempre il codice per rimuovere gli artefatti di compilazione.

  • Per Windows: Image Builder della macchina virtuale distribuisce i file nella directory C:\buildArtifacts . Poiché la directory è persistente, è necessario rimuoverla eseguendo uno script. Ad esempio:

    # Clean up buildArtifacts directory
    Remove-Item -Path "C:\buildArtifacts\*" -Force -Recurse
    
    # Delete the buildArtifacts directory
    Remove-Item -Path "C:\buildArtifacts" -Force 
    
  • Per Linux: gli artefatti di compilazione vengono inseriti nella directory /tmp . Tuttavia, in molti sistemi operativi Linux, il contenuto della directory /tmp viene eliminato al riavvio. È consigliabile usare il codice per rimuovere il contenuto e non basarsi sul sistema operativo per rimuovere il contenuto. Ad esempio:

    sudo rm -R "/tmp/AppsAndImageBuilderLinux"
    

Lunghezza totale della compilazione dell'immagine

La lunghezza totale non può ancora essere modificata nell'attività della pipeline DevOps. Usa il valore predefinito di 240 minuti. Se si vuole aumentare buildTimeoutInMinutes, è possibile usare un'attività dell'interfaccia della riga di comando di Azure nella pipeline di versione. Configurare l'attività per copiare un modello e inviarlo. Per una soluzione di esempio, vedere Usare variabili di ambiente e parametri con Image Builder di macchine virtuali oppure usare Azure PowerShell.

Account di archiviazione

Selezionare l'account di archiviazione creato nei prerequisiti. Se non viene visualizzato nell'elenco, Image Builder della macchina virtuale non dispone delle autorizzazioni necessarie.

All'avvio della compilazione, Image Builder crea un contenitore denominato imagebuilder-vststask, in cui vengono archiviati gli artefatti di compilazione dal repository.

Nota

È necessario eliminare manualmente l'account di archiviazione o il contenitore dopo ogni compilazione.

Distribuzione

Sono supportati i tre tipi di distribuzione seguenti.

Immagine gestita

  • ID risorsa:

    /subscriptions/<subscriptionID>/resourceGroups/<rgName>/providers/Microsoft.Compute/images/<imageName>
    
  • Percorsi

La raccolta di calcolo deve esistere già.

  • ID risorsa:

    /subscriptions/<subscriptionID>/resourceGroups/<rgName>/providers/Microsoft.Compute/galleries/<galleryName>/images/<imageDefName>
    
  • Aree: elenco di aree separate da virgole. Ad esempio,westuseastus , centralus.

Disco rigido virtuale

Non è possibile passare valori a questo. Image Builder della macchina virtuale genera il disco rigido virtuale VHD nel gruppo di risorse temporaneo image builder della macchina virtuale, IT_<DestinationResourceGroup>_<TemplateName>, nel contenitore vhds . Quando si avvia la build di versione, Image Builder genera log. Al termine del generatore di immagini della macchina virtuale, genera l'URL del disco rigido virtuale.

Impostazioni facoltative

È possibile eseguire l'override dell'impostazione relativa alle dimensioni della macchina virtuale dalle dimensioni predefinite di Standard_D1_v2. È possibile eseguire questa operazione per ridurre il tempo totale di personalizzazione. In alternativa, è possibile creare immagini che dipendono da determinate dimensioni della macchina virtuale, ad esempio GPU (unità di elaborazione grafica), HPC (high-performance computing) e così via.

Funzionamento dell'attività

Quando si crea la versione, l'attività crea un contenitore nell'account di archiviazione denominato imagebuilder-vststask. Comprime (comprime) e carica gli artefatti di compilazione e crea un token di firma di accesso condiviso per il file ZIP.

L'attività usa le proprietà passate all'attività per creare l'artefatto del modello di Image Builder della macchina virtuale. L'attività esegue le operazioni seguenti:

  • Scarica il file ZIP dell'artefatto di compilazione e qualsiasi altro script associato. I file vengono salvati in un account di archiviazione nel gruppo IT_<DestinationResourceGroup>_<TemplateName>di risorse temporaneo image builder della macchina virtuale .

  • Crea un modello con prefisso t_ e un numero intero monotonico a 10 cifre. Il modello viene salvato nel gruppo di risorse selezionato ed esiste per la durata della compilazione nel gruppo di risorse.

Output di esempio:

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...

All'avvio della compilazione dell'immagine, lo stato dell'esecuzione viene segnalato nei log di versione:

starting run template...

Al termine della compilazione dell'immagine, l'output è simile al testo seguente:

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

Il modello di immagine e IT_<DestinationResourceGroup>_<TemplateName> vengono eliminati.

È possibile usare la $(imageUri) variabile Azure DevOps Services (in precedenza Visual Studio Team Services o VSTS) e usarla nell'attività successiva oppure usare semplicemente il valore e compilare una macchina virtuale.

Variabili DevOps di output

Ecco l'editore, l'offerta, lo SKU e la versione dell'immagine del marketplace di origine:

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

Ecco l'URI dell'immagine, ovvero l'ID risorsa dell'immagine distribuita:

  • $(imageUri)

Domande frequenti

È possibile usare un modello di immagine esistente già creato, all'esterno di DevOps?

Attualmente non è possibile.

È possibile specificare il nome del modello di immagine?

No. Viene usato un nome di modello univoco e quindi eliminato.

L'attività Generatore immagini macchina virtuale non è riuscita. Come è possibile risolvere il problema?

In caso di errore di compilazione, l'attività DevOps non elimina il gruppo di risorse di staging. È possibile accedere al gruppo di risorse di staging che contiene il log di personalizzazione della compilazione.

Verrà visualizzato un errore nel log DevOps per l'attività Image Builder della macchina virtuale e il messaggio conterrà il percorso customization.log . Ad esempio:

Screenshot di un errore di attività DevOps di esempio che descrive l'errore e fornisce il percorso del file customization.log.

Per altre informazioni, vedere Risolvere i problemi del servizio Image Builder della macchina virtuale.

Dopo aver esaminato l'errore, è possibile eliminare il gruppo di risorse di staging. Prima di tutto, eliminare l'artefatto della risorsa modello di Image Builder della macchina virtuale. L'artefatto è preceduto da t_ ed è possibile trovarlo nel log di compilazione delle attività DevOps:

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

L'artefatto della risorsa modello di Image Builder della macchina virtuale si trova nel gruppo di risorse specificato inizialmente nell'attività. Al termine della risoluzione dei problemi, eliminare l'artefatto. Se si sta eliminando usando il portale di Azure, all'interno del gruppo di risorse selezionare Mostra tipi nascosti per visualizzare l'artefatto.

Passaggi successivi

Per altre informazioni, vedere Panoramica di Image Builder per le macchine virtuali.