Condividi tramite


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

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

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

Importante

L'attività Azure DevOps per Image Builder per macchine virtuali è attualmente disponibile in ANTEPRIMA. Vedere le condizioni per l'utilizzo supplementari per le anteprime di Microsoft Azure per termini legali aggiuntivi che si applicano a funzionalità di Azure in versione beta, in anteprima o in altro modo non ancora disponibili a livello generale.

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 non supporta attualmente il riavvio di Windows o l'esecuzione di comandi con privilegi elevati come amministratore. Ciò significa che l'attività non è adatta per scenari di Desktop virtuale Azure o personalizzazioni di Windows che richiedono tali funzionalità. Per usare DevOps con Image Builder di macchine virtuali, 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 un'attività Stable DevOps da Visual Studio Marketplace.

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

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

  • Creare un account di archiviazione standard di Azure 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 Pipeline di versione>Modifica.

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

Sottoscrizione di Azure

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

Gruppo di risorse

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à, viene eliminato l'artefatto del modello di immagine e il gruppo di risorse temporaneo di Image Builder.

Ufficio

La località è l'area in cui verrà eseguito Image Builder della macchina virtuale. È supportato solo un numero impostato di aree. Le immagini di origine devono essere presenti in questa posizione. Ad esempio, se si usa la Raccolta di calcolo di Azure (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, usata per leggere 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 (facoltativa). Omettere l'ID risorsa se non è necessario usare una rete virtuale specifica. Per altre informazioni, vedere Opzioni di rete del servizio Image Builder di macchine virtuali di Azure.

Origine

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'attività di Azure PowerShell o 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 da usare. La versione predefinita è latest.

Personalizzare

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

Autore provisioning

Inizialmente, sono supportati due funzioni di personalizzazione, Shell e PowerShell. È supportata solo la modalità inline. Per scaricare gli script, è possibile passare comandi inline a tale scopo.

Per il sistema operativo, selezionare PowerShell o Shell.

Attività di Windows Update

Solo per Windows, l'attività esegue 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 aggiornamenti di Windows 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 non riesce. Tuttavia, è possibile usare il codice per riavviare le build Linux.

Percorso di compilazione

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

Screenshot showing how to add an artifact in the release pipeline.

Selezionare il pulsante Percorso di compilazione 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 artefatto 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 of a directory structure showing hierarchy.

  • Per Windows: i file esistono nell'unità C:. Viene creata una directory denominata buildArtifacts, che include la directory App Web.

  • Per Linux: i file esistono nella directory /tmp. Viene creata la directory webapp, che include tutti i file e le directory. Poiché si tratta di una directory temporanea, è necessario spostarne 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 vuole 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, in un riavvio, il contenuto della directory /tmp viene eliminato. Per rimuovere il contenuto è consigliabile usare il codice e non fare affidamento sul sistema operativo. Ad esempio:

    sudo rm -R "/tmp/AppsAndImageBuilderLinux"
    

Lunghezza totale della compilazione dell'immagine

Non è ancora possibile modificare la lunghezza totale nell'attività della pipeline DevOps. Usa il valore predefinito di 240 minuti. Per 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 oppure usare Azure PowerShell.

Account di archiviazione

Selezionare l'account di archiviazione creato nei prerequisiti. Se non viene visualizzato nell'elenco, Image Builder di macchine virtuali 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>
    
  • Ubicazioni

La raccolta di calcolo deve già esistere.

  • ID risorsa:

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

Disco rigido virtuale

Non è possibile passare valori a queste aree. Image Builder di macchine virtuali genera il disco rigido virtuale VHD nel gruppo di risorse temporaneo Image Builder di macchine virtuali 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 delle dimensioni della macchina virtuale rispetto alle 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 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 a essa per creare l'artefatto del modello di Image Builder della macchina virtuale. L'attività esegue le operazioni seguenti:

  • Scaricare il file ZIP dell'artefatto di compilazione e qualsiasi altro script associato. I file vengono salvati in un account di archiviazione nel gruppo di risorse Image Builder temporaneo IT_<DestinationResourceGroup>_<TemplateName>.

  • Crea un modello preceduto da t_ e un 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 rilascio:

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 variabile $(imageUri) Azure DevOps Services (in precedenza Visual Studio Team Services o VSTS) e usarla nell'attività successiva o semplicemente usare il valore e compilare una macchina virtuale.

Variabili DevOps di output

Di seguito sono riportati l'editore, l'offerta, lo SKU e la versione dell'immagine del marketplace di origine:

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

Di seguito è riportato 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?

Non al momento.

È possibile specificare il nome del modello di immagine?

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

L'attività Image Builder di macchine virtuali non è riuscita. Come si risolve il problema?

Se si verifica un 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 of an example DevOps task error that describes the failure and provides the location of the customization.log file.

Per altre informazioni, vedere Risolvere i problemi relativi al 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 dell'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 lo si elimina usando il portale di Azure, nel gruppo di risorse selezionare Mostra tipi nascosti per visualizzare l'artefatto.

Passaggi successivi

Per altre informazioni, vedere la panoramica di Image Builder per macchine virtuali.