Partager via


Comment utiliser les déclencheurs d’Azure Image Builder pour configurer la création automatique d’une image

Vous pouvez utiliser les déclencheurs dans Azure Image Builder (AIB) pour configurer des builds automatiques d’images lorsque 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.

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

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 souhaitez configurer des builds automatiques d’images chaque fois qu’il existe une nouvelle version d’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 être Latest.
  • 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.