Tâche DevOps du service Azure VM Image Builder (préversion)
S’applique à : ✔️ Machines virtuelles Linux ✔️ Groupes identiques flexibles
Dans cet article, vous apprenez à utiliser une tâche Azure DevOps pour injecter des artefacts de build dans une image de machine virtuelle afin de pouvoir installer et configurer votre application et votre système d’exploitation.
Important
La tâche Azure DevOps pour VM Image Builder est actuellement en préversion. Pour connaître les conditions juridiques qui s’appliquent aux fonctionnalités Azure en version bêta, en préversion ou plus généralement non encore en disponibilité générale, consultez l’Avenant aux conditions d’utilisation des préversions de Microsoft Azure.
Versions des tâches DevOps
À ce stade, il existe deux tâches DevOps Azure VM Image Builder :
Tâche VM Image Builder stable : Dernière build stable qui a été testée et qui ne signale aucun problème de Règlement général sur la protection des données (RGPD).
Tâche VM Image Builder instable : Nous fournissons une tâche dite instable pour vous permettre de tester les dernières mises à jour et fonctionnalités avant de publier le code de la tâche comme stable. Après environ une semaine, en l’absence de problème de télémétrie ou signalé par le client, nous promouvons le code de la tâche en code stable.
Prérequis
Notes
La tâche VM Image Builder ne prend actuellement pas en charge le redémarrage de Windows ni l’exécution de commandes avec élévation de privilèges en tant qu’administrateur. Autrement dit, la tâche ne convient pas aux scénarios Azure Virtual Desktop ni aux personnalisations Windows qui nécessitent ces fonctionnalités. Pour utiliser DevOps avec VM Image Builder, imbriquez le modèle dans une tâche Azure Resource Manager et utilisez Azure CLI ou les tâches PowerShell.
Avant de commencer, vous devez :
Installer la tâche DevOps stable à partir de Visual Studio Marketplace.
Disposer d’un compte Azure DevOps Services (anciennement Visual Studio Team Services ou VSTS) et d’un pipeline de build créé.
Inscrire et activer les exigences de la fonctionnalité VM Image Builder dans l’abonnement utilisé par les pipelines :
Créer un compte de stockage Azure standard dans le groupe de ressources d’image source. Vous pouvez utiliser d’autres groupes de ressources ou comptes de stockage. Le compte de stockage est utilisé pour transférer les artefacts de build à partir de la tâche DevOps vers l’image.
# Azure PowerShell $timeInt=$(get-date -UFormat "%s") $storageAccName="aibstorage"+$timeInt $location=westus # Create a storage account and blob in the resource group New-AzStorageAccount -ResourceGroupName $strResourceGroup -Name $storageAccName -Location $location -SkuName Standard_LRS
# The Azure CLI location=westus scriptStorageAcc=aibstordot$(date +'%s') # Create a storage account and blob in the resource group az storage account create -n $scriptStorageAcc -g $strResourceGroup -l $location --sku Standard_LRS
Ajouter une tâche au pipeline de mise en production
Sélectionnez Pipeline de mise en production>Modifier.
Dans l’Agent utilisateur, sélectionnez le signe plus (+) à ajouter et recherchez Image Builder.
Sélectionnez Ajouter.
Dans les sections suivantes, définissez les propriétés de la tâche.
Abonnement Azure
Dans la liste déroulante, sélectionnez l’abonnement que vous souhaitez que VM Image Builder exécute. Utilisez l’abonnement où se trouvent vos images sources et où les images doivent être distribuées. Vous devez accorder au contributeur de VM Image Builder l’accès à l’abonnement ou au groupe de ressources.
Groupe de ressources
Utilisez le groupe de ressources dans lequel l’artefact du modèle d’image temporaire sera stocké. Lors de la création d’un artefact de modèle, un autre groupe de ressources VM Image Builder temporaire, IT_<DestinationResourceGroup>_<TemplateName>_guid
, est créé. Le groupe de ressources temporaire stocke les métadonnées de l’image, tels que les scripts. À la fin de la tâche, l’artefact du modèle d’image et le groupe de ressources VM Image Builder temporaire sont supprimés.
Emplacement
L’emplacement est la région dans laquelle VM Image Builder s’exécutera. Seul un nombre défini de régions sont prises en charge. Les images sources doivent être présentes à cet emplacement. Par exemple, si vous utilisez Azure Compute Gallery (anciennement Shared Image Gallery), un réplica doit exister dans cette région.
Identité managée (obligatoire)
VM Image Builder nécessite une identité managée, qu’il utilise pour lire les images personnalisées sources, se connecter au Stockage Azure et créer des images personnalisées. Pour plus d’informations, consultez En savoir plus sur VM Image Builder.
Prise en charge des réseaux virtuels
Vous pouvez configurer la machine virtuelle créée pour qu’elle figure dans un réseau virtuel spécifique. Quand vous configurez la tâche, fournissez l’ID de ressource d’un sous-réseau préexistant dans le champ d’entrée Configuration du réseau virtuel (facultatif). Omettez l’ID de ressource si aucun réseau virtuel spécifique ne doit être utilisé. Pour plus d’informations, consultez Options réseau du service Azure VM Image Builder.
Source
Les images sources doivent être des systèmes d’exploitation VM Image Builder pris en charge. Vous pouvez choisir des images personnalisées existantes dans la région où VM Image Builder s’exécute :
Image managée : transmettez l’ID de ressource. Par exemple :
/subscriptions/<subscriptionID>/resourceGroups/<rgName>/providers/Microsoft.Compute/images/<imageName>
Compute Gallery : transmettez l’ID de ressource de la version de l’image. Par exemple :
/subscriptions/$subscriptionID/resourceGroups/$sigResourceGroup/providers/Microsoft.Compute/galleries/$sigName/images/$imageDefName/versions/<versionNumber>
Si vous devez obtenir la dernière version de Compute Gallery, utilisez une tâche Azure PowerShell ou Azure CLI pour l’obtenir et définir une variable DevOps. Utilisez cette variable dans la tâche DevOps VM Image Builder. Pour plus d’informations, consultez les exemples dans Obtenir l’ID de ressource de la dernière version de l’image.
(Place de marché) Image de base : utilisez la liste déroulante des images populaires, qui utilise toujours la dernière version des systèmes d’exploitation pris en charge.
Si l’image de base ne figure pas dans la liste, vous pouvez spécifier l’image exacte en utilisant
Publisher:Offer:Sku
.(Facultatif) Version de l’image de base : vous pouvez fournir la version de l’image que vous souhaitez utiliser. La version par défaut est
latest
.
Personnaliser
Les sections suivantes décrivent différentes façons de personnaliser les tâches.
Fournisseur
Initialement, deux personnalisateurs sont pris en charge, Shell et PowerShell. Seule la valeur inline est pris en charge. Pour télécharger des scripts, vous pouvez transmettre des commandes inline.
Pour votre système d’exploitation, sélectionnez PowerShell ou Shell.
Tâche Windows Update
Pour Windows uniquement, la tâche exécute Windows Update à la fin des personnalisations. Elle gère également les redémarrages requis.
La tâche exécute la configuration Windows Update suivante :
"type": "WindowsUpdate",
"searchCriteria": "IsInstalled=0",
"filters": [
"exclude:$_.Title -like '*Preview*'",
"include:$true"
La tâche installe les mises à jour Windows importantes et recommandées qui ne sont pas des préversions.
Gestion des redémarrages
La tâche DevOps ne prend actuellement pas en charge le redémarrage des builds Windows. Si vous essayez de redémarrer avec du code PowerShell, la build échoue. Toutefois, vous pouvez utiliser du code pour redémarrer des builds Linux.
Chemin d’accès à la build
La tâche est conçue pour être en mesure d’injecter des artefacts de version de build DevOps dans l’image. Pour que cela fonctionne, vous devez configurer un pipeline de build. Dans la configuration du pipeline de mise en production, ajoutez le référentiel des artefacts de build.
Sélectionnez le bouton Chemin d’accès à la build pour choisir le dossier de build que vous souhaitez placer sur l’image. La tâche VM Image Builder copie tous les fichiers et répertoires qu’elle contient. Lorsque l’image est créée, VM Image Builder déploie les fichiers et les répertoires dans différents chemins d’accès, selon le système d’exploitation.
Important
Lorsque vous ajoutez un artefact de référentiel, vous pouvez constater que le nom du répertoire est précédé d’un caractère de soulignement (_). Le trait de soulignement peut provoquer des problèmes avec les commandes inlined. Veillez à utiliser les guillemets appropriés dans les commandes.
L’exemple suivant explique son fonctionnement :
Pour Windows : Les fichiers existent dans le lecteur C:. Un répertoire nommé buildArtifacts est créé et comprend le répertoire webapp.
Pour Linux : Les fichiers existent dans le répertoire
/tmp
. Le répertoirewebapp
est créé et inclut tous les fichiers et répertoires. Comme il s’agit d’un répertoire temporaire, vous devez déplacer les fichiers hors de celui-ci. Sinon, ils seront supprimés.
Script de personnalisation inlined
Pour Windows : vous pouvez entrer des commandes inline PowerShell séparées par des virgules. Si vous souhaitez exécuter un script dans votre répertoire de build, vous pouvez utiliser :
& 'c:\buildArtifacts\webapp\webconfig.ps1'
Vous pouvez référencer plusieurs scripts ou ajouter d’autres commandes. Par exemple :
& 'c:\buildArtifacts\webapp\webconfig.ps1' & 'c:\buildArtifacts\webapp\installAgent.ps1'
Pour Linux : les artefacts de build sont placés dans le répertoire /tmp. Toutefois, sur un grand nombre de systèmes d’exploitation Linux, en cas de redémarrage, le contenu du répertoire /tmp est supprimé. Si vous souhaitez que les artefacts existent dans l’image, vous devez créer un autre répertoire et les y copier. Par exemple :
sudo mkdir /lib/buildArtifacts sudo cp -r "/tmp/_ImageBuilding/webapp" /lib/buildArtifacts/.
Si vous êtes d’accord avec l’utilisation du répertoire /tmp, vous pouvez exécuter le script à l’aide du code suivant :
# Grant execute permissions to run scripts sudo chmod +x "/tmp/_ImageBuilding/webapp/coreConfig.sh" echo "running script" sudo . "/tmp/AppsAndImageBuilderLinux/_WebApp/coreConfig.sh"
Qu’advient-il des artefacts de build après la génération de l’image ?
Notes
VM Image Builder ne supprime pas automatiquement les artefacts de build. Nous vous suggérons vivement d’utiliser toujours du code pour supprimer les artefacts de build.
Pour Windows : VM Image Builder déploie des fichiers dans le répertoire C:\buildArtifacts. Comme le répertoire est conservé, vous devez le supprimer en exécutant un script. Par exemple :
# Clean up buildArtifacts directory Remove-Item -Path "C:\buildArtifacts\*" -Force -Recurse # Delete the buildArtifacts directory Remove-Item -Path "C:\buildArtifacts" -Force
Pour Linux : les artefacts de build sont placés dans le répertoire /tmp. Toutefois, sur un grand nombre de systèmes d’exploitation Linux, le contenu du répertoire /tmp est supprimé au redémarrage. Nous vous suggérons d’utiliser du code pour supprimer le contenu et de ne pas compter sur le système d’exploitation pour supprimer le contenu. Par exemple :
sudo rm -R "/tmp/AppsAndImageBuilderLinux"
Longueur totale de la build d’image
La longueur totale ne peut pas encore être modifiée dans la tâche de pipeline DevOps. Il utilise la valeur par défaut de 240 minutes. Si vous souhaitez augmenter buildTimeoutInMinutes, vous pouvez utiliser une tâche Azure CLI dans le pipeline de mise en production. Configurez la tâche pour copier un modèle et l’envoyer. Pour obtenir un exemple de solution, consultez Utiliser des variables d’environnement et des paramètres avec VM Image Builder, ou utilisez Azure PowerShell.
Compte de stockage
Sélectionnez le compte de stockage que vous avez créé dans les composants requis. Si vous ne la voyez pas dans la liste, VM Image Builder ne dispose pas des autorisations appropriées.
Au démarrage de la build, VM Image Builder crée un conteneur appelé imagebuilder-vststask, où les artefacts de build du référentiel sont stockés.
Notes
Vous devez supprimer manuellement le compte de stockage ou le conteneur après chaque build.
Distribuer
Les trois types de distribution suivants sont pris en charge.
Image managée
ID de ressource :
/subscriptions/<subscriptionID>/resourceGroups/<rgName>/providers/Microsoft.Compute/images/<imageName>
Emplacements
Azure Compute Gallery
Compute Gallery doit déjà exister.
ID de ressource :
/subscriptions/<subscriptionID>/resourceGroups/<rgName>/providers/Microsoft.Compute/galleries/<galleryName>/images/<imageDefName>
Régions : liste des régions, séparées par des virgules. Par exemple,
westus
,eastus
,centralus
.
Disque dur virtuel
Vous ne pouvez pas transmettre de valeurs à cela. VM Image Builder émet le disque dur virtuel vers le groupe de ressources VM Image Builder temporaire, IT_<DestinationResourceGroup>_<TemplateName>
, dans le conteneur vhds. Quand vous démarrez la build de mise en production, VM Image Builder émet des journaux. Une fois que VM Image Builder a terminé, il émet l’URL du disque dur virtuel.
Paramètres facultatifs
Vous pouvez modifier le paramètre Taille de la machine virtuelle en remplaçant sa valeur par défaut Standard_D1_v2. Vous pouvez le faire pour réduire le temps de personnalisation total. Vous pouvez également créer des images qui dépendent de certaines tailles de machine virtuelle, telles que GPU (unité de traitement graphique), HPC (calcul haute performance), etc.
Fonctionnement de la tâche
Lorsque vous créez la mise en production, la tâche crée un conteneur dans le compte de stockage, nommé imagebuilder-vststask. Elle compresse et charge vos artefacts de build, puis crée un jeton de signature d’accès partagé pour le fichier zip.
La tâche utilise les propriétés qui luis sont transmises pour créer l’artefact du modèle VM Image Builder. Cette tâche effectue les actions suivantes :
Elle télécharge le fichier zip de l’artefact de build et tous les autres scripts associés. Les fichiers sont enregistrés dans un compte de stockage dans le groupe de ressources VM Image Builder temporaire
IT_<DestinationResourceGroup>_<TemplateName>
.Elle crée un modèle précédé de t_ et d’un entier monotone à 10 chiffres. Le modèle est enregistré dans le groupe de ressources que vous avez sélectionné, et il existe pendant toute la durée de la build dans le groupe de ressources.
Exemple de sortie :
start reading task parameters...
found build at: /home/vsts/work/r1/a/_ImageBuilding/webapp
end reading parameters
getting storage account details for aibstordot1556933914
created archive /home/vsts/work/_temp/temp_web_package_21475337782320203.zip
Source for image: { type: 'SharedImageVersion',
imageVersionId: '/subscriptions/<subscriptionID>/resourceGroups/<rgName>/providers/Microsoft.Compute/galleries/<galleryName>/images/<imageDefName>/versions/<imgVersionNumber>' }
template name: t_1556938436xxx
starting put template...
Lors du démarrage de la génération de l’image, l’état d’exécution est signalé dans les journaux des mises en production :
starting run template...
Quand la build d’image se termine, la sortie est similaire au texte suivant :
2019-05-06T12:49:52.0558229Z starting run template...
2019-05-06T13:36:33.8863094Z run template: Succeeded
2019-05-06T13:36:33.8867768Z getting runOutput for SharedImage_distribute
2019-05-06T13:36:34.6652541Z ==============================================================================
2019-05-06T13:36:34.6652925Z ## task output variables ##
2019-05-06T13:36:34.6658728Z $(imageUri) = /subscriptions/<subscriptionID>/resourceGroups/aibwinsig/providers/Microsoft.Compute/galleries/my22stSIG/images/winWAppimages/versions/0.23760.13763
2019-05-06T13:36:34.6659989Z ==============================================================================
2019-05-06T13:36:34.6663500Z deleting template t_1557146959485...
2019-05-06T13:36:34.6673713Z deleting storage blob imagebuilder-vststask\webapp/18-1/webapp_1557146958741.zip
2019-05-06T13:36:34.9786039Z blob imagebuilder-vststask\webapp/18-1/webapp_1557146958741.zip is deleted
2019-05-06T13:38:37.4884068Z delete template: Succeeded
Le modèle d’image et IT_<DestinationResourceGroup>_<TemplateName>
sont supprimés.
Vous pouvez prendre la variable $(imageUri)
Azure DevOps Services (anciennement Visual Studio Team Services ou VSTS) et l’utiliser dans la tâche suivante ou simplement utiliser la valeur et générer une machine virtuelle.
Variables DevOps de sortie
Voici l’éditeur, l’offre, la référence SKU et la version de l’image de la Place de marché source :
$(pirPublisher)
$(pirOffer)
$(pirSku)
$(pirVersion)
Voici l’URI de l’image, qui est l’ID de ressource de l’image distribuée :
$(imageUri)
Questions fréquentes (FAQ)
Puis-je utiliser un modèle d’image existant que j’ai déjà créé, en dehors de DevOps ?
Pas pour l'instant.
Puis-je spécifier le nom du modèle d’image ?
Non. Un nom de modèle unique est utilisé, puis supprimé.
La tâche VM Image Builder a échoué. Comment puis-je résoudre ce problème ?
En cas d’échec d’une build, la tâche DevOps ne supprime pas le groupe de ressources intermédiaire. Vous pouvez accéder au groupe de ressources de mise en lots qui contient le journal de personnalisation de la build.
Vous voyez une erreur dans le journal DevOps pour la tâche VM Image Builder et le message contient l’emplacement du fichier customization.log. Par exemple :
Pour plus d’informations, consultez Résoudre les problèmes du service VM Image Builder.
Après avoir examiné l’échec, vous pouvez supprimer le groupe de ressources intermédiaire. Tout d’abord, supprimez l’artefact de ressource de modèle VM Image Builder. L’artefact est précédé de t_ et se trouve dans le journal de génération des tâches DevOps :
...
Source for image: { type: 'SharedImageVersion',
imageVersionId: '/subscriptions/<subscriptionID>/resourceGroups/<rgName>/providers/Microsoft.Compute/galleries/<galleryName>/images/<imageDefName>/versions/<imgVersionNumber>' }
...
template name: t_1556938436xxx
...
L’artefact de ressource du modèle VM Image Builder se trouve dans le groupe de ressources spécifié initialement dans la tâche. Une fois le résolution des problèmes terminée, supprimez l’artefact. Si vous le supprimez à l’aide du portail Azure, dans le groupe de ressources, sélectionnez Afficher les types masqués pour afficher l’artefact.
Étapes suivantes
Pour plus d’informations, consultez Vue d’ensemble de VM Image Builder.