So aktivieren Sie die automatische Imageerstellung mit Azure Image Builder-Triggern

Sie können Trigger in Azure Image Builder (AIB) zum Aktivieren der automatischen Imageerstellung verwenden, wenn bestimmte Kriterien in einer Buildpipeline erfüllt werden.

Wichtig

Es gibt eine Beschränkung von 100 Triggern pro Region pro Abonnement.

Hinweis

Um unnötige Buildfehler zu vermeiden, wird die durch Trigger ausgelöste automatische Erstellung von Images deaktiviert, wenn der Build der Imagevorlage mehrmals hintereinander fehlschlägt (unabhängig davon, ob er manuell oder automatisch ausgelöst wurde). Sie können die Bildvorlage weiterhin manuell erstellen. Sobald ein manueller Build erfolgreich war, werden die automatischen Trigger reaktiviert.

Voraussetzungen

Stellen Sie vor dem Einrichten des ersten Triggers sicher, dass Sie Azure Image Builder-API, Version 2022-07-01 oder höher, verwenden.

Einrichten eines Triggers in Azure Image Builder

Registrieren Sie die Anbieter

Um VM Image Builder mit Triggern zu verwenden, registrieren Sie die folgenden Anbieter. Überprüfen Sie Ihre Registrierung, indem Sie die folgenden Befehle ausführen:

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

Wenn die Ausgabe nicht registriert lautet, führen Sie die folgenden Befehle aus:

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

Registrieren Sie das Auto Image Build Trigger-Feature:

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

Festlegen von Variablen

Legen Sie zunächst einige Variablen fest, die Sie wiederholt in Befehlen verwenden.

# Resource group name - ibTriggersTestRG in this example
resourceGroupName=ibTriggersRG
# Datacenter location - Central US in this example
location=centralus
# Additional region to replicate the image to - West US in this example
additionalregion=westus
# 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)

Ressourcengruppe erstellen

Erstellen Sie eine Ressourcengruppe, in der Sie Ihre Bildvorlage speichern können:

az group create -n $resourceGroupName -l $location

Erstellen einer verwalteten Identität für den Dienst

Erstellen Sie eine verwaltete Identität für die Imagevorlage (und möglicherweise die Azure Image Builder-Build-VM). In diesem Beispiel erhält die verwaltete Identität den Zugriff "Mitwirkender". Sie können jedoch die Berechtigungen oder Rollen verfeinern, solange Sie die berechtigungen angeben, die für den Azure Image Builder-Dienst erforderlich sind, um ordnungsgemäß zu funktionieren.

Weitere Informationen zu den Berechtigungen, die für den Azure Image Builder-Dienst erforderlich sind, finden Sie unter Konfigurieren Azure VM Image Builder-Berechtigungen mithilfe der Azure CLI.

Weitere Informationen dazu, wie verwaltete Identitäten in Azure Image Builder zugewiesen und verwendet werden können, finden Sie in der Vorlagenreferenz für VM Image Builder: Identity.

Führen Sie die folgenden Befehle aus, um die verwaltete Identität zu erstellen:

# 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

Zum Verwenden von VM Image Builder mit Azure Compute Gallery benötigen Sie einen vorhandenen Katalog und eine Imagedefinition. Der Katalog und die Imagedefinition werden nicht von VM Image Builder für Sie erstellt.

Wenn Sie noch nicht über einen zu verwendenden Katalog und eine Imagedefinition verfügen, erstellen Sie diese zunächst.

Erstellen Sie zunächst eine Galerie:

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

Erstellen Sie anschließend eine Imagedefinition:

az sig image-definition create \
   -g $resourceGroupName \
   --gallery-name $acgName \
   --gallery-image-definition $imageDefName \
   --publisher myIbPublisher \
   --offer myOffer \
   --sku 22_04-lts-gen2 \
   --os-type Linux \
   --hyper-v-generation V2

Erstellen der Bildvorlage

Laden Sie die JSON-Vorschauvorlage herunter, und konfigurieren Sie diese mit Ihren Variablen. Die folgende Bildvorlage verwendet ein Plattformbild als Quelle, Sie können die Quelle jedoch in ein Azure Compute Gallery-Bild ändern, um die automatische Bilderstellung jederzeit zu aktivieren, wenn eine neue Bildversion in Ihrem Katalog vorhanden ist.

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

Anforderungen an Bildvorlagen:

  • Das source muss entweder ein Plattform-Image oder ein Azure Compute Gallery-Image sein (nur diese beiden Quellen sind derzeit zulässig)
  • Wenn Sie ein Plattformimage verwenden, muss die Version in der Quelle Latest sein. Für ein Azure Compute Gallery-Image muss der letzte Teil der Ressourcen-ID, der den Versionsnamen enthält, auf Latest gesetzt werden.
  • Sie können keine Version angeben, wenn Sie das Image an eine Azure Compute Gallery verteilen. Die Version wird automatisch erhöht.
  • Wenn die Quelle auf ein Azure Compute Gallery-Image festgelegt ist und die Verteilung auf eine Azure Compute Gallery festgelegt ist, dürfen das Quellkatalogimage und das Image des Verteilungskatalogs nicht identisch sein. Die Imagedefinitions-ID des Azure Compute Gallery darf für das Quellkatalogimage und für das Verteilungskatalogimage nicht identisch sein.
  • Die Bildvorlage sollte in dem provisioningState den Wert "Succeeded" aufweisen, was bedeutet, dass die Vorlage ohne jegliche Probleme erstellt wurde. Wenn die Vorlage nicht erfolgreich bereitgestellt wurde, können Sie keinen Trigger erstellen.

Nachdem Sie Ihre Vorlage konfiguriert haben, verwenden Sie den folgenden Befehl, um die Imagekonfiguration an den Azure Image Builder-Dienst zu übermitteln:

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

Mit dem folgenden Befehl können Sie überprüfen, ob die Imagevorlage erfolgreich erstellt wurde:

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

Hinweis

Wenn Sie den obigen Befehl ausführen, sollte bei provisioningState „Erfolgreich abgeschlossen“ angezeigt werden; das bedeutet, dass die Vorlage ohne Probleme erstellt wurde. Wenn provisioningState nicht den Status „Succeeded“ anzeigt, können Sie keinen Trigger so konfigurieren, dass er die Imagevorlage verwendet.

Quelltrigger erstellen

Laden Sie die Trigger-Vorschauvorlage herunter, und konfigurieren Sie diese mit Ihren Variablen. Der folgende Trigger startet einen neuen Imagebuild, wenn das Quellimage aktualisiert wird.

curl https://raw.githubusercontent.com/Azure/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

Triggeranforderungen:

  • Die Position im Trigger muss mit der Position in der Bildvorlage übereinstimmen.
  • Derzeit wird nur ein kind Trigger unterstützt: SourceImage.
  • Es wird nur ein SourceImage Trigger pro Bild unterstützt. Wenn Sie bereits über einen SourceImage Trigger für das Bild verfügen, können Sie keinen neuen erstellen.
  • Sie können das Feld kind nicht in einen anderen Triggertyp ändern. Sie müssen den Trigger löschen und neu erstellen oder einen anderen Trigger mit der entsprechenden Konfiguration erstellen.

Verwenden Sie den folgenden Befehl, um den Trigger Ihrer Ressourcengruppe hinzuzufügen.

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

Sie können auch den folgenden Befehl verwenden, um zu überprüfen, ob der Trigger erfolgreich erstellt wurde:

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

Hinweis

Wenn Sie den obigen Befehl ausführen, sollte provisioningStateSucceeded lauten, was bedeutet, dass der Trigger ohne Probleme erstellt wurde. In status sollte der Code Healthy lauten und die Meldung sollte Trigger is active. lauten

Bereinigen von Ressourcen

Trigger löschen

Verwenden Sie den folgenden Befehl, um den Trigger zu löschen:

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

Löschen der Bildvorlage

Verwenden Sie den folgenden Befehl, um die Bildvorlage zu löschen:

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

Nächste Schritte