Dela via


Så här använder du Azure Image Builder-utlösare för att konfigurera en automatisk avbildningsversion

Du kan använda utlösare i Azure Image Builder (AIB) för att konfigurera automatiska avbildningsversioner när vissa kriterier uppfylls i bygg-pipelinen.

Viktigt!

Observera att det finns en begränsning för antalet utlösare som kan tillåtas per region, särskilt 100 per region per prenumeration.

Kommentar

För närvarande har vi bara stöd för att ange en utlösare för en ny källbild, men vi förväntar oss att stödja olika typer av utlösare i framtiden.

Förutsättningar

Innan du konfigurerar din första utlösare kontrollerar du att du använder Azure Image Builder API version 2022-07-01.

Så här konfigurerar du en utlösare i Azure Image Builder

Registrera leverantörerna

Om du vill använda VM Image Builder med utlösare måste du registrera leverantörerna nedan. Kontrollera registreringen genom att köra följande kommandon:

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

Om utdata inte säger registrerade kör du följande kommandon:

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

Registrera funktionen för utlösare för automatisk avbildningsversion:

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

Ange variabler

Först måste du ange några variabler som du upprepade gånger ska använda i kommandon.

# 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)

Skapa resursgrupp

Nu måste du skapa en resursgrupp där du kan lagra avbildningsmallen. Använd följande kommando för att skapa din resursgrupp:

az group create -n $resourceGroupName -l $location

Skapa en hanterad identitet för tjänsten

Du måste också skapa en hanterad identitet som ska användas för avbildningsmallen (och eventuellt den virtuella Azure Image Builder-versionen). I det här exemplet skapar vi en hanterad identitet med åtkomsten "Deltagare", men du kan förfina behörigheterna eller rollen som tilldelats till den hanterade identiteten så länge du inkluderar de behörigheter som krävs för att Azure Image Builder-tjänsten ska fungera korrekt.

Mer information om de behörigheter som krävs för Azure Image Builder-tjänsten finns i följande dokumentation: Konfigurera Azure VM Image Builder-behörigheter med hjälp av Azure CLI

Mer information om hur hanterade identiteter kan tilldelas och användas i Azure Image Builder finns i följande dokumentation: Mallreferens för VM Image Builder: Identitet

Använd följande kommando för att skapa den hanterade identitet som ska användas för avbildningsmallen:

# 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

Om du vill använda VM Image Builder med Azure Compute Gallery måste du ha ett befintligt galleri och en bilddefinition. Vm Image Builder skapar inte galleriet och avbildningsdefinitionen åt dig.

Om du inte redan har ett galleri och en bilddefinition att använda börjar du med att skapa dem.

Skapa först ett galleri:

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

Skapa sedan en bilddefinition:

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

Skapa avbildningsmallen

Ladda ned JSON-exempelmallen och konfigurera den med dina variabler. Följande bildmall använder en plattformsbild som källa, men du kan ändra källan till en Azure Compute Gallery-avbildning om du vill konfigurera automatiska avbildningsversioner när det finns en ny avbildningsversion i 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

Krav för bildmall:

  • source Måste vara antingen en plattformsbild eller En Azure Compute Gallery-avbildning (endast dessa två källor tillåts för närvarande)
  • Om du använder en plattformsbild måste versionen i källan vara Latest. För en Azure Compute Gallery-avbildning måste den sista delen av resurs-ID:t som har versionsnamnet anges till Latest.
  • Du kan inte ange en version om du distribuerar avbildningen till ett Azure Compute-galleri. Versionen ökas automatiskt.
  • När källan är inställd på en Azure Compute Gallery-avbildning och distribution är inställd på ett Azure Compute-galleri, kan källgalleribilden och distributionsgalleribilden inte vara samma. Bilddefinitions-ID för Azure Compute Gallery kan inte vara detsamma för både källgalleribilden och distributionsgalleribilden.
  • Avbildningsmallen ska ha "Lyckades" i provisioningState, vilket innebär att mallen skapades utan problem. Om mallen inte har etablerats kan du inte skapa någon utlösare.

När du har konfigurerat mallen använder du följande kommando för att skicka avbildningskonfigurationen till Azure Image Builder-tjänsten:

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

Du kan använda följande kommando för att kontrollera att avbildningsmallen har skapats:

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

Kommentar

När du kör kommandot ovan provisioningState ska du säga "Lyckades", vilket innebär att mallen skapades utan problem. provisioningState Om inte säga lyckades, kommer du inte att kunna göra en utlösare använda avbildningsmallen.

Skapa källutlösare

Ladda ned exempelutlösarmallen och konfigurera den med dina variabler. Följande utlösare startar en ny avbildningsversion när källbilden uppdateras.

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

Krav för utlösare:

  • Platsen i utlösaren måste vara samma som platsen i bildmallen. Detta är ett krav för cmdleten az resource create .
  • Vi stöder för närvarande en kind utlösare, som är en "SourceImage"
  • Vi stöder bara en "SourceImage"-utlösare per bild. Om du redan har en "SourceImage"-utlösare på avbildningen kan du inte skapa en ny.
  • Du kan inte uppdatera fältet kind till en annan typ av utlösare. Du måste ta bort utlösaren och återskapa den eller skapa en annan utlösare med rätt konfiguration.

Använd följande kommando för att lägga till utlösaren i resursgruppen.

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

Du kan också använda följande kommando för att kontrollera att utlösaren har skapats:

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

Kommentar

När du kör kommandot ovanför provisioningState ska säga Succeeded, vilket innebär att utlösaren skapades utan problem. I statusska koden säga Healthy och meddelandet ska säga Trigger is active.

Rensa dina resurser

Ta bort utlösaren

Använd följande kommando för att ta bort utlösaren:

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

Ta bort avbildningsmallen

Använd följande kommando för att ta bort avbildningsmallen:

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

Nästa steg

Mer information finns i mallreferensen för Image Builder.