Configurer les scripts de déploiement pour les images de Managed DevOps Pools

Les pools DevOps managés permettent d'exécuter un script PowerShell (Windows) ou un script Bash (Linux) pour une image dans un pool avant qu'elle ne soit affectée à un agent pour exécuter un travail. Cette fonctionnalité permet des scénarios tels que l’installation d’autorités de certification racines approuvées et la définition de variables d’environnement.

Important

Les scripts d’approvisionnement sont actuellement en préversion. La fonctionnalité peut changer avant la disponibilité générale.

Les pools DevOps managés utilisent une identité managée associée à votre pool pour télécharger les scripts de Stockage Blob Azure vers l’agent et charger les journaux de script d’approvisionnement pour la résolution des problèmes. Le script d’approvisionnement s’exécute au démarrage de l’agent et vous pouvez configurer l’agent pour redémarrer après l’exécution du script.

Pour configurer une image de pool DevOps managée pour exécuter un script d’approvisionnement, procédez comme suit :

  1. Créez deux conteneurs blob dans un compte de stockage Blob : un pour les scripts de provisionnement et les fichiers associés, et un pour charger les journaux des scripts de provisionnement. Téléchargez vos scripts de provisionnement et tous les fichiers associés dans le conteneur d’objets blob de scripts.
  2. Associez une identité managée à votre pool DevOps managé et attribuez les rôles requis à l’identité managée dans les étendues appropriées afin que l’agent puisse lire les scripts d’approvisionnement et charger les journaux de script d’approvisionnement.
  3. Configurez vos images pour utiliser les scripts d’approvisionnement souhaités.

Prerequisites

  • Un compte Stockage Blob Azure. Le type de compte stockage Azure pris en charge pour les scripts d’approvisionnement de pools DevOps managés est standard v2 à usage général.
  • Pool DevOps managé avec une identité managée associée. Si votre pool DevOps managé n’a pas d’identité managée, créez-en une en suivant les étapes décrites dans Configurer une identité managée pour votre pool DevOps managé.

Créer les conteneurs d’objets blob

Managed DevOps Pools télécharge des scripts de provisionnement et leurs fichiers associés à partir d’objets blob situés dans un conteneur d’un compte Stockage Blob. Managed DevOps Pools nécessite deux conteneurs blob dans le compte de stockage : un pour télécharger le script de provisionnement et les fichiers associés, et un pour charger les journaux du script de provisionnement.

Créez les deux conteneurs d’objets blob suivants dans votre compte Stockage Blob.

conteneur Stockage Blob Description
Conteneur d’objets blob pour les scripts. Si vous ne spécifiez pas de nom personnalisé dans le point d’entrée (provisioningScriptEntryPoint) lors de la configuration de votre image pour exécuter un script d’approvisionnement, le nom par défaut est provisioningscript. Contient le script de provisionnement et tous les fichiers associés. Le script d’approvisionnement doit être nommé Startup.ps1 pour les images Windows ou Startup.sh pour les images Linux.
Conteneur de journaux d’activité de script d’approvisionnement. Vous ne pouvez pas configurer ce nom de conteneur ; il doit être mdpprovisioningscriptlogs.

Les pools DevOps managés peuvent créer automatiquement le mdpprovisioningscriptlogs conteneur d’objets blob, mais pour un accès avec privilèges minimum, nous vous recommandons de créer le mdpprovisioningscriptlogs conteneur manuellement. Pour plus d’informations, consultez Attribuer des rôles Azure à l’identité managée.
Contient les journaux stdout et stderr générés par le script de provisionnement, ainsi qu’une copie du script. Les noms des objets BLOB servent de répertoire virtuel en utilisant le nom de l’ordinateur de l’agent.

Téléchargez votre script de provisionnement et tous les fichiers associés dans le conteneur d’objets blob scripts. Le script d’approvisionnement doit être nommé Startup.ps1 pour les images Windows ou Startup.sh pour les images Linux. Vous pouvez inclure dans le blob tous les fichiers de support requis par les scripts. Au démarrage de l’agent, ces fichiers sont téléchargés dans le répertoire de travail de l’agent et le script d’approvisionnement est exécuté à partir de cet emplacement.

Attribuer des rôles Azure à l’identité managée

Les pools DevOps managés utilisent une identité managée pour accéder aux conteneurs Blob pour les scripts de provisionnement et les journaux des scripts de provisionnement. Vous devez associer une identité managée à votre pool DevOps managé et affecter les rôles spécifiés à l’identité managée dans les étendues décrites dans cette section. Si votre pool DevOps managé n’a pas d’identité managée, créez-en une en suivant les étapes décrites dans Configurer une identité managée pour votre pool DevOps managé.

  • Si votre pool DevOps managé est associé à une seule identité managée, cette identité est utilisée pour accéder au script de provisionnement et aux conteneurs des journaux du script de provisionnement.
  • Si votre pool DevOps managé possède plusieurs identités managées associées, désignez une identité managée spécifique à utiliser pour les scripts d’approvisionnement en spécifiant la propriété ID client d’identité managée (provisioningScriptManagedIdentityResourceId) lors de la configuration de votre image pour utiliser un script d’approvisionnement.

Attribuez les rôles dans le tableau suivant à l’identité managée associée du pool DevOps managé dans les étendues spécifiées pour permettre à l’agent de télécharger les scripts et de charger les journaux de script d’approvisionnement. Pour plus d’informations sur l’attribution de rôles Azure, consultez Étapes d’attribution d’un rôle Azure.

Role Scope
Lecteur de données des Blobs de stockage Étendue du conteneur d’objets blob de script. Si vous ne spécifiez pas de nom dans le point d’entrée (provisioningScriptEntryPoint) lors de la configuration de votre image pour exécuter un script d’approvisionnement, le nom par défaut est provisioningscript.
Contributeur aux données Blob du stockage Pour un accès avec privilèges minimum, créez manuellement le conteneur de journaux de script d’approvisionnement (mdpprovisioningscriptlogs) et attribuez le rôle à l’identité managée dans cette étendue de conteneur d’objets blob.

Si vous souhaitez que les pools DevOps managés créent le conteneur, attribuez le rôle à l’identité managée dans l’étendue du compte de stockage. Si vous attribuez le rôle Contributeur aux données Blob du stockage à l’échelle du compte de stockage, vous n’avez pas besoin d’attribuer le rôle Lecteur des données Blob du stockage à l’échelle du conteneur du script.

Configurer votre image pour utiliser le script de provisionnement

Pour utiliser un script d’approvisionnement avec une image, configurez les propriétés d’image suivantes.

Propriété Description
ID de ressource du compte de stockage
provisioningScriptStorageAccountResourceId
Obligatoire. ID de ressource du compte de stockage qui contient le conteneur de script (nom provisioningscriptpar défaut) et le mdpprovisioningscriptlogs conteneur.
point d’entrée
provisioningScriptEntryPoint
Le nom du conteneur d’objets Blob qui contient le script de provisionnement et les fichiers associés. Si vous ne spécifiez aucune valeur, la valeur par défaut est provisioningscript.
ID client d’identité managée
provisioningScriptManagedIdentityClientId
Obligatoire si votre pool est associé à plusieurs identités managées. ID client de l’identité managée à utiliser pour accéder aux objets blob dans le script et approvisionner des conteneurs de journaux de script. Si votre pool DevOps managé possède plusieurs identités managées associées, vous devez spécifier celle à utiliser ici. Si votre pool n’a qu’une seule identité, cette propriété est facultative.
Redémarrer après l’exécution du script
provisioningScriptShouldRestart
Indique si l’agent doit redémarrer après avoir exécuté le script d’approvisionnement et avant d’envoyer des travaux à l’agent. Si vous ne spécifiez aucune valeur, la valeur par défaut est false.

Le redémarrage après l’exécution du script augmente le temps d’approvisionnement et doit être effectué uniquement si le script d’approvisionnement apporte des modifications qui nécessitent un redémarrage pour prendre effet.

Note

Les scripts de provisionnement sont disponibles à partir de la version 2026-06-02 de l’API.

Si vous mettez à jour votre pool à l’aide d’une version d’API précédente après avoir configuré des scripts d’approvisionnement, les paramètres de script d’approvisionnement ne sont pas conservés.

Pour configurer les paramètres de script d’approvisionnement d’une image, accédez à la section Images des paramètres du pool et sélectionnez ...>Configurer le script d’approvisionnement.

Capture d’écran montrant l’option de menu Configurer le script d’approvisionnement.

Ajoutez ou mettez à jour les paramètres de script d’approvisionnement de l’image, puis sélectionnez Enregistrer.

Capture d’écran montrant les paramètres de script de configuration.

Erreurs d’approvisionnement

Le tableau suivant répertorie les codes d’erreur et les descriptions de script d’approvisionnement.

Code d’échec Description
ProvisioningScriptDownloadFailed Le script d’approvisionnement n’a pas pu être téléchargé sur l’ordinateur pendant l’approvisionnement.
ProvisioningScriptAccessFailed Le processus d’approvisionnement n’a pas pu accéder au script d’approvisionnement. En règle générale, cette erreur se produit en raison d’un problème d’accès ou d’autorisations lors de la récupération du script.
ProvisioningScriptExecutionFailed Le script d’approvisionnement a été téléchargé mais a échoué lors de l’exécution sur l’ordinateur.
ProvisioningScriptLogUploadFailed Le processus d’approvisionnement a généré les journaux de script d’approvisionnement, mais il n’a pas pu les charger.

Journaux du script de provisionnement

Les journaux de script d’approvisionnement contiennent la sortie standard (stdout) et l’erreur standard (stderr) générées par le script. Les pools DevOps gérés écrivent ces journaux dans le mdpprovisioningscriptlogs conteneur d’objets blob dans le compte de stockage que vous spécifiez. Les objets blob sont organisés sous un répertoire virtuel dont le nom utilise le format mdp-{poolName}-{agentMachineName}. Ce répertoire virtuel contient un output répertoire virtuel avec stderr.log et stdout.log des fichiers, ainsi qu’un script répertoire virtuel avec une copie du script qui s’est exécuté.

Managed DevOps Pools ne gère pas ces journaux ; vous devez donc gérer leur durée de conservation dans votre compte de stockage à l’aide des stratégies de gestion du cycle de vie d’Stockage Blob Azure. L’exemple de stratégie suivant nommé DeleteOldMDPLogs supprime les objets blob de journal trois jours après leur dernière modification.

{
  "rules": [
    {
      "enabled": true,
      "name": "DeleteOldMDPLogs",
      "type": "Lifecycle",
      "definition": {
        "actions": {
          "baseBlob": {
            "delete": {
              "daysAfterModificationGreaterThan": 3
            }
          }
        },
        "filters": {
          "blobTypes": [
            "blockBlob"
          ],
          "prefixMatch": [
            "mdpprovisioningscriptlogs/"
          ]
        }
      }
    }
  ]
}

Vous pouvez bénéficier de l’assistance de l’IA de GitHub Copilot pour créer des stratégies de gestion du cycle de vie pour le stockage Blob Azure. Personnalisez l’invite suivante pour créer des stratégies de gestion du cycle de vie pour Stockage Blob Azure.

Build an Azure Blob Storage lifecycle management policy named DeleteOldMDPLogs that deletes logs after three days.

Pour obtenir plus d’informations sur la stratégie générée par Copilot, vous pouvez demander à Copilot de vous fournir une explication de la stratégie générée dans votre requête.

Copilot est alimenté par l’IA, donc les surprises et les erreurs sont possibles. Pour plus d’informations, consultez les FAQ sur l’utilisation générale de Copilot.

Pour plus d’informations, consultez Stockage Blob Azure stratégies de gestion du cycle de vie et configurer une stratégie de gestion du cycle de vie.

Voir aussi