Delen via


Azure Image Builder-triggers gebruiken om een automatische build van installatiekopieën in te stellen

U kunt triggers in Azure Image Builder (AIB) gebruiken om automatische builds van installatiekopieën in te stellen wanneer aan bepaalde criteria wordt voldaan in uw build-pijplijn.

Belangrijk

Houd er rekening mee dat er een beperking bestaat voor het aantal toegestane triggers per regio, met name 100 per regio per abonnement.

Notitie

Op dit moment bieden we alleen ondersteuning voor het instellen van een trigger voor een nieuwe broninstallatiekopieën, maar we verwachten dat we in de toekomst verschillende soorten triggers ondersteunen.

Vereisten

Voordat u uw eerste trigger instelt, moet u ervoor zorgen dat u azure Image Builder API-versie 2022-07-01 gebruikt.

Een trigger instellen in Azure Image Builder

De providers registreren

Als u VM Image Builder wilt gebruiken met triggers, moet u de onderstaande providers registreren. Controleer uw registratie door de volgende opdrachten uit te voeren:

az provider show -n Microsoft.VirtualMachineImages -o json | grep registrationState
az provider show -n Microsoft.KeyVault -o json | grep registrationState
az provider show -n Microsoft.Compute -o json | grep registrationState
az provider show -n Microsoft.Storage -o json | grep registrationState
az provider show -n Microsoft.Network -o json | grep registrationState
az provider show -n Microsoft.ContainerInstance -o json | grep registrationState

Als de uitvoer niet geregistreerd staat, voert u de volgende opdrachten uit:

az provider register -n Microsoft.VirtualMachineImages
az provider register -n Microsoft.Compute
az provider register -n Microsoft.KeyVault
az provider register -n Microsoft.Storage
az provider register -n Microsoft.Network
az provider register -n Microsoft.ContainerInstance

Registreer de functie voor het maken van automatische installatiekopieën:

az feature register --namespace Microsoft.VirtualMachineImages --name Triggers

Variabelen instellen

Eerst moet u enkele variabelen instellen die u herhaaldelijk gebruikt in opdrachten.

# Resource group name - ibTriggersTestRG in this example
resourceGroupName=ibTriggersRG
# Datacenter location - West US 2 in this example
location=westus2
# Additional region to replicate the image to - East US in this example
additionalregion=eastus2
# Name of the Azure Compute Gallery - ibTriggersGallery in this example
acgName=ibTriggersGallery
# Name of the image definition to be created - ibTriggersImageDef in this example
imageDefName=ibTriggersImageDef
# Name of the Trigger to be created - ibTrigger in this example
ibTriggerName=ibTrigger
# Name of the image template to be created - ibTriggersImageTemplate in this example
imageTemplateName=ibTriggersImageTemplate
# Reference name in the image distribution metadata
runOutputName=ibTriggersTestRun
# Create a variable for your subscription ID
subscriptionID=$(az account show --query id --output tsv)

Resourcegroep maken

U moet nu een resourcegroep maken waarin u de afbeeldingssjabloon kunt opslaan. Gebruik de volgende opdracht om uw resourcegroep te maken:

az group create -n $resourceGroupName -l $location

Beheerde identiteit voor de service maken

U moet ook een beheerde identiteit maken die wordt gebruikt voor de installatiekopieënsjabloon (en mogelijk de build-VM van Azure Image Builder). In dit voorbeeld maken we een beheerde identiteit met inzendertoegang, maar u kunt de machtigingen of rol die aan de beheerde identiteit zijn toegewezen, verfijnen zolang u de machtigingen opneemt die nodig zijn voor de Azure Image Builder-service om goed te functioneren.

Zie de volgende documentatie voor meer informatie over de machtigingen die nodig zijn voor de Azure Image Builder-service: Azure VM Image Builder-machtigingen configureren met behulp van de Azure CLI

Raadpleeg de volgende documentatie voor meer informatie over hoe beheerde identiteiten kunnen worden toegewezen en gebruikt in Azure Image Builder: Naslaginformatie over VM Image Builder-sjablonen: Identiteit

Gebruik de volgende opdracht om de beheerde identiteit te maken die wordt gebruikt voor de afbeeldingssjabloon:

# Create user-assigned identity for VM Image Builder to access the storage account where the script is stored
identityName=aibBuiUserId$(date +'%s')
az identity create -g $resourceGroupName -n $identityName

# Get the identity client and principal ID
imgBuilderCliId=$(az identity show -g $resourceGroupName -n $identityName --query clientId -o tsv)

# Get the user identity URI that's needed for the template
imgBuilderId=/subscriptions/$subscriptionID/resourcegroups/$resourceGroupName/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$identityName

# Grant "Contributor" access to the user-assigned identity
az role assignment create \
    --assignee $imgBuilderCliId \
    --role "Contributor" \
    --scope /subscriptions/$subscriptionID/resourceGroups/$resourceGroupName

Als u VM Image Builder wilt gebruiken met Azure Compute Gallery, moet u een bestaande galerie en installatiekopieëndefinitie hebben. VM Image Builder maakt de galerie en installatiekopieëndefinitie niet voor u.

Als u nog geen galerie en definitie van installatiekopieën hebt die u wilt gebruiken, begint u met het maken ervan.

Maak eerst een galerie:

az sig create \
    -g $resourceGroupName \
    --gallery-name $acgName

Maak vervolgens een definitie van een installatiekopieën:

az sig image-definition create \
   -g $resourceGroupName \
   --gallery-name $acgName \
   --gallery-image-definition $imageDefName \
   --publisher myIbPublisher \
   --offer myOffer \
   --sku 18.04-LTS \
   --os-type Linux

De afbeeldingssjabloon maken

Download de JSON-voorbeeldsjabloon en configureer deze met uw variabelen. In de volgende afbeeldingssjabloon wordt een platforminstallatiekopieën als bron gebruikt, maar u kunt de bron wijzigen in een Azure Compute Gallery-installatiekopieën als u automatische builds van installatiekopieën wilt instellen wanneer er een nieuwe versie van de installatiekopieën aanwezig is in uw Azure Compute Gallery.

curl https://raw.githubusercontent.com/Azure/azvmimagebuilder/main/quickquickstarts/9_Setting_up_a_Trigger_with_a_Custom_Linux_Image/helloImageTemplate.json -o helloImageTemplateforTriggers.json
sed -i -e "s/<subscriptionID>/$subscriptionID/g" helloImageTemplateforTriggers.json
sed -i -e "s/<rgName>/$resourceGroupName/g" helloImageTemplateforTriggers.json
sed -i -e "s/<imageDefName>/$imageDefName/g" helloImageTemplateforTriggers.json
sed -i -e "s/<acgName>/$acgName/g" helloImageTemplateforTriggers.json
sed -i -e "s/<region1>/$location/g" helloImageTemplateforTriggers.json
sed -i -e "s/<region2>/$additionalregion/g" helloImageTemplateforTriggers.json
sed -i -e "s/<runOutputName>/$runOutputName/g" helloImageTemplateforTriggers.json
sed -i -e "s%<imgBuilderId>%$imgBuilderId%g" helloImageTemplateforTriggers.json

Vereisten voor afbeeldingssjablonen:

  • Dit source moet een platforminstallatiekopieën of een Azure Compute Gallery-installatiekopieën zijn (momenteel zijn alleen deze twee bronnen toegestaan)
  • Als u een platforminstallatiekopieën gebruikt, moet de versie in de bron zijn Latest. Voor een azure Compute Gallery-installatiekopieën moet het laatste deel van de resource-id met de versienaam worden ingesteld op Latest.
  • U kunt geen versie opgeven als u de installatiekopieën distribueert naar een Azure Compute Gallery. De versie wordt automatisch verhoogd.
  • Wanneer de bron is ingesteld op een Azure Compute Gallery-installatiekopieën en distribueren is ingesteld op een Azure Compute Gallery, kunnen de installatiekopieën van de brongalerie en de distributiegalerie niet hetzelfde zijn. De definitie-id van de azure Compute Gallery-installatiekopieën kan niet hetzelfde zijn voor zowel de installatiekopieën van de brongalerie als de distributiegalerieinstallatiekopieën.
  • De afbeeldingssjabloon moet 'Geslaagd' hebben in de provisioningState, wat betekent dat de sjabloon zonder problemen is gemaakt. Als de sjabloon niet is ingericht, kunt u geen trigger maken.

Nadat u de sjabloon hebt geconfigureerd, gebruikt u de volgende opdracht om de installatiekopieënconfiguratie naar de Azure Image Builder-service te verzenden:

az image builder create -g $resourceGroupName -n $imageTemplateName --image-template helloImageTemplateforTriggers.json

U kunt de volgende opdracht gebruiken om te controleren of de afbeeldingssjabloon is gemaakt:

az image builder show --name $imageTemplateName --resource-group $resourceGroupName

Notitie

Wanneer u de bovenstaande opdracht uitvoert, moet u provisioningState 'Geslaagd' zeggen, wat betekent dat de sjabloon zonder problemen is gemaakt. Als het provisioningState niet lukt, kunt u geen trigger maken met de afbeeldingssjabloon.

Brontrigger maken

Download de voorbeeldtriggersjabloon en configureer deze met uw variabelen. Met de volgende trigger wordt een nieuwe installatiekopieën gemaakt wanneer de broninstallatiekopieën worden bijgewerkt.

curl https://raw.githubusercontent.com/kof-f/azvmimagebuilder/main/quickquickstarts/9_Setting_up_a_Trigger_with_a_Custom_Linux_Image/trigger.json -o trigger.json
sed -i -e "s/<region1>/$location/g" trigger.json

Triggervereisten:

  • De locatie in de trigger moet gelijk zijn aan de locatie in de afbeeldingssjabloon. Dit is een vereiste van de az resource create cmdlet.
  • Momenteel wordt een kind van de triggers ondersteund. Dit is een SourceImage
  • We ondersteunen slechts één SourceImage-trigger per installatiekopie. Als u al een SourceImage-trigger op de installatiekopie hebt, kunt u geen nieuwe maken.
  • U kunt het kind veld niet bijwerken naar een ander type trigger. U moet de trigger verwijderen en opnieuw maken of een andere trigger maken met de juiste configuratie.

Gebruik de volgende opdracht om de trigger toe te voegen aan uw resourcegroep.

az image builder trigger create --name $ibTriggerName --resource-group $resourceGroupName --image-template-name $imageTemplateName --kind SourceImage

U kunt ook de volgende opdracht gebruiken om te controleren of de trigger is gemaakt:

az image builder trigger show --name $ibTriggerName --image-template-name $imageTemplateName --resource-group $resourceGroupName

Notitie

Wanneer u de opdracht boven de provisioningState bovenstaande opdracht uitvoert, betekent Succeededdit dat de trigger zonder problemen is gemaakt. In status, de code moet zeggen Healthy en het bericht moet zeggen Trigger is active.

Uw resources opschonen

De trigger verwijderen

Gebruik de volgende opdracht om de trigger te verwijderen:

az image builder trigger delete --name $ibTriggerName --image-template-name $imageTemplateName --resource-group $resourceGroupName

De afbeeldingssjabloon verwijderen

Gebruik de volgende opdracht om de afbeeldingssjabloon te verwijderen:

az image builder delete --name $imageTemplateName --resource-group $resourceGroupName

Volgende stappen

Bekijk de sjabloonreferentie voor Image Builder voor meer informatie.