Azure VM Image Builder-tjänsten DevOps-uppgift (förhandsversion)

Gäller för: ✔️ Flexibla skalningsuppsättningar för virtuella Linux-datorer ✔️

I den här artikeln får du lära dig hur du använder en Azure DevOps-uppgift för att mata in byggartefakter i en virtuell datoravbildning så att du kan installera och konfigurera ditt program och operativsystem.

Viktigt!

Azure DevOps-uppgift för VM Image Builder finns för närvarande i FÖRHANDSVERSION. Juridiska villkor för Azure-funktioner i betaversion, förhandsversion eller som av någon annan anledning inte har gjorts allmänt tillgängliga ännu finns i kompletterande användningsvillkor för Microsoft Azure-förhandsversioner.

DevOps-uppgiftsversioner

För närvarande finns det två DevOps-uppgifter för Azure VM Image Builder:

Förutsättningar

Kommentar

Vm Image Builder-uppgiften stöder för närvarande inte Windows Restart eller körning av upphöjda kommandon som administratör. Uppgiften är alltså inte lämplig för Azure Virtual Desktop-scenarier eller Windows-anpassningar som kräver dessa funktioner. Om du vill använda DevOps med VM Image Builder kapslar du mallen i en Azure Resource Manager-uppgift och använder Azure CLI- eller PowerShell-uppgifter.

Innan du börjar måste du:

  • Installera en stabil DevOps-uppgift från Visual Studio Marketplace.

  • Ha ett Azure DevOps Services-konto (tidigare Visual Studio Team Services eller VSTS) och en byggpipeline skapad.

  • Registrera och aktivera funktionskraven för vm Image Builder i den prenumeration som används av pipelines:

  • Skapa ett Azure-standardlagringskonto i källbildresursgruppen. Du kan använda andra resursgrupper eller lagringskonton. Lagringskontot används för att överföra byggartefakter från DevOps-aktiviteten till avbildningen.

    # 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
    

Lägga till en uppgift i versionspipelinen

  1. Välj Redigera versionspipeline>.

  2. I användaragenten väljer du plustecknet (+) för att lägga till och söka efter Image Builder.

  3. Markera Lägga till.

I följande avsnitt anger du uppgiftsegenskaperna.

Azure-prenumeration

I listrutan väljer du den prenumeration som du vill att VM Image Builder ska köra. Använd prenumerationen där källbilderna lagras och bilderna ska distribueras. Du måste ge den virtuella datorn Image Builder-deltagare åtkomst till prenumerationen eller resursgruppen.

Resursgrupp

Använd resursgruppen där den tillfälliga bildmallsartefakten lagras. När du skapar en mallartefakt skapas en annan tillfällig resursgrupp för vm Image Builder, IT_<DestinationResourceGroup>_<TemplateName>_guid, . Den tillfälliga resursgruppen lagrar bildmetadata, till exempel skript. I slutet av uppgiften tas artefakten för avbildningsmallen och den tillfälliga resursgruppen Image Builder för virtuell dator bort.

Location

Platsen är den region där VM Image Builder körs. Endast ett visst antal regioner stöds. Källbilderna måste finnas på den här platsen. Om du till exempel använder Azure Compute Gallery (tidigare delat bildgalleri) måste det finnas en replik i den regionen.

Hanterad identitet (krävs)

Vm Image Builder kräver en hanterad identitet som används för att läsa anpassade källavbildningar, ansluta till Azure Storage och skapa anpassade avbildningar. Mer information finns i Läs mer om VM Image Builder.

Stöd för virtuella nätverk

Du kan konfigurera den skapade virtuella datorn så att den finns i ett specifikt virtuellt nätverk. När du konfigurerar uppgiften anger du resurs-ID för ett befintligt undernät i indatafältet VNet-konfiguration (valfritt ). Utelämna resurs-ID:t om inget specifikt virtuellt nätverk behöver användas. Mer information finns i Nätverksalternativ för Azure VM Image Builder-tjänsten.

Källa

Källavbildningarna måste vara av operativsystemen för den virtuella datorn Image Builder som stöds. Du kan välja befintliga anpassade avbildningar i samma region som VM Image Builder kör från:

  • Hanterad avbildning: Skicka in resurs-ID:t. Till exempel:

    /subscriptions/<subscriptionID>/resourceGroups/<rgName>/providers/Microsoft.Compute/images/<imageName>
    
  • Beräkningsgalleri: Skicka in resurs-ID för avbildningsversionen. Till exempel:

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

    Om du behöver hämta den senaste versionen av Compute Gallery använder du en Azure PowerShell- eller Azure CLI-uppgift för att hämta den och ange en DevOps-variabel. Använd variabeln i vm Image Builder DevOps-uppgiften. Mer information finns i exemplen i Hämta resurs-ID för den senaste avbildningsversionen.

  • (Marketplace) Basavbildning: Använd listrutan med populära avbildningar, som alltid använder den senaste versionen av de operativsystem som stöds.

    Om basavbildningen inte finns i listan kan du ange den exakta bilden med hjälp Publisher:Offer:Skuav .

    (Valfritt) Basavbildningsversion: Du kan ange den version av avbildningen som du vill använda. Standardversionen är latest.

Anpassa

I följande avsnitt beskrivs olika sätt att anpassa uppgifter.

Etablerare

Inledningsvis stöds två anpassningar, Shell och PowerShell. Endast infogad stöds. Om du vill ladda ned skript kan du skicka infogade kommandon för att göra det.

För operativsystemet väljer du PowerShell eller Shell.

Windows Update-uppgiften

Endast för Windows körs Windows Update i slutet av anpassningarna. Den hanterar också de omstarter som krävs.

Uppgiften kör följande Windows Update-konfiguration:

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

Uppgiften installerar viktiga och rekommenderade Windows-Uppdateringar som inte är förhandsversioner.

Hantera omstarter

DevOps-uppgiften stöder för närvarande inte omstart av Windows-versioner. Om du försöker starta om med PowerShell-kod misslyckas bygget. Du kan dock använda kod för att starta om Linux-versioner.

Skapa sökväg

Uppgiften är utformad för att kunna mata in DevOps Build-versionsartefakter i avbildningen. För att det här ska fungera måste du konfigurera en bygg-pipeline. I installationen av versionspipelinen lägger du till lagringsplatsen för byggartefakterna.

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

Välj knappen Skapa sökväg för att välja den byggmapp som du vill ska placeras på avbildningen. Uppgiften Image Builder för den virtuella datorn kopierar alla filer och kataloger i den. När avbildningen skapas distribuerar VM Image Builder filerna och katalogerna till olika sökvägar, beroende på operativsystemet.

Viktigt!

När du lägger till en repoartefakt kan det hända att katalognamnet är prefixet med ett understreckstecken (_). Understrecket kan orsaka problem med infogade kommandon. Se till att använda lämpliga citattecken i kommandona.

I följande exempel förklaras hur detta fungerar:

Screenshot of a directory structure showing hierarchy.

  • För Windows: Det finns filer på C: -enheten. En katalog med namnet buildArtifacts skapas, som innehåller webbappkatalogen.

  • För Linux: Det finns filer i /tmp katalogen. Katalogen webapp skapas, som innehåller alla filer och kataloger. Eftersom det här är en tillfällig katalog måste du flytta filerna från den. Annars tas de bort.

Infogat anpassningsskript

  • För Windows: Du kan ange infogade PowerShell-kommandon, avgränsade med kommatecken. Om du vill köra ett skript i byggkatalogen kan du använda:

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

    Du kan referera till flera skript eller lägga till fler kommandon. Till exempel:

    & 'c:\buildArtifacts\webapp\webconfig.ps1'
    & 'c:\buildArtifacts\webapp\installAgent.ps1'
    
  • För Linux: Byggartefakterna placeras i katalogen /tmp . Men på många Linux-operativsystem tas kataloginnehållet /tmp bort vid en omstart. Om du vill att artefakterna ska finnas i avbildningen måste du skapa en annan katalog och kopiera dem. Till exempel:

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

    Om du är OK med att använda katalogen /tmp kan du köra skriptet med hjälp av följande kod:

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

Vad händer med byggartefakterna efter avbildningsversionen?

Kommentar

Vm Image Builder tar inte bort byggartefakterna automatiskt. Vi rekommenderar starkt att du alltid använder kod för att ta bort byggartefakterna.

  • För Windows: VM Image Builder distribuerar filer till katalogen C:\buildArtifacts . Eftersom katalogen är bevarad måste du ta bort den genom att köra ett skript. Till exempel:

    # Clean up buildArtifacts directory
    Remove-Item -Path "C:\buildArtifacts\*" -Force -Recurse
    
    # Delete the buildArtifacts directory
    Remove-Item -Path "C:\buildArtifacts" -Force
    
  • För Linux: Byggartefakterna placeras i katalogen /tmp . Men på många Linux-operativsystem tas kataloginnehållet /tmp bort vid omstart. Vi rekommenderar att du använder kod för att ta bort innehållet och inte förlitar dig på operativsystemet för att ta bort innehållet. Till exempel:

    sudo rm -R "/tmp/AppsAndImageBuilderLinux"
    

Total längd på avbildningsversion

Total längd kan inte ändras i DevOps-pipelineaktiviteten ännu. Den använder standardvärdet 240 minuter. Om du vill öka buildTimeoutInMinutes kan du använda en Azure CLI-uppgift i versionspipelinen. Konfigurera uppgiften för att kopiera en mall och skicka den. En exempellösning finns i Använda miljövariabler och parametrar med VM Image Builder eller använda Azure PowerShell.

Lagringskonto

Välj det lagringskonto som du skapade i förhandskraven. Om du inte ser det i listan har VM Image Builder inte behörighet till den.

När bygget startar skapar VM Image Builder en container med namnet imagebuilder-vststask, där byggartefakterna från lagringsplatsen lagras.

Kommentar

Du måste ta bort lagringskontot eller containern manuellt efter varje version.

Distribuera

Följande tre distributionstyper stöds.

Hanterad avbildning

  • Resurs-ID:

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

Beräkningsgalleriet måste redan finnas.

  • Resurs-ID:

    /subscriptions/<subscriptionID>/resourceGroups/<rgName>/providers/Microsoft.Compute/galleries/<galleryName>/images/<imageDefName>
    
  • Regioner: En lista över regioner, kommaavgränsade. Till exempelwestus , eastus. centralus

Virtuell hårddisk

Du kan inte skicka några värden till detta. VM Image Builder genererar den virtuella hårddiskens virtuella hårddisk till den tillfälliga resursgruppen Image Builder för virtuell dator i IT_<DestinationResourceGroup>_<TemplateName>containern vhds . När du startar versionsversionen genererar VM Image Builder loggar. När VM Image Builder har slutförts genererar den VHD-URL:en.

Valfria inställningar

Du kan åsidosätta inställningen för VM-storlek från standardstorleken för Standard_D1_v2. Du kanske vill göra det för att minska den totala anpassningstiden. Eller så kanske du vill skapa avbildningar som är beroende av vissa VM-storlekar, till exempel GPU (grafikprocessor), HPC (databehandling med höga prestanda) och så vidare.

Så här fungerar uppgiften

När du skapar versionen skapar uppgiften en container i lagringskontot med namnet imagebuilder-vststask. Den zippar (komprimerar) och laddar upp dina byggartefakter och skapar en signaturtoken för delad åtkomst för zip-filen.

Uppgiften använder de egenskaper som skickas till uppgiften för att skapa mallartefakten för VM Image Builder. Uppgiften gör följande:

  • Laddar ned zip-filen för byggartefakter och andra associerade skript. Filerna sparas i ett lagringskonto i den tillfälliga resursgruppen IT_<DestinationResourceGroup>_<TemplateName>Image Builder för virtuell dator .

  • Skapar en mall som är prefix med t_ och ett 10-siffrigt monotont heltal. Mallen sparas i den resursgrupp som du har valt och den finns under hela bygget i resursgruppen.

Exempel på utdata>

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

När avbildningsversionen startar rapporteras körningsstatusen i versionsloggarna:

starting run template...

När avbildningsversionen är klar liknar utdata följande 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

Avbildningsmallen och IT_<DestinationResourceGroup>_<TemplateName> tas bort.

Du kan använda variabeln $(imageUri) Azure DevOps Services (tidigare Visual Studio Team Services eller VSTS) och använda den i nästa uppgift eller bara använda värdet och skapa en virtuell dator.

Utdata för DevOps-variabler

Här är utgivaren, erbjudandet, SKU:n och versionen av källmarknadsbilden:

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

Här är avbildnings-URI:n, som är resurs-ID:t för den distribuerade avbildningen:

  • $(imageUri)

Vanliga frågor

Kan jag använda en befintlig avbildningsmall som jag redan har skapat, utanför DevOps?

Nej, inte just nu.

Kan jag ange namnet på avbildningsmallen?

Nej. Ett unikt mallnamn används och tas sedan bort.

Vm Image Builder-uppgiften misslyckades. Hur felsöker jag problemet?

Om det uppstår ett byggfel tar DevOps-aktiviteten inte bort mellanlagringsresursgruppen. Du kan komma åt den mellanlagringsresursgrupp som innehåller anpassningsloggen för bygget.

Ett fel visas i DevOps-loggen för den virtuella datorns image builder-uppgift och meddelandet innehåller platsen customization.log . Till exempel:

Screenshot of an example DevOps task error that describes the failure and provides the location of the customization.log file.

Mer information finns i Felsöka tjänsten Image Builder för virtuella datorer.

När du har undersökt felet kan du ta bort mellanlagringsresursgruppen. Ta först bort resursartefakten för vm Image Builder-mallen. Artefakten är prefix med t_ och du hittar den i DevOps-aktivitetsgenereringsloggen:

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

Resursartefakten för vm Image Builder-mallen finns i den resursgrupp som angavs ursprungligen i aktiviteten. När du är klar med felsökningen tar du bort artefakten. Om du tar bort den med hjälp av Azure-portalen väljer du Visa dolda typer i resursgruppen för att visa artefakten.

Nästa steg

Mer information finns i Översikt över VM Image Builder.