DevOps-taak azure VM Image Builder-service (preview)

Van toepassing op: ✔️ Flexibele schaalsets voor Linux-VM's ✔️

In dit artikel leert u hoe u een Azure DevOps-taak gebruikt om buildartefacten te injecteren in een vm-installatiekopieën (virtuele machine), zodat u uw toepassing en besturingssysteem kunt installeren en configureren.

Belangrijk

Azure DevOps-taak voor VM Image Builder is momenteel in PREVIEW. Raadpleeg de Aanvullende voorwaarden voor Microsoft Azure-previews voor juridische voorwaarden die van toepassing zijn op Azure-functies die in bèta of preview zijn of die anders nog niet algemeen beschikbaar zijn.

DevOps-taakversies

Op dit moment zijn er twee DevOps-taken voor Azure VM Image Builder:

Vereisten

Notitie

De taak VM Image Builder biedt momenteel geen ondersteuning voor Windows Opnieuw opstarten of uitvoeren van opdrachten met verhoogde bevoegdheden als Beheer istrator. Dat wil gezegd, de taak is niet geschikt voor Azure Virtual Desktop-scenario's of Windows-aanpassingen waarvoor deze functies zijn vereist. Als u DevOps wilt gebruiken met VM Image Builder, nestt u de sjabloon in een Azure Resource Manager-taak en gebruikt u Azure CLI- of PowerShell-taken.

Voordat u begint, moet u het volgende doen:

  • Installeer een stabiele DevOps-taak vanuit Visual Studio Marketplace.

  • U hebt een Azure DevOps Services-account (voorheen Visual Studio Team Services of VSTS) en een build-pijplijn gemaakt.

  • Registreer en schakel de vm Image Builder-functievereisten in het abonnement in dat wordt gebruikt door de pijplijnen:

  • Maak een standaard Azure-opslagaccount in de resourcegroep van de broninstallatiekopieën. U kunt andere resourcegroepen of opslagaccounts gebruiken. Het opslagaccount wordt gebruikt om de buildartefacten van de DevOps-taak over te dragen naar de installatiekopieën.

    # 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
    

Een taak toevoegen aan de release-pijplijn

  1. Selecteer Bewerken van releasepijplijn>.

  2. Selecteer op de gebruikersagent het plusteken (+) om Image Builder toe te voegen en te zoeken.

  3. Selecteer Toevoegen.

Stel in de volgende secties de taakeigenschappen in.

Azure-abonnement

Selecteer in de vervolgkeuzelijst het abonnement dat u wilt dat VM Image Builder wordt uitgevoerd. Gebruik het abonnement waarin uw broninstallatiekopieën worden opgeslagen en de installatiekopieën moeten worden gedistribueerd. U moet de VM Image Builder-inzender toegang verlenen tot het abonnement of de resourcegroep.

Resourcegroep

Gebruik de resourcegroep waarin het tijdelijke artefact van de afbeeldingssjabloon wordt opgeslagen. Wanneer u een sjabloonartefact maakt, wordt er een andere tijdelijke VM Image Builder-resourcegroep IT_<DestinationResourceGroup>_<TemplateName>_guidgemaakt. De tijdelijke resourcegroep slaat de metagegevens van de installatiekopieën op, zoals scripts. Aan het einde van de taak worden het artefact van de installatiekopieënsjabloon en de tijdelijke resourcegroep VM Image Builder verwijderd.

Location

De locatie is de regio waar VM Image Builder wordt uitgevoerd. Er wordt slechts een vast aantal regio's ondersteund. De bronafbeeldingen moeten aanwezig zijn op deze locatie. Als u bijvoorbeeld Azure Compute Gallery (voorheen Shared Image Gallery) gebruikt, moet er een replica in die regio bestaan.

Beheerde identiteit (vereist)

VM Image Builder vereist een beheerde identiteit, die wordt gebruikt om aangepaste broninstallatiekopieën te lezen, verbinding te maken met Azure Storage en aangepaste installatiekopieën te maken. Zie Meer informatie over VM Image Builder voor meer informatie.

Ondersteuning voor virtuele netwerken

U kunt de gemaakte VIRTUELE machine zo configureren dat deze zich in een specifiek virtueel netwerk bevindt. Wanneer u de taak configureert, geeft u de resource-id op van een bestaand subnet in het invoerveld VNet-configuratie (optioneel). Laat de resource-id weg als er geen specifiek virtueel netwerk moet worden gebruikt. Zie Netwerkopties voor azure VM Image Builder-service voor meer informatie.

Source

De broninstallatiekopieën moeten van de ondersteunde VM Image Builder-besturingssystemen zijn. U kunt bestaande aangepaste installatiekopieën kiezen in dezelfde regio als waarop VM Image Builder wordt uitgevoerd:

  • Beheerde installatiekopieën: geef de resource-id door. Bijvoorbeeld:

    /subscriptions/<subscriptionID>/resourceGroups/<rgName>/providers/Microsoft.Compute/images/<imageName>
    
  • Compute Gallery: geef de resource-id van de versie van de installatiekopieën door. Bijvoorbeeld:

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

    Als u de nieuwste versie van de Compute Gallery wilt ophalen, gebruikt u een Azure PowerShell- of Azure CLI-taak om deze op te halen en een DevOps-variabele in te stellen. Gebruik de variabele in de DevOps-taak VM Image Builder. Zie de voorbeelden in De resource-id van de meest recente installatiekopieversie ophalen voor meer informatie.

  • (Marketplace) Basisinstallatiekopieën: gebruik de vervolgkeuzelijst met populaire installatiekopieën, die altijd de nieuwste versie van de ondersteunde besturingssystemen gebruiken.

    Als de basisinstallatiekopieën zich niet in de lijst bevindt, kunt u de exacte afbeelding opgeven met behulp van Publisher:Offer:Sku.

    (Optioneel) Basisinstallatiekopieënversie: u kunt de versie opgeven van de installatiekopieën die u wilt gebruiken. De standaardversie is latest.

Aanpassen

In de volgende secties worden verschillende manieren besproken om taken aan te passen.

Inrichting

In eerste instantie worden twee aanpassers ondersteund, Shell en PowerShell. Alleen inline wordt ondersteund. Als u scripts wilt downloaden, kunt u inlineopdrachten doorgeven om dit te doen.

Selecteer PowerShell of Shell voor uw besturingssysteem.

De Windows Update-taak

Alleen voor Windows voert de taak Windows Update uit aan het einde van de aanpassingen. Het verwerkt ook de vereiste herstarts.

De taak voert de volgende Windows Update-configuratie uit:

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

De taak installeert belangrijke en aanbevolen Windows-updates die geen preview-versies zijn.

Opnieuw opstarten afhandelen

De DevOps-taak biedt momenteel geen ondersteuning voor het opnieuw opstarten van Windows-builds. Als u probeert opnieuw op te starten met PowerShell-code, mislukt de build. U kunt echter code gebruiken om Linux-builds opnieuw op te starten.

Bouwpad

De taak is ontworpen om DevOps Build-releaseartefacten in de installatiekopieën te kunnen injecteren. Als u dit wilt doen, moet u een build-pijplijn instellen. Voeg in de installatie van de release-pijplijn de opslagplaats van de buildartefacten toe.

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

Selecteer de knop Build Path om de buildmap te kiezen die u op de afbeelding wilt plaatsen. Met de taak VM Image Builder worden alle bestanden en mappen erin gekopieerd. Wanneer de installatiekopieën worden gemaakt, implementeert VM Image Builder de bestanden en mappen in verschillende paden, afhankelijk van het besturingssysteem.

Belangrijk

Wanneer u een opslagplaatsartefact toevoegt, kan het zijn dat de mapnaam wordt voorafgegaan door een onderstrepingsteken (_). Het onderstrepingsteken kan problemen veroorzaken met de inlineopdrachten. Zorg ervoor dat u de juiste aanhalingstekens in de opdrachten gebruikt.

In het volgende voorbeeld wordt uitgelegd hoe dit werkt:

Screenshot of a directory structure showing hierarchy.

  • Voor Windows: Bestanden bevinden zich in het station C: . Er wordt een map met de naam buildArtifacts gemaakt, die de web-app-map bevat.

  • Voor Linux: Bestanden bevinden zich in de /tmp map. De webapp map wordt gemaakt, inclusief alle bestanden en mappen. Omdat dit een tijdelijke map is, moet u de bestanden eruit verplaatsen. Anders worden ze verwijderd.

Inline aanpassingsscript

  • Voor Windows: U kunt inlineopdrachten voor PowerShell invoeren, gescheiden door komma's. Als u een script wilt uitvoeren in uw buildmap, kunt u het volgende gebruiken:

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

    U kunt naar meerdere scripts verwijzen of meer opdrachten toevoegen. Bijvoorbeeld:

    & 'c:\buildArtifacts\webapp\webconfig.ps1'
    & 'c:\buildArtifacts\webapp\installAgent.ps1'
    
  • Voor Linux: De buildartefacten worden in de map /tmp geplaatst. Op veel Linux-besturingssystemen wordt de inhoud van de /tmp-map echter verwijderd wanneer deze opnieuw wordt opgestart. Als u wilt dat de artefacten in de installatiekopie aanwezig zijn, moet u een andere map maken en deze kopiëren. Bijvoorbeeld:

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

    Als u in orde bent met het gebruik van de map /tmp , kunt u het script uitvoeren met behulp van de volgende code:

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

Wat gebeurt er met de buildartefacten na de build van de installatiekopieën?

Notitie

VM Image Builder verwijdert de buildartefacten niet automatisch. Het is raadzaam dat u altijd code gebruikt om de buildartefacten te verwijderen.

  • Voor Windows: VM Image Builder implementeert bestanden in de map C:\buildArtifacts . Omdat de map behouden blijft, moet u deze verwijderen door een script uit te voeren. Bijvoorbeeld:

    # Clean up buildArtifacts directory
    Remove-Item -Path "C:\buildArtifacts\*" -Force -Recurse
    
    # Delete the buildArtifacts directory
    Remove-Item -Path "C:\buildArtifacts" -Force
    
  • Voor Linux: De buildartefacten worden in de map /tmp geplaatst. Op veel Linux-besturingssystemen wordt de inhoud van de map /tmp echter verwijderd bij het opnieuw opstarten. U wordt aangeraden code te gebruiken om de inhoud te verwijderen en niet te vertrouwen op het besturingssysteem om de inhoud te verwijderen. Bijvoorbeeld:

    sudo rm -R "/tmp/AppsAndImageBuilderLinux"
    

Totale lengte van build van installatiekopieën

De totale lengte kan nog niet worden gewijzigd in de DevOps-pijplijntaak. De standaardwaarde van 240 minuten wordt gebruikt. Als u de buildTimeoutInMinutes wilt verhogen, kunt u een Azure CLI-taak in de release-pijplijn gebruiken. Configureer de taak om een sjabloon te kopiëren en te verzenden. Zie Omgevingsvariabelen en -parameters gebruiken met VM Image Builder of Azure PowerShell gebruiken voor een voorbeeldoplossing.

Opslagaccount

Selecteer het opslagaccount dat u hebt gemaakt in de vereisten. Als u deze niet in de lijst ziet, beschikt VM Image Builder niet over machtigingen.

Wanneer de build wordt gestart, maakt VM Image Builder een container met de naam imagebuilder-vststask, waarin de buildartefacten van de opslagplaats worden opgeslagen.

Notitie

Na elke build moet u het opslagaccount of de container handmatig verwijderen.

Verdelen

De volgende drie distributietypen worden ondersteund.

Beheerde installatiekopie

  • Resource-id:

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

De rekengalerie moet al bestaan.

  • Resource-id:

    /subscriptions/<subscriptionID>/resourceGroups/<rgName>/providers/Microsoft.Compute/galleries/<galleryName>/images/<imageDefName>
    
  • Regio's: Een lijst met regio's, gescheiden door komma's. Bijvoorbeeld,westuseastus , centralus.

Virtuele harde schijf

U kunt hier geen waarden aan doorgeven. VM Image Builder verzendt de virtuele harde schijf-VHD naar de tijdelijke VM Image Builder-resourcegroep, IT_<DestinationResourceGroup>_<TemplateName>in de vhds-container . Wanneer u de release-build start, verzendt VM Image Builder logboeken. Wanneer VM Image Builder is voltooid, wordt de VHD-URL verzonden.

Optionele instellingen

U kunt de vm-grootte-instelling overschrijven van de standaardgrootte van Standard_D1_v2. U kunt dit doen om de totale aanpassingstijd te verminderen. U kunt ook installatiekopieën maken die afhankelijk zijn van bepaalde VM-grootten, zoals GPU (graphics processing unit), HPC (high-performance computing), enzovoort.

Hoe de taak werkt

Wanneer u de release maakt, maakt de taak een container in het opslagaccount, met de naam imagebuilder-vststask. Het zipt (comprimeert) en uploadt uw buildartefacten en maakt een shared access Signature-token voor het zip-bestand.

De taak maakt gebruik van de eigenschappen die worden doorgegeven aan de taak om het sjabloonartefact voor VM Image Builder te maken. De taak doet het volgende:

  • Hiermee downloadt u het zip-bestand voor het buildartefact en eventuele andere gekoppelde scripts. De bestanden worden opgeslagen in een opslagaccount in de tijdelijke resourcegroep IT_<DestinationResourceGroup>_<TemplateName>vm Image Builder.

  • Hiermee maakt u een sjabloon die wordt voorafgegaan door t_ en een monotonisch geheel getal van 10 cijfers. De sjabloon wordt opgeslagen in de resourcegroep die u hebt geselecteerd en deze bestaat voor de duur van de build in de resourcegroep.

Voorbeelduitvoer:

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

Wanneer de build van de installatiekopieën wordt gestart, wordt de uitvoeringsstatus gerapporteerd in de releaselogboeken:

starting run template...

Wanneer de build van de installatiekopieën is voltooid, is de uitvoer vergelijkbaar met de volgende tekst:

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

De afbeeldingssjabloon en IT_<DestinationResourceGroup>_<TemplateName> worden verwijderd.

U kunt de $(imageUri) variabele Azure DevOps Services (voorheen Visual Studio Team Services of VSTS) gebruiken en deze gebruiken in de volgende taak of gewoon de waarde gebruiken en een VIRTUELE machine bouwen.

DevOps-uitvoervariabelen

Dit is de uitgever, aanbieding, SKU en versie van de bron-marketplace-installatiekopieën:

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

Dit is de installatiekopieën-URI, de resource-id van de gedistribueerde installatiekopieën:

  • $(imageUri)

Veelgestelde vragen

Kan ik een bestaande installatiekopieënsjabloon gebruiken die ik al heb gemaakt, buiten DevOps?

Op dit moment niet.

Kan ik de naam van de afbeeldingssjabloon opgeven?

Nee Er wordt een unieke sjabloonnaam gebruikt en vervolgens verwijderd.

De VM Image Builder-taak is mislukt. Hoe kan ik het probleem oplossen?

Als er een buildfout opgetreden is, verwijdert de DevOps-taak de faseringsresourcegroep niet. U hebt toegang tot de faseringsresourcegroep die het aanpassingslogboek van de build bevat.

Er wordt een fout weergegeven in het DevOps-logboek voor de taak VM Image Builder en het bericht bevat de locatie customization.log . Bijvoorbeeld:

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

Zie Problemen met de VM Image Builder-service oplossen voor meer informatie.

Nadat u de fout hebt onderzocht, kunt u de faseringsresourcegroep verwijderen. Verwijder eerst het resourceartefact van de VM Image Builder-sjabloon. Het artefact wordt voorafgegaan door t_ en u vindt het in het buildlogboek van de DevOps-taak:

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

Het resourceartefact van de VM Image Builder-sjabloon bevindt zich in de resourcegroep die in eerste instantie in de taak is opgegeven. Wanneer u klaar bent met het oplossen van problemen, verwijdert u het artefact. Als u deze verwijdert met behulp van Azure Portal, selecteert u verborgen typen weergeven in de resourcegroep om het artefact weer te geven.

Volgende stappen

Zie overzicht van VM Image Builder voor meer informatie.