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:
Stabil vm Image Builder-uppgift: Den senaste stabila versionen som har testats och rapporterar inga allmänna dataskyddsförordningar (GDPR).
Unstable VM Image Builder-uppgift: Vi erbjuder en så kallad instabil uppgift så att du kan testa de senaste uppdateringarna och funktionerna innan vi släpper aktivitetskoden som stabil. Efter ungefär en vecka, om det inte finns några kundrapporterade eller telemetriproblem, höjer vi upp aktivitetskoden till stabil.
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
Välj Redigera versionspipeline>.
I användaragenten väljer du plustecknet (+) för att lägga till och söka efter Image Builder.
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.
Plats
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:Sku
av .(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.
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:
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. Katalogenwebapp
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
Azure Compute Gallery
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 exempel
westus
,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 customization.log plats. Till exempel:
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.