Share via


Verwenden von Azure Image Builder-Triggern zum Einrichten eines automatischen Imagebuilds

Verwenden von Triggern in Azure Image Builder (AIB) zum Einrichten automatischer Imagebuilds, wenn bestimmte Kriterien in einer Buildpipeline erfüllt werden.

Wichtig

Bitte beachten Sie, dass es eine Einschränkung für die Anzahl der pro Region zulässigen Trigger gibt, insbesondere 100 pro Region und Abonnement.

Hinweis

Derzeit unterstützen wir nur das Festlegen eines Triggers für ein neues Quellimage, aber wir erwarten, dass in Zukunft verschiedene Arten von Triggern unterstützt werden.

Voraussetzungen

Stellen Sie vor dem Einrichten des ersten Triggers sicher, dass Sie die Azure Image Builder-API-Version 01.07.2022 verwenden.

Einrichten eines Triggers in Azure Image Builder

Registrieren Sie die Anbieter

Um VM Image Builder mit Trigger zu verwenden, müssen Sie die unten aufgeführten Anbieter registrieren. Ü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.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

Registrieren Sie das Auto Image Build Trigger-Feature:

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

Festlegen von Variablen

Zunächst müssen Sie einige Variablen festlegen, die Sie wiederholt in Befehlen verwenden.

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

Ressourcengruppe erstellen

Nun müssen Sie eine Ressourcengruppe erstellen, in der Sie Ihre Imagevorlage speichern können. Verwenden Sie den folgenden Befehl, um Ihre Ressourcengruppe zu erstellen:

az group create -n $resourceGroupName -l $location

Erstellen einer verwalteten Identität für den Dienst

Außerdem müssen Sie eine verwaltete Identität erstellen, die für die Imagevorlage (und möglicherweise die Azure Image Builder-Build-VM) verwendet wird. In diesem Beispiel erstellen wir eine verwaltete Identität mit Mitwirkendem-Zugriff. Sie können jedoch die Berechtigungen oder die Rolle, die der verwalteten Identität zugewiesen sind, nach Ihren Wünschen verfeinern, solange Sie die Berechtigungen einschließen, die für die ordnungsgemäße Funktion des Azure Image Builder-Diensts erforderlich sind.

Weitere Informationen zu den Berechtigungen, die für den Azure Image Builder-Dienst erforderlich sind, finden Sie in der folgenden Dokumentation: Konfigurieren von 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 folgenden Dokumentation: VM Image Builder-Vorlagenreferenz: Identität

Verwenden Sie den folgenden Befehl, um die verwaltete Identität zu erstellen, die für die Bildvorlage verwendet wird:

# 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 einen Katalog:

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 18.04-LTS \
   --os-type Linux

Erstellen der Bildvorlage

Laden Sie die JSON-Vorschauvorlage herunter, und konfigurieren Sie diese mit Ihren Variablen. Die folgende Imagevorlage verwendet ein Plattformimage als Quelle. Sie können die Quelle jedoch in ein Azure Compute Gallery-Image ändern, wenn Sie automatische Imagebuilds einrichten möchten, sobald eine neue Imageversion in Ihrer Azure Compute Gallery 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 Plattformimage 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 lauten. Für ein Azure Compute Gallery-Image muss der letzte Teil der Ressourcen-ID mit dem Versionsnamen auf Latestfestgelegt 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 "Erfolgreich" in provisioningState aufweisen, was bedeutet, dass die Vorlage ohne 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 Befehl über provisioningState ausführen, sollte "Erfolgreich" angezeigt werden, was bedeutet, dass die Vorlage ohne Probleme erstellt wurde. Wenn der provisioningState nicht als "Erfolgreich" angezeigt wird, können Sie keinen Trigger dazu veranlassen, die Bildvorlage zu verwenden.

Erstellen eines Quelltriggers

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

Triggeranforderungen:

  • Der Speicherort im Trigger muss mit dem Speicherort in der Bildvorlage identisch sein. Dies ist eine Anforderung des az resource create Cmdlets.
  • Wir unterstützen derzeit einen kind der Trigger, bei dem es sich um ein "SourceImage" handelt
  • Wir unterstützen nur einen "SourceImage"-Trigger pro Bild. Wenn Sie bereits über einen "SourceImage"-Trigger für das Image verfügen, können Sie keinen neuen Trigger erstellen.
  • Sie können das kind Feld nicht auf einen anderen Triggertyp aktualisieren. 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 Befehl über provisioningState ausführen, sollte Succeeded angezeigt werden, was bedeutet, dass die Vorlage ohne Probleme erstellt wurde. In statussollte der Code Healthy anzeigen, und die Nachricht sollte Trigger is active. anzeigen

Bereinigen von Ressourcen

Löschen des Triggers

Verwenden Sie zum Löschen der Website den folgenden Befehl:

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

Weitere Informationen finden Sie in der Image Builder-Vorlagenreferenz.