Vous pouvez gérer les performances et le coût de votre instance de pools DevOps managés en configurant les paramètres de mise à l’échelle. Pour en savoir plus sur les tarifs et les performances, consultez la rubrique Gérer les coûts et les performances.
État de l’agent
Vous pouvez configurer des pools comme suit :
-
Sans état : fournir un nouvel agent pour chaque tâche.
-
Stateful : permettre le partage d’agents entre plusieurs processus.
Le paramètre par défaut d’un pool est sans état, que vous pouvez obtenir à l’aide de l’agent Fresh à chaque fois. Dans certains cas, les équipes peuvent souhaiter réutiliser les agents pour réutiliser les packages ou les fichiers créés lors de l’exécution du pipeline précédent. C’est souvent le cas pour les charges de travail de type build, où la conservation de l’état permet de gagner du temps. Grâce aux pools DevOps managés, vous pouvez activer cette réutilisation tout en respectant les bonnes pratiques de sécurité. Un agent peut être réutilisé pendant un maximum de sept jours par défaut, mais vous pouvez le configurer pour être recyclé plus tôt.
Note
Les agents de sécurité recommandent aux utilisateurs d’utiliser des pools sans état comme défense contre les attaques de chaîne d’approvisionnement. Utilisez le paramètre d’état Fresh agent every time.
Pools sans état
Lorsque vous configurez un agent sans état, un nouvel agent est provisionné pour chaque tâche. L’agent est supprimé lorsque la tâche est achevée.
Pour en savoir plus sur le cycle de vie des agents sans état et leur utilisation dans Azure Pipelines, consultez la section Cycle de vie des agents et retards potentiels dans l'allocation.
Vous pouvez configurer des agents à l’aide de la agentProfile propriété dans la ressource Pools DevOps managés. L’exemple suivant spécifie un Stateless agent.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"name": "fabrikam-managed-pool",
"type": "microsoft.devopsinfrastructure/pools",
"apiVersion": "2025-09-20",
"location": "eastus",
"properties": {
...
"agentProfile": {
"kind": "Stateless"
}
}
}
]
}
Vous pouvez configurer des agents à l’aide du agent-profile paramètre lorsque vous créez ou mettez à jour un pool.
L'exemple suivant spécifie un agent Stateless sans agents en réserve.
az mdp pool create \
--agent-profile agent-profile.json
# other parameters omitted for space
L’exemple suivant montre le contenu du fichier agent-profile.json.
{
"Stateless": {}
}
Vous pouvez configurer des agents à l’aide de la agentProfile propriété dans la ressource Pools DevOps managés. L’exemple suivant spécifie un Stateless agent.
resource managedDevOpsPools 'Microsoft.DevOpsInfrastructure/pools@2025-09-20' = {
name: 'fabrikam-managed-pool'
location: 'eastus'
properties: {
...
agentProfile: {
kind: 'Stateless'
}
}
}
Lorsque vous définissez l’état de l’agent sur Nouvel agent à chaque fois, un nouvel agent est procuré pour chaque tâche. L’agent est supprimé une fois le travail terminé.
Pools avec état
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"name": "fabrikam-managed-pool",
"type": "microsoft.devopsinfrastructure/pools",
"apiVersion": "2025-09-20",
"location": "eastus",
"properties": {
...
"agentProfile": {
"maxAgentLifetime": "7.00:00:00",
"gracePeriodTimeSpan": "00:30:00",
"kind": "Stateful"
}
}
}
]
}
Vous pouvez configurer des agents à l’aide du agent-profile paramètre lorsque vous créez ou mettez à jour un pool.
L’exemple suivant spécifie un Stateful agent avec une durée de vie maximale de sept jours et une période de grâce de trente minutes.
az mdp pool create \
--agent-profile agent-profile.json
# other parameters omitted for space
L’exemple suivant montre le contenu du agent-profile.json fichier.
{
"Stateful":
{
"maxAgentLifetime": "7.00:00:00",
"gracePeriodTimeSpan": "00:30:00"
}
}
resource managedDevOpsPools 'Microsoft.DevOpsInfrastructure/pools@2025-09-20' = {
name: 'fabrikam-managed-pool'
location: 'eastus'
properties: {
...
agentProfile: {
kind: 'Stateful'
maxAgentLifetime: '7.00:00:00'
gracePeriodTimeSpan:'00:30:00'
}
}
}
Lorsque vous activez Un même agent peut servir à plusieurs builds (le paramètre dans les "kind": "stateful" modèles de ressources ou le { "stateful": {...} } paramètre dans Azure CLI), les agents du pool conservent leur état. Vous pouvez configurer des pools avec état à l’aide des paramètres suivants :
La durée maximale de vie des agents de secours (maxAgentLifetime) configure la durée maximale pendant laquelle un agent dans un pool avec état peut s’exécuter avant d'être arrêté et supprimé. Le format attendu pour le paramètre Durée de vie maximale des agents en attente est dd.hh:mm:ss. La valeur par défaut du paramètre Durée de vie maximale des agents en attente est définie sur la durée maximale autorisée de sept jours (7.00:00:00).
Le délai de grâce (gracePeriodTimeSpan) configure la durée pendant laquelle un agent dans un pool avec état attend l'arrivée de nouvelles tâches avant de se fermer après que toutes les tâches actuelles et en file d'attente soient terminées. Le format attendu pour le paramètre Période de grâce est dd.hh:mm:ss. Par défaut, aucune période de grâce n’est définie.
Importante
Si une tâche est en cours d'exécution lorsque la durée maximale de vie des agents de secours expire, les agents ne s'arrêtent pas tant que la tâche n'est pas terminée, sauf si la tâche met plus de deux jours à s'exécuter. Les travaux individuels dans les pools DevOps managés peuvent s’exécuter pendant un maximum de deux jours, même s’ils s’exécutent sur un agent de secours avec plus de deux jours configurés pour la durée de vie maximale des agents de secours. Contactez le support technique si votre flux de travail nécessite l’exécution d’un seul travail qui prend plus de deux jours.
Les agents dans les pools sans état sont arrêtés et supprimés après chaque tâche. Les agents dans les pools avec état continuent à s’exécuter si l’une des conditions suivantes est remplie :
- Si un autre travail est mis en file d’attente lorsque le premier travail se termine, les pools DevOps managés envoient le travail mis en file d’attente à l’agent qui a exécuté le premier travail au lieu de l’arrêter.
- S’il existe une période de grâce configurée pour le pool, les agents attendent les nouveaux travaux pendant la durée spécifiée par la période de grâce avant de s’arrêter.
- Les agents en attente sont activés, et l’image de l’agent correspond aux critères de la période de provisionnement active ; l’agent continue alors à s’exécuter et à attendre d’autres tâches.
Les agents qui s’exécutent dans des pools avec état sont arrêtés et supprimés s’ils s’exécutent en continu pendant la durée de vie maximale spécifiée pour les agents de secours, même si les conditions précédentes sont remplies. Par exemple, si la durée maximale de vie des agents de secours est configurée pendant trois jours et que le mode Agent de secours est défini sur Manuel, All Week Scheme (Machines disponibles 24/7), les agents redémarrent après trois jours de temps d’activité continus.
Importante
Les agents dans les pools avec état peuvent toujours être arrêtés et supprimés après la fin d’un travail s’il n’y a pas de période de grâce, aucune période d’approvisionnement active pour les agents en attente et aucun travail en file d’attente ne correspondant à l’agent. Lorsqu’un agent est supprimé, tout état est perdu.
Les délais de grâce offrent la manière la plus économique de gérer des pools à états pour des pipelines avec une charge cohérente. Les périodes de grâce ne nécessitent pas l’utilisation du mode agent de secours pour maintenir les agents en ligne et prêts à accepter des travaux.
Mode agents en attente
Lorsque vous créez un pool, le mode Agent de secours est désactivé par défaut. Lorsque le mode agent de secours est réglé sur désactivé, il n’existe aucun agent de secours à affecter immédiatement à vos pipelines. Vos pipelines peuvent être obligés d'attendre entre quelques instants et 15 minutes pour qu’un agent soit déployé à la demande. Pour optimiser les performances, activez le mode agents en attente et configurez un planning d’agents en attente qui correspond à la capacité nécessaire pour votre charge de travail.
Lorsque vous configurez une planification d’agent de secours, les pools DevOps managés comparent régulièrement le nombre d’agents provisionnés au nombre d’agents de secours que vous spécifiez dans le schéma d’approvisionnement actuel. Il lance de nouveaux agents si nécessaire pour maintenir le nombre d'agents en attente. Vous pouvez afficher l’état actuel et le nombre d’agents dans votre pool à l’aide du volet Agents .
Importante
Le nombre d’approvisionnement dans un schéma ne peut pas être supérieur à la valeur maximale des agents que vous configurez dans les paramètres du pool.
Vous pouvez configurer le mode agent de secours à l’aide des paramètres suivants :
-
Désactivé : le mode agent en attente est désactivé et les agents sont approvisionnés à la demande quand les tâches sont en file d'attente.
-
Manuel : configurer une planification manuelle de secours.
-
Automatique : utilisez une planification de secours automatique basée sur l’historique d’utilisation de l’agent. Vous pouvez l'optimiser pour réduire les coûts et améliorer les performances.
Vous pouvez configurer des agents de secours à l’aide de la resourcePredictionsProfile section de la agentProfile propriété. Définissez "kind": "Manual" pour configurer un démarrage à partir de zéro, un schéma de jours de semaine ou un schéma de toute la semaine, et spécifiez les détails du schéma dans la section resourcePredictions. Pour configurer les agents de secours automatiques, définissez "kind": "Automatic". Désactivez les agents de secours en omettant la ResourcePredictionsProfile section. Pour en savoir plus sur la configuration de chaque type de mise à l’échelle, consultez les sections suivantes.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"name": "fabrikam-managed-pool",
"type": "microsoft.devopsinfrastructure/pools",
"apiVersion": "2025-09-20",
"location": "eastus",
"properties": {
...
"agentProfile": {
"kind": "Stateless",
"resourcePredictionsProfile": {
"kind": "Manual"
},
"resourcePredictions": {...}
}
}
}
]
}
Vous pouvez configurer des agents à l’aide du agent-profile paramètre lorsque vous créez ou mettez à jour un pool.
Vous pouvez configurer des agents de secours à l’aide de la resourcePredictionsProfile section du agent-profile paramètre. Utilisez le "Manual": {} paramètre pour configurer un schéma de début à partir de zéro, un schéma de jour de semaine ou un schéma toutes les semaines, puis spécifiez les détails du schéma dans la resourcePredictions section. Pour configurer les agents de secours automatiques, utilisez le "Automatic": {} paramètre. Pour en savoir plus sur la configuration de chaque type de mise à l’échelle, consultez les sections suivantes.
az mdp pool create \
--agent-profile agent-profile.json
# other parameters omitted for space
L’exemple suivant montre le contenu du agent-profile.json fichier :
{
"Stateless": {},
"resourcePredictionsProfile": {
"Manual": {}
},
"resourcePredictions": {...}
}
Vous pouvez configurer des agents de secours à l’aide de la resourcePredictionsProfile section de la agentProfile propriété. Utilisez le "kind": "Manual" paramètre pour configurer un schéma de début à partir de zéro, un schéma de jour de semaine ou un schéma toutes les semaines, puis spécifiez les détails du schéma dans la resourcePredictions section. Pour configurer les agents de secours automatiques, utilisez le kind: 'Automatic' paramètre. Désactivez les agents de secours en omettant la ResourcePredictionsProfile section. Pour en savoir plus sur la configuration de chaque type de mise à l’échelle, consultez les sections suivantes.
resource managedDevOpsPools 'Microsoft.DevOpsInfrastructure/pools@2025-09-20' = {
name: 'fabrikam-managed-pool'
location: 'eastus'
properties: {
...
agentProfile: {
kind: 'Stateless'
resourcePredictionsProfile: {
kind: 'Manual'
}
resourcePredictions: {...}
}
}
}
Manuel
Le mode manuel est idéal pour les équipes qui connaissent leurs modèles d’utilisation de pipeline d’intégration continue et de livraison continue (CI/CD). Lorsque vous utilisez l’option manuelle, vous devez définir votre schéma de préprovisionnement. Vous définissez votre schéma en fonction de votre compréhension des agents dans le pool qui sont les plus susceptibles d’être utilisés et du nombre d’agents susceptibles d’être utilisés. Vous spécifiez un nombre d’agents qui répondent à la demande projetée.
Vous pouvez créer votre propre planification d’approvisionnement ou choisir parmi l’une des planifications prédéfinies. Vous pouvez configurer le fuseau horaire à utiliser pour spécifier les planifications. Par défaut, le fuseau horaire de préprovisionnement est défini sur (UTC) Temps universel coordonné.
Vous pouvez configurer des agents de secours manuels de l’une des trois façons suivantes :
Chacun des guides de démarrage rapide de préprovisionnement comporte les paramètres courants suivants (en plus des paramètres spécifiques à ce guide de démarrage rapide) :
-
Fuseau horaire de préprovisionnement : vous permet de configurer le fuseau horaire pour les périodes de votre schéma de préprovisionnement. Par défaut, le fuseau horaire de préprovisionnement est défini sur (UTC) Temps universel coordonné.
-
Pourcentage d’agent de secours : configure le pourcentage d’agents de secours souhaités pour chaque image. Vous pouvez entrer
* pour répartir équitablement le provisionnement entre toutes les images, ou bien spécifier un entier entre 0 et 100 correspondant à un pourcentage. Si vous utilisez des pourcentages, la somme pour toutes les images doit être égale à 100. Pour une seule image, utilisez * ou 100. Lorsque vous utilisez des modèles Azure Resource Manager (modèles ARM), vous pouvez configurer le paramètre pourcentage de l’agent de secours dans la images section. Pour en savoir plus, consultez la rubrique Configurer des images.
Vous pouvez spécifier le provisionnement manuel de l’agent de veille dans la section resourcePredictionsProfileagentProfile. Vous pouvez configurer les détails de la resourcePredictions section.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"name": "fabrikam-managed-pool",
"type": "microsoft.devopsinfrastructure/pools",
"apiVersion": "2025-09-20",
"location": "eastus",
"properties": {
...
"agentProfile": {
"kind": "Stateless",
"resourcePredictionsProfile": {
"kind": "Manual"
},
"resourcePredictions": {
"timeZone": "Eastern Standard Time",
"daysData": [
{},
{
"00:00:00": 1,
"04:00:00": 0
},
{},
{},
{},
{},
{}
]
}
}
}
}
]
}
Spécifiez le fuseau horaire souhaité pour votre schéma à l’aide de la timeZone propriété. La valeur par défaut est UTC. Pour consulter la liste des noms de fuseaux horaires valides, consultez la rubrique Méthode TimeZoneInfo.GetSystemTimeZones.
Vous pouvez définir la planification des agents de secours à l’aide de la daysData liste. La daysData liste peut avoir un ou sept éléments.
Une liste daysData avec sept éléments correspond aux jours de la semaine, en commençant par dimanche. Chacun de ces sept éléments peut avoir zéro ou plusieurs "time": count entrées, spécifiant une heure au format 24 heures et un nombre d'agents de veille. Le nombre spécifié d’agents de secours est conservé jusqu’à l’entrée suivante "time": count , qui peut être le même jour ou le jour suivant.
Une daysData liste avec un seul élément définit un schéma pour toute la semaine, où l’entrée unique "time": count correspond au nombre d’agents de secours pour la semaine entière.
L’exemple suivant est un schéma d’agent de secours manuel. Il utilise la valeur Eastern Standard Time avec un seul agent approvisionné lundi à vendredi, de 9h00 (nombre 1d’agents de secours) à 17h00 (nombre 0d’agents de secours).
{
"kind": "Stateless",
"resourcePredictions": {
"timeZone": "Eastern Standard Time",
"daysData": [
{},
{
"09:00:00": 1,
"17:00:00": 0
},
{
"09:00:00": 1,
"17:00:00": 0
},
{
"09:00:00": 1,
"17:00:00": 0
},
{
"09:00:00": 1,
"17:00:00": 0
},
{
"09:00:00": 1,
"17:00:00": 0
},
{}
]
},
"resourcePredictionsProfile": {
"kind": "Manual"
}
}
Chaque élément de daysData contient un dictionnaire d’horaires avec le nombre d’agents à activer à chaque moment clé de la journée. Chaque entrée "time" : count spécifie le nombre d'agents en attente à planifier à partir de l'heure spécifiée, au format de 24 heures. Des entrées "time" : count successives définissent une séquence de niveaux de provisionnement des agents prévue pour cette journée.
"daysData": [
{}, # Schedule of standby agent count adjustments for Sunday
{ # Schedule of standby agent count adjustments for Monday
"09:00:00": 1, # Adjust standby agent count to 1
"17:00:00": 0 # Adjust standby agent count to 0
},
{ # Schedule of standby agent count adjustments for Tuesday
"09:00:00": 1,
"17:00:00": 0
},
{ # Schedule of standby agent count adjustments for Wednesday
"09:00:00": 1,
"17:00:00": 0
},
{ # Schedule of standby agent count adjustments for Thursday
"09:00:00": 1,
"17:00:00": 0
},
{ # Schedule of standby agent count adjustments for Friday
"09:00:00": 1,
"17:00:00": 0
},
{} # Schedule of standby agent count adjustments for Saturday
]
Le nombre d’agents de secours ne revient pas automatiquement à zéro à la fin d’un jour ou à la fin de la semaine. La spécification d’un élément vide daysData ne désactive pas les agents de secours pour cette journée. Un élément daysData vide signifie simplement qu’aucune modification n’est apportée au planning des agents ce jour-là. Pour définir explicitement un nombre d’agents en attente égal à zéro à partir d’une heure donnée, vous devez inclure une entrée "time" : count dont la valeur count est définie sur 0.
Exemples
Pour ne pas ajuster le nombre d'agents de veille spécifié à la fin de la journée précédente (ou de la semaine si vous configurez la première période de la semaine), spécifiez un élément daysData avec zéro entrée :
{}
Pour planifier un agent de secours unique pour démarrer à 09:00:00 et s’arrêter à 17:00:00 (en utilisant le fuseau horaire spécifié par la propriété resourcePredictions), spécifiez la configuration suivante :
{
"09:00:00": 1,
"17:00:00": 0
}
Pour planifier un seul agent de secours à partir de minuit à 09:00:00minuit, suivi de 10 agents de secours jusqu’à 17:00:00, spécifiez la configuration suivante :
{
"00:00:00": 1,
"09:00:00": 10,
"17:00:00": 0
}
Pour planifier la disponibilité d'un agent de secours à partir de 09:00:00 le jour spécifié, et son arrêt à 17:00:00 le jour suivant, utilisez deux éléments daysData consécutifs :
{
"09:00:00": 1
},
{
"17:00:00": 0
}
Vous pouvez configurer des agents à l’aide du agent-profile paramètre lorsque vous créez ou mettez à jour un pool.
az mdp pool create \
--agent-profile agent-profile.json
# other parameters omitted for space
L’exemple suivant montre le contenu du fichier agent-profile.json. Vous pouvez spécifier le provisionnement manuel de l’agent de secours dans la resourcePredictionsProfile section du agent-profile paramètre. Configurez les détails de la resourcePredictions section :
{
"Stateless": {},
"resourcePredictionsProfile": {
"Manual": {}
},
"resourcePredictions": {
"timeZone": "Eastern Standard Time",
"daysData": [
{},
{
"00:00:00": 1,
"04:00:00": 0
},
{},
{},
{},
{},
{}
]
}
}
Spécifiez le fuseau horaire de votre schéma à l’aide de la timeZone propriété. La valeur par défaut est UTC. Pour consulter la liste des noms de fuseaux horaires valides, consultez la rubrique Méthode TimeZoneInfo.GetSystemTimeZones.
La daysData liste définit la planification des agents de secours. La daysData liste peut avoir un ou sept éléments.
Une liste daysData avec sept éléments correspond aux jours de la semaine, en commençant par dimanche. Chacun de ces sept éléments peut avoir zéro ou plusieurs "time": count entrées, spécifiant une heure au format 24 heures et un nombre d'agents de veille. Le nombre spécifié d’agents de secours est conservé jusqu’à l’entrée suivante "time": count , qui peut être le même jour ou le jour suivant.
Une daysData liste avec un seul élément définit un schéma d'une semaine entière, où l’entrée unique "time": count correspond au nombre d’agents de secours pour la semaine entière.
L’exemple suivant est un schéma d’agent de secours manuel. Le schéma utilise la valeur Eastern Standard Time avec un seul agent approvisionné lundi à vendredi, de 9h00 (nombre 1d’agents de secours) à 17h00 (nombre 0d’agents de secours) :
{
"Stateless": {},
"resourcePredictionsProfile": {
"Manual": {}
},
"resourcePredictions": {
"timeZone": "Eastern Standard Time",
"daysData": [
{},
{
"09:00:00": 1,
"17:00:00": 0
},
{
"09:00:00": 1,
"17:00:00": 0
},
{
"09:00:00": 1,
"17:00:00": 0
},
{
"09:00:00": 1,
"17:00:00": 0
},
{
"09:00:00": 1,
"17:00:00": 0
},
{}
]
}
}
Chaque élément de daysData contient un dictionnaire d’horaires avec le nombre d’agents à activer à chaque moment clé de la journée. Chaque entrée "time" : count spécifie le nombre d'agents en attente à planifier à partir de l'heure spécifiée, au format de 24 heures. Des entrées "time" : count successives définissent une séquence de niveaux de provisionnement des agents prévue pour cette journée.
"daysData": [
{}, # Schedule of standby agent count adjustments for Sunday
{ # Schedule of standby agent count adjustments for Monday
"09:00:00": 1, # Adjust standby agent count to 1
"17:00:00": 0 # Adjust standby agent count to 0
},
{ # Schedule of standby agent count adjustments for Tuesday
"09:00:00": 1,
"17:00:00": 0
},
{ # Schedule of standby agent count adjustments for Wednesday
"09:00:00": 1,
"17:00:00": 0
},
{ # Schedule of standby agent count adjustments for Thursday
"09:00:00": 1,
"17:00:00": 0
},
{ # Schedule of standby agent count adjustments for Friday
"09:00:00": 1,
"17:00:00": 0
},
{} # Schedule of standby agent count adjustments for Saturday
]
Le nombre d’agents de secours ne revient pas automatiquement à zéro à la fin d’un jour ou à la fin de la semaine. La spécification d’un élément vide daysData ne désactive pas les agents de secours pour cette journée. Un élément daysData vide signifie simplement qu’aucune modification n’est apportée au planning des agents ce jour-là. Pour définir explicitement un nombre d’agents en attente égal à zéro à partir d’une heure donnée, vous devez inclure une entrée "time" : count dont la valeur count est définie sur 0.
Exemples
Si vous ne souhaitez pas ajuster le nombre d’agents de secours spécifié à la fin du jour précédent (ou la semaine si vous configurez la première période de la semaine), spécifiez un daysData élément avec zéro entrée :
{}
Pour planifier un seul agent de secours de démarrer à 09:00:00 et de s’arrêter à 17:00:00 (en utilisant le fuseau horaire que vous spécifiez dans resourcePredictions la propriété), spécifiez la configuration suivante :
{
"09:00:00": 1,
"17:00:00": 0
}
Pour planifier un seul agent de secours à partir de minuit à 09:00:00minuit, suivi de 10 agents de secours jusqu’à 17:00:00, spécifiez la configuration suivante :
{
"00:00:00": 1,
"09:00:00": 10,
"17:00:00": 0
}
Pour rendre un agent de secours disponible à partir de 09:00:00 le jour spécifié et jusqu'à 17:00:00 le jour suivant, utilisez deux éléments consécutifs daysData :
{
"09:00:00": 1
},
{
"17:00:00": 0
}
Vous pouvez spécifier le provisionnement manuel de l’agent de veille dans la section resourcePredictionsProfileagentProfile. Vous pouvez configurer les détails de la resourcePredictions section :
resource managedDevOpsPools 'Microsoft.DevOpsInfrastructure/pools@2025-09-20' = {
name: 'fabrikam-managed-pool'
location: 'eastus'
properties: {
...
agentProfile: {
kind: 'Stateless'
resourcePredictionsProfile: {
kind: 'Manual'
}
resourcePredictions: {
timeZone: 'Eastern Standard Time'
daysData: [
{}
{
'00:00:00': 1
'04:00:00': 0
}
{}
{}
{}
{}
{}
]
}
}
}
}
Spécifiez le fuseau horaire souhaité pour votre schéma à l’aide de la timeZone propriété. La valeur par défaut est UTC. Pour consulter la liste des noms de fuseaux horaires valides, consultez la rubrique Méthode TimeZoneInfo.GetSystemTimeZones.
La daysData liste définit la planification des agents de secours. La daysData liste peut avoir un ou sept éléments.
Une liste daysData avec sept éléments correspond aux jours de la semaine, en commençant par dimanche. Chacun de ces sept éléments peut avoir zéro ou plusieurs 'time': count entrées, spécifiant une heure au format 24 heures et un nombre d'agents de veille. Le nombre spécifié d’agents de secours est conservé jusqu’à l’entrée suivante 'time': count , qui peut être le même jour ou le jour suivant.
Une daysData liste avec un seul élément définit un schéma toutes les semaines, où l’entrée unique 'time': count correspond au nombre d’agents de secours pour la semaine entière.
L’exemple suivant est un schéma d’agent de secours manuel qui utilise la valeur Eastern Standard Time, avec un seul agent approvisionné lundi à vendredi, de 9h00 (nombre 1d’agents de secours) à 17h00 (nombre 0d’agents de secours) :
{
kind: 'Stateless'
resourcePredictions: {
timeZone: 'Eastern Standard Time'
daysData: [
{}
{
'09:00:00': 1
'17:00:00': 0
}
{
'09:00:00': 1
'17:00:00': 0
}
{
'09:00:00': 1
'17:00:00': 0
}
{
'09:00:00': 1
'17:00:00': 0
}
{
'09:00:00': 1
'17:00:00': 0
}
{}
]
}
resourcePredictionsProfile: {
kind: 'Manual'
}
}
Chaque élément de daysData contient un dictionnaire d’horaires avec le nombre d’agents à activer à chaque moment clé de la journée. Chaque entrée 'time' : count spécifie le nombre d'agents en attente à planifier à partir de l'heure spécifiée, au format de 24 heures. Des entrées 'time' : count successives définissent une séquence de niveaux de provisionnement des agents prévue pour cette journée.
daysData: [
{} // Schedule of standby agent count adjustments for Sunday
{ // Schedule of standby agent count adjustments for Monday
'09:00:00': 1 // Adjust standby agent count to 1
'17:00:00': 0 // Adjust standby agent count to 0
}
{ // Schedule of standby agent count adjustments for Tuesday
'09:00:00': 1
'17:00:00': 0
}
{ // Schedule of standby agent count adjustments for Wednesday
'09:00:00': 1
'17:00:00': 0
}
{ // Schedule of standby agent count adjustments for Thursday
'09:00:00': 1
'17:00:00': 0
}
{ // Schedule of standby agent count adjustments for Friday
'09:00:00': 1
'17:00:00': 0
}
{} // Schedule of standby agent count adjustments for Saturday
]
Les nombres d’agents de secours ne sont pas réinitialisés automatiquement à zéro à la fin d’un jour ou à la fin de la semaine, et la spécification d’un élément vide daysData ne désactive pas les agents de secours pour ce jour. Un élément daysData vide signifie simplement qu’aucune modification n’est apportée au planning des agents ce jour-là. Pour définir explicitement un nombre d’agents en attente égal à zéro à partir d’une heure donnée, vous devez inclure une entrée "time" : count dont la valeur count est définie sur 0.
Exemples
Pour ne pas ajuster le nombre d’agents de secours spécifié à la fin du jour précédent (ou de la semaine si vous configurez la première période de la semaine), spécifiez un élément daysData sans aucune entrée :
{}
Pour planifier un seul agent de secours pour démarrer à 09:00:00 et s’arrêter à 17:00:00 (en utilisant le fuseau horaire spécifié dans la propriété resourcePredictions), spécifiez la configuration suivante :
{
'09:00:00': 1
'17:00:00': 0
}
Pour planifier un seul agent de secours à partir de minuit à 09:00:00minuit, suivi de 10 agents de secours jusqu’à 17:00:00, spécifiez la configuration suivante :
{
'00:00:00': 1
'09:00:00': 10
'17:00:00': 0
}
Pour programmer le début de disponibilité d'un agent de secours à 09:00:00 le jour spécifié et son arrêt à 17:00:00 le jour suivant, utilisez deux éléments consécutifs daysData :
{
'09:00:00': 1
}
{
'17:00:00': 0
}
Commencer à partir de zéro
Si vous choisissez de commencer à partir de zéro, vous pouvez ajouter une liste de périodes d’approvisionnement en tant que schéma d’approvisionnement. Chaque période d’approvisionnement se compose d’un jour de début, d’un jour de fin, d’un fuseau horaire, d’une heure de début, d’une heure de fin et d’un nombre. Les périodes de provisionnement ne peuvent pas se chevaucher.
| Propriété |
Descriptif |
|
Multijour |
Lorsque vous sélectionnez cette option, vous pouvez configurer à la fois le jour de début et le jour de fin de votre schéma d’approvisionnement. |
|
Jusqu’à la prochaine période |
Lorsque vous sélectionnez cette option, la période d’approvisionnement s’exécute à partir de la valeur Heure de début jusqu’au début de la période d’approvisionnement suivante. |
|
Jour de début |
Le jour où commence la période de provisionnement. |
|
Jour de fin |
Jour de fin de la période d’approvisionnement. Obligatoire si l’option Multi-Day est sélectionnée. |
|
Heure de début |
Heure de début de la période d’approvisionnement. |
|
Fin des temps |
Heure de fin de la période d’approvisionnement. Obligatoire, sauf si jusqu'à la prochaine période est sélectionné. |
|
Nombre |
Le nombre d’agents en attente à provisionner. Ce nombre doit être supérieur à zéro et ne doit pas être supérieur à la valeur maximale des agents dans les paramètres du pool. |
Après avoir créé une période d’approvisionnement, vous pouvez supprimer ou modifier la période de la liste des schémas de préprovisionnement .
L’exemple suivant montre comment configurer un schéma manuel avec un agent approvisionné le lundi matin de 12h00 à 17h00 EST.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"name": "fabrikam-managed-pool",
"type": "microsoft.devopsinfrastructure/pools",
"apiVersion": "2025-09-20",
"location": "eastus",
"properties": {
...
"agentProfile": {
"kind": "Stateless",
"resourcePredictionsProfile": {
"kind": "Manual"
},
"resourcePredictions": {
"timeZone": "Eastern Standard Time",
"daysData": [
{},
{
"00:00:00": 1,
"04:00:00": 0
},
{},
{},
{},
{},
{}
]
}
}
}
}
]
}
{
"Stateless": {},
"resourcePredictionsProfile": {
"Manual": {}
},
"resourcePredictions": {
"timeZone": "Eastern Standard Time",
"daysData": [
{},
{
"00:00:00": 1,
"04:00:00": 0
},
{},
{},
{},
{},
{}
]
}
}
resource managedDevOpsPools 'Microsoft.DevOpsInfrastructure/pools@2025-09-20' = {
name: 'fabrikam-managed-pool'
location: 'eastus'
properties: {
...
agentProfile: {
kind: 'Stateless'
resourcePredictionsProfile: {
kind: 'Manual'
}
resourcePredictions: {
timeZone: 'Eastern Standard Time'
daysData: [
{}
{
'00:00:00': 1
'04:00:00': 0
}
{}
{}
{}
{}
{}
]
}
}
}
}
Schéma en jours ouvrés
Si vous sélectionnez le schéma de la semaine, vous pouvez spécifier une heure de début et une heure de fin, entre lesquelles le nombre spécifié d’agents de secours est en veille chaque jour de la semaine.
| Propriété |
Descriptif |
|
Heure de début |
Heure de début de la période d’approvisionnement. |
|
Fin des temps |
Heure de fin de la période d’approvisionnement. |
|
Nombre d’approvisionnement |
Le nombre d’agents en attente à provisionner. Ce nombre doit être supérieur à zéro et ne doit pas être supérieur à la valeur maximale des agents configurés dans les paramètres du pool. |
L'exemple suivant configure quatre agents à utiliser pendant les heures de travail et aucun agent pendant les heures non-travail et les week-ends, à l'aide de l'heure de l'Est (UTC-5).
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"name": "fabrikam-managed-pool",
"type": "microsoft.devopsinfrastructure/pools",
"apiVersion": "2025-09-20",
"location": "eastus",
"properties": {
...
"agentProfile": {
"kind": "Stateless",
"resourcePredictionsProfile": {
"kind": "Manual"
},
"resourcePredictions": {
"timeZone": "Eastern Standard Time",
"daysData": [
{},
{
"09:00:00": 4,
"17:00:00": 0
},
{
"09:00:00": 4,
"17:00:00": 0
},
{
"09:00:00": 4,
"17:00:00": 0
},
{
"09:00:00": 4,
"17:00:00": 0
},
{
"09:00:00": 4,
"17:00:00": 0
},
{}
]
}
}
}
}
]
}
{
"Stateless": {},
"resourcePredictionsProfile": {
"Manual": {}
},
"resourcePredictions": {
"timeZone": "Eastern Standard Time",
"daysData": [
{},
{
"09:00:00": 4,
"17:00:00": 0
},
{
"09:00:00": 4,
"17:00:00": 0
},
{
"09:00:00": 4,
"17:00:00": 0
},
{
"09:00:00": 4,
"17:00:00": 0
},
{
"09:00:00": 4,
"17:00:00": 0
},
{}
]
}
}
resource managedDevOpsPools 'Microsoft.DevOpsInfrastructure/pools@2025-09-20' = {
name: 'fabrikam-managed-pool'
location: 'eastus'
properties: {
...
agentProfile: {
kind: 'Stateless'
resourcePredictionsProfile: {
kind: 'Manual'
}
resourcePredictions: {
timeZone: 'Eastern Standard Time'
daysData: [
{}
{
'09:00:00': 4
'17:00:00': 0
}
{
'09:00:00': 4
'17:00:00': 0
}
{
'09:00:00': 4
'17:00:00': 0
}
{
'09:00:00': 4
'17:00:00': 0
}
{
'09:00:00': 4
'17:00:00': 0
}
{}
]
}
}
}
}
Schéma de la semaine entière
Si vous choisissez le schéma toutes les semaines, vous pouvez spécifier le nombre d’agents que vous souhaitez mettre à disposition à tout moment.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"name": "fabrikam-managed-pool",
"type": "microsoft.devopsinfrastructure/pools",
"apiVersion": "2025-09-20",
"location": "eastus",
"properties": {
...
"agentProfile": {
"kind": "Stateless",
"resourcePredictionsProfile": {
"kind": "Manual"
},
"resourcePredictions": {
"timeZone": "Eastern Standard Time",
"daysData": [
{
"00:00:00": 1
}
]
}
}
}
}
]
}
{
"Stateless": {},
"resourcePredictionsProfile": {
"Manual": {}
},
"resourcePredictions": {
"timeZone": "Eastern Standard Time",
"daysData": [
{
"00:00:00": 1
}
]
}
}
resource managedDevOpsPools 'Microsoft.DevOpsInfrastructure/pools@2025-09-20' = {
name: 'fabrikam-managed-pool'
location: 'eastus'
properties: {
...
agentProfile: {
kind: 'Stateless'
resourcePredictionsProfile: {
kind: 'Manual'
}
resourcePredictions: {
timeZone: 'Eastern Standard Time'
daysData: [
{
'00:00:00': 1
}
]
}
}
}
}
Automatique
Si vous ne connaissez pas vos modèles d’utilisation et que vous souhaitez vous appuyer sur la prévision automatique en fonction des données passées, sélectionnez Automatique. Vous pouvez équilibrer le coût et la performance des agents à l'aide d'un curseur avec les cinq options suivantes. Les pools DevOps gérés exécutent une requête au cours de vos trois dernières semaines de données historiques (le cas échéant). Il organise les sessions mises en file d’attente du pool en périodes de cinq minutes et affecte le centile spécifié à chaque heure pour éviter les pics.
-
Plus économique (
MostCostEffective) : 10e centile.
-
Plus économique (
MoreCostEffective) : 25e centile.
-
Équilibré (par défaut) (
Balanced) : 50e centile.
-
Plus de performances (
MorePerformance) : 75e percentile.
-
Meilleures performances (
BestPerformance) : 90e centile.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"name": "fabrikam-managed-pool",
"type": "microsoft.devopsinfrastructure/pools",
"apiVersion": "2025-09-20",
"location": "eastus",
"properties": {
...
"agentProfile": {
"kind": "Stateless",
"resourcePredictionsProfile": {
"predictionPreference": "Balanced",
"kind": "Automatic"
}
}
}
}
]
}
{
"Stateless": {},
"resourcePredictionsProfile": {
"Automatic": {
"predictionPreference": "Balanced"
}
}
}
resource managedDevOpsPools 'Microsoft.DevOpsInfrastructure/pools@2025-09-20' = {
name: 'fabrikam-managed-pool'
location: 'eastus'
properties: {
...
agentProfile: {
kind: 'Stateless'
resourcePredictionsProfile: {
kind: 'Automatic'
predictionPreference: 'Balanced'
}
}
}
}
Cycle de vie des agents et retards potentiels dans l’allocation
Lorsque vous activez les agents de secours à l’aide d’un schéma sans état , vous devez installer et configurer l’agent Azure Pipelines avant de passer de l’état prêt à l’état alloué et d’exécuter un pipeline.
Lorsque les pools DevOps managés approvisionnent de nouveaux agents, il tente de télécharger le dernier agent Azure Pipelines afin qu’il soit déjà téléchargé sur les agents de secours avant de passer à l’état prêt. Le démarrage, la connexion ainsi que le début du travail peuvent prendre entre 10 secondes et une minute, selon la vitesse SKU du pool, l'image utilisée et la charge de réseau. En outre, lorsque vous spécifiez certains paramètres dans un travail de pipeline, cela peut entraîner un téléchargement et une exécution d’un autre agent. Les régressions et les restaurations de l’agent peuvent également entraîner un retéléchargement de l’agent.
Les agents prêts ont toujours un délai potentiel, car les pools DevOps managés utilisent cet agent de manière « éphémère », ce qui signifie que nous commençons et exécutons l’agent de tâche une fois par travail. Si vous voyez des retards dans les agents prêts à récupérer des travaux à partir d’Azure DevOps, tenez compte des questions suivantes :
- Avez-vous des agents prêts ? Le problème le plus courant est l’incompréhension du moment où les agents doivent être préprovisionnés. Les machines doivent être lancées à partir de zéro lorsque les conditions suivantes sont réunies :
- Le nombre de travaux en file d'attente est supérieur au nombre d'agents en attente dans une piscine.
- Les travaux sont mis en file d’attente en dehors du calendrier de pré-provisionnement.
- Le nombre d’agents en attente est défini comme inexistant.
- Configurez-vous correctement les agents en veille ayant plusieurs images ? Si vous ne spécifiez pas l’image à utiliser dans votre pipeline à l’aide de la demande ImageOverride , les travaux ciblent la première image. Selon vos paramètres de mise à l’échelle, vous n’avez peut-être pas autant d’agents disponibles que prévu, car certains sont alloués à d’autres images.
- Utilisez-vous la
ImageVersionOverride requête dans vos pipelines ? Lorsque vous utilisez la ImageVersionOverride demande pour spécifier une version d’image différente de celle configurée dans les paramètres de votre pool, chaque agent démarre à la demande à l’aide de la version d’image spécifiée. Les agents de secours sont approvisionnés à l’aide des versions d’image spécifiées dans la configuration de votre pool. Si vous utilisez ImageVersionOverride, les agents en veille ne correspondront pas à cette version, ce qui entraînera le démarrage d'un nouvel agent.
- Les paramètres de proxy, de réseau virtuel ou de pare-feu ralentissent-ils votre pool ? La lenteur potentielle de n’importe quel paramètre réseau entraîne la prise de plus de temps pour démarrer l’agent et la connecter à Azure DevOps.
- Remplacez-vous la version de l’agent ? Par défaut, les pools DevOps gérés s’exécutent sur la version la plus récente de l’agent de tâche Azure DevOps. Les paramètres du pipeline YAML (par exemple, la
Agent.Version demande) et les paramètres de l’organisation Azure DevOps peuvent forcer les pipelines à utiliser des versions antérieures de l’agent de tâche, ce qui nécessite un redownload après l’allocation d’une machine.
Contenu connexe