Comment activer la création automatique d’image avec des déclencheurs Azure Image Builder
Vous pouvez utiliser des déclencheurs dans Azure Image Builder (AIB) pour activer la création automatique d’image quand certains critères sont remplis dans votre pipeline de build.
Important
Veuillez noter qu’il existe une restriction sur le nombre de déclencheurs autorisés par région, en particulier 100 par région et par abonnement.
Notes
Actuellement, nous ne prenons en charge que la configuration d’un déclencheur pour une nouvelle image source. Cependant, nous prévoyons de prendre en charge d’autres types de déclencheurs à l’avenir.
Remarque
Pour éviter les défaillances de génération inutile, la création automatique d’image via des déclencheurs est désactivée si la génération du modèle d’image a échoué plusieurs fois consécutivement (déclenchée manuellement ou automatiquement). Vous pouvez toujours générer manuellement le modèle d’image et, une fois qu’une génération manuelle réussit, les déclencheurs automatiques sont réactivés.
Prérequis
Avant de configurer votre premier déclencheur, vérifiez que vous utilisez l’API Azure Image Builder version 2022-07-01.
Comment configurer un déclencheur dans Azure Image Builder
Inscrire les fournisseurs
Pour utiliser Image Builder de machine virtuelle avec des déclencheurs, vous devez enregistrer les fournisseurs ci-dessous. Vérifiez votre inscription en exécutant les commandes suivantes :
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
Si la sortie ne retourne pas Registered, exécutez les commandes suivantes :
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
Enregistrer la fonctionnalité de déclencheurs de création automatique d’images :
az feature register --namespace Microsoft.VirtualMachineImages --name Triggers
Définition des variables
Tout d’abord, vous devez définir certaines variables que vous utiliserez à plusieurs reprises dans les commandes.
# 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)
Créer un groupe de ressources
Puis, vous devez créer un groupe de ressources dans lequel vous pouvez stocker votre modèle d’image. Utilisez la commande suivante pour créer votre groupe de ressources :
az group create -n $resourceGroupName -l $location
Créer une identité managée pour le service
Vous devez également créer une identité managée qui sera utilisée pour le modèle d’image (et potentiellement la machine virtuelle de build Azure Image Builder). Dans cet exemple, nous créons une identité managée avec un accès « Contributeur », mais vous pouvez affiner les autorisations ou le rôle attribué à l’identité managée comme vous le souhaitez tant que vous incluez les autorisations nécessaires pour que le service Azure Image Builder fonctionne correctement.
Pour plus d’informations sur les autorisations nécessaires pour le service Azure Image Builder, reportez-vous à la documentation suivante : Configurer les autorisations Azure VM Image Builder à l’aide d’Azure CLI
Pour plus d’informations sur la façon dont les identités managées peuvent être attribuées et utilisées dans Azure Image Builder, reportez-vous à la documentation suivante : Référence du modèle Vm Image Builder : Identité
Utilisez la commande suivante pour créer l’identité managée qui sera utilisée pour le modèle d’image :
# 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
Créer une galerie et une définition d’image
Pour utiliser VM Image Builder avec Azure Compute Gallery, vous devez disposer d’une galerie et d’une définition d’image existantes. VM Image Builder ne crée pas la galerie et la définition d’image pour vous.
Si vous n’avez pas encore de définition d’image et de galerie à utiliser, commencez par les créer.
Commencez par créer une galerie :
az sig create \
-g $resourceGroupName \
--gallery-name $acgName
Ensuite, créez une définition d’image :
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
Créer le modèle d’image
Téléchargez le modèle JSON d’exemple et configurez-le avec vos variables. Le modèle d’image suivant utilise une image de plateforme comme source, mais vous pouvez la remplacer par une image Azure Compute Gallery si vous voulez activer la création automatique d’image chaque fois qu’il y a une nouvelle version d’une image dans 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
Exigences du modèle d’image :
- Le
source
doit être soit une image Platform, soit une image Azure Compute Gallery (seules ces deux sources sont actuellement autorisées). - Si vous utilisez une image de plateforme, la version dans la source doit être
Latest
. Pour une image Azure Compute Gallery, la dernière partie de l’identifiant de la ressource qui contient le nom de la version doit êtreLatest
. - Vous ne pouvez pas spécifier de version si vous distribuez l’image dans Azure Compute Gallery. La version est automatiquement incrémentée.
- Lorsque la source est définie sur une image Azure Compute Gallery et que la distribution est définie sur une Azure Compute Gallery, l’image de la galerie source et l’image de la galerie de distribution ne peuvent pas être identiques. L’identifiant de définition de l’image Azure Compute Gallery ne peut pas être le même pour l’image de la galerie source et l’image de la galerie distribuée.
- Le modèle d’image doit afficher « Réussi » dans le
provisioningState
, ce qui signifie que le modèle a été créé sans problème. Si le modèle n’est pas approvisionné correctement, vous ne pourrez pas créer de déclencheur.
Après avoir configuré votre modèle, utilisez la commande suivante pour envoyer la configuration de l’image au service Azure Image Builder :
az image builder create -g $resourceGroupName -n $imageTemplateName --image-template helloImageTemplateforTriggers.json
Vous pouvez utiliser la commande suivante pour vérifier que le modèle d’image a bien été créé :
az image builder show --name $imageTemplateName --resource-group $resourceGroupName
Notes
Lorsque vous exécutez la commande ci-dessus, le provisioningState
doit indiquer « Réussi », ce qui signifie que le modèle a été créé sans problème. Si le provisioningState
n’indique pas réussi, vous ne serez pas en mesure d’effectuer un déclencheur à l’aide du modèle d’image.
Créer un déclencheur source
Téléchargez l’exemple de modèle de déclencheur et configurez-le avec vos variables. Le déclencheur suivant démarre une nouvelle génération d’image chaque fois que l’image source est mise à jour.
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
Configuration requise pour le déclencheur :
- L’emplacement dans le déclencheur doit être identique à l’emplacement dans le modèle d’image. Il s’agit d’une exigence du cmdlet
az resource create
. - Nous prenons actuellement en charge un
kind
de déclencheur, qui est une « SourceImage » - Nous ne prenons en charge qu’un seul déclencheur « SourceImage » par image. Si vous avez déjà un déclencheur « SourceImage » sur l’image, vous ne pouvez pas en créer un nouveau.
- Vous ne pouvez pas mettre à jour le
kind
champ vers un autre type de déclencheur. Vous devez supprimer le déclencheur et le recréer ou créer un autre déclencheur avec la configuration appropriée.
Utilisez la commande suivante pour ajouter le déclencheur à votre groupe de ressources.
az image builder trigger create --name $ibTriggerName --resource-group $resourceGroupName --image-template-name $imageTemplateName --kind SourceImage
Vous pouvez également utiliser la commande suivante pour vérifier que le déclencheur a bien été créé :
az image builder trigger show --name $ibTriggerName --image-template-name $imageTemplateName --resource-group $resourceGroupName
Notes
Lorsque vous exécutez la commande ci-dessus, provisioningState
doit indiquer Succeeded
, ce qui signifie que le déclencheur a été créé sans problème. Dans status
, le code devrait indiquer Healthy
et le message devrait indiquer Trigger is active.
Nettoyer vos ressources
Suppression du déclencheur
Utilisez la commande suivante pour supprimer le déclencheur :
az image builder trigger delete --name $ibTriggerName --image-template-name $imageTemplateName --resource-group $resourceGroupName
Suppression du modèle d’image
Utilisez la commande suivante pour supprimer le modèle d’image :
az image builder delete --name $imageTemplateName --resource-group $resourceGroupName
Étapes suivantes
Reportez-vous à la référence du modèle Image Builder pour plus d’informations.