Partager via


Configurer des planifications pour les pipelines

Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022

Azure Pipelines fournit plusieurs types de déclencheurs pour configurer le démarrage de votre pipeline.

  • Les déclencheurs planifiés démarrent votre pipeline en fonction d’une planification, telle qu’une build nocturne. Cet article fournit des conseils sur l’utilisation de déclencheurs planifiés pour exécuter vos pipelines en fonction d’une planification.
  • Les déclencheurs basés sur des événements démarrent votre pipeline en réponse à des événements, tels que la création d’une demande de tirage (pull request) ou l’envoi (push) vers une branche. Pour plus d’informations sur l’utilisation de déclencheurs basés sur des événements, consultez Déclencheurs dans Azure Pipelines.

Vous pouvez combiner des déclencheurs planifiés et basés sur des événements dans vos pipelines, par exemple pour valider la génération chaque fois qu’un push est effectué (déclencheur CI), lorsqu’une demande de tirage (déclencheur de tirage) est effectuée et qu’une génération nocturne (déclencheur planifié). Si vous souhaitez générer votre pipeline uniquement selon une planification, et non en réponse aux déclencheurs basés sur des événements, vérifiez que votre pipeline n’a pas d’autres déclencheurs activés. Par exemple, les pipelines YAML dans un référentiel GitHub ont des déclencheurs CI et des déclencheurs de demande de tirage activés par défaut. Pour plus d’informations sur la désactivation des déclencheurs par défaut, consultez Déclencheurs dans Azure Pipelines et accédez à la section qui couvre votre type de référentiel.

Déclencheurs planifiés

Important

Les déclencheurs planifiés définis à l’aide de l’interface utilisateur des paramètres de pipeline YAML sont prioritaires sur les déclencheurs planifiés YAML.

Si votre pipeline YAML comporte à la fois des déclencheurs planifiés YAML et des déclencheurs planifiés définis par l’interface utilisateur, seuls les déclencheurs planifiés définis par l’interface utilisateur sont exécutés. Pour exécuter les déclencheurs planifiés définis par YAML dans votre pipeline YAML, vous devez supprimer les déclencheurs planifiés définis dans l’interface utilisateur des paramètres de pipeline YAML. Une fois que tous les déclencheurs planifiés d’interface utilisateur sont supprimés, un push doit être effectué pour que les déclencheurs planifiés YAML commencent à être évalués.

Pour supprimer des déclencheurs planifiés d’interface utilisateur à partir d’un pipeline YAML, consultez les paramètres de l’interface utilisateur remplacent les déclencheurs planifiés YAML.

Les déclencheurs planifiés configurent un pipeline à exécuter selon une planification définie à l’aide de la syntaxe cron.

schedules:
- cron: string # cron syntax defining a schedule
  displayName: string # friendly name given to a specific schedule
  branches:
    include: [ string ] # which branches the schedule applies to
    exclude: [ string ] # which branches to exclude from the schedule
  always: boolean # whether to always run the pipeline or only if there have been source code or pipeline settings changes since the last successful scheduled run. The default is false.
  batch: boolean # Whether to run the pipeline if the previously scheduled run is in-progress; the default is false.
  # batch is available in Azure DevOps Server 2022.1 and higher

Les pipelines planifiés dans YAML ont les contraintes suivantes.

  • Le fuseau horaire des planifications cron est UTC. Vous pouvez obtenir de l’aide sur l’IA de GitHub Copilot pour créer vos expressions cron.
  • Si vous spécifiez une exclude clause sans include clause pour branches, elle équivaut à spécifier * dans la include clause.
  • Vous ne pouvez pas utiliser de variables de pipeline lors de la spécification de planifications.
  • Si vous utilisez des modèles dans votre fichier YAML, les planifications doivent être spécifiées dans le fichier YAML principal et non dans les fichiers de modèle.
  • Si un pipeline est désactivé, les mises à jour apportées à son fichier YAML n’actualisent pas automatiquement les déclencheurs de planification.

Considérations relatives aux branches pour les déclencheurs planifiés

Les déclencheurs planifiés sont évalués pour une branche lorsque les événements suivants se produisent.

  • Un pipeline est créé.
  • Le fichier YAML d’un pipeline est mis à jour, à partir d’un push ou en le modifiant dans l’éditeur de pipeline.
  • Le chemin du fichier YAML d’un pipeline est mis à jour pour référencer un autre fichier YAML. Cette modification met uniquement à jour la branche par défaut et récupère donc uniquement les planifications dans le fichier YAML mis à jour pour la branche par défaut. Si d’autres branches fusionnent par la suite la branche par défaut, par exemple git pull origin main, les déclencheurs planifiés à partir du fichier YAML nouvellement référencé sont évalués pour cette branche.
  • Une nouvelle branche est créée.

Une fois que l’un de ces événements se produit dans une branche, toutes les exécutions planifiées pour cette branche sont ajoutées, si cette branche correspond aux filtres de branche pour les déclencheurs planifiés contenus dans le fichier YAML de cette branche.

Important

Les exécutions planifiées pour une branche sont ajoutées uniquement si la branche correspond aux filtres de branche pour les déclencheurs planifiés dans le fichier YAML de cette branche particulière.

Par exemple, un pipeline est créé avec la planification suivante, et cette version du fichier YAML est vérifiée dans la main branche. Cette planification génère la main branche quotidiennement.

# YAML file in the main branch
schedules:
- cron: '0 0 * * *'
  displayName: Daily midnight build
  branches:
    include:
    - main

Ensuite, une nouvelle branche est créée en fonction de main, nommée new-feature. Les déclencheurs planifiés à partir du fichier YAML dans la nouvelle branche sont lus et, étant donné qu’il n’y a aucune correspondance pour la new-feature branche, aucune modification n’est apportée aux builds planifiées et la new-feature branche n’est pas générée à l’aide d’un déclencheur planifié.

Si new-feature elle est ajoutée à la branches liste et que cette modification est envoyée à la new-feature branche, le fichier YAML est lu et, étant donné qu’il new-feature se trouve maintenant dans la liste des branches, une build planifiée est ajoutée pour la new-feature branche.

# YAML file in the new-feature-branch
schedules:
- cron: '0 0 * * *'
  displayName: Daily midnight build
  branches:
    include:
    - main
    - new-feature

Considérez maintenant qu’une branche nommée release est créée en fonction de l’option main, puis release ajoutée aux filtres de branche dans le fichier YAML de la main branche, mais pas dans la branche nouvellement créée release .

# YAML file in the release branch
schedules:
- cron: '0 0 * * *'
  displayName: Daily midnight build
  branches:
    include:
    - main

# YAML file in the main branch with release added to the branches list
schedules:
- cron: '0 0 * * *'
  displayName: Daily midnight build
  branches:
    include:
    - main
    - release

Étant donné qu’elle release a été ajoutée aux filtres de branche dans la main branche, mais pas aux filtres de branche dans la release branche, la release branche ne sera pas basée sur cette planification. Uniquement lorsque la release branche est ajoutée aux filtres de branche dans le fichier YAML de la branche release , la build planifiée sera ajoutée au planificateur.

Considérations relatives aux lots pour les déclencheurs planifiés

Note

La batch propriété est disponible sur Azure DevOps Server 2022.1 et versions ultérieures.

La batch propriété configure s’il faut exécuter le pipeline si l’exécution planifiée précédemment est en cours. Quand batch c’est truele cas, une nouvelle exécution de pipeline ne démarre pas en raison de la planification si une exécution de pipeline précédente est toujours en cours. La valeur par défaut est false.

La batch propriété est affectée par le paramètre de la always propriété. Quand always c’est truele cas, le pipeline s’exécute en fonction de la planification cron, même lorsqu’il batchtrue y a une exécution en cours.

Toujours Batch Comportement
false false Le pipeline s’exécute uniquement s’il existe une modification par rapport à la dernière exécution planifiée réussie du pipeline, même s’il existe une exécution en cours à partir du dernier déclencheur planifié.
false true Le pipeline s’exécute uniquement s’il existe une modification par rapport à la dernière exécution planifiée du pipeline, et qu’il n’y a pas d’exécution de pipeline planifiée en cours.
true false Le pipeline s’exécute en fonction de la planification cron.
true true Le pipeline s’exécute en fonction de la planification cron, même s’il existe une exécution en cours.

Variable Build.CronSchedule.DisplayName

Note

La Build.CronSchedule.DisplayName variable est disponible sur Azure DevOps Server 2022.1 et versions ultérieures.

Lorsqu’un pipeline s’exécute en raison d’un déclencheur planifié cron, la variable prédéfinie Build.CronSchedule.DisplayName contient la displayName planification cron qui a déclenché l’exécution du pipeline.

Votre pipeline YAML peut contenir plusieurs planifications cron et vous souhaiterez peut-être que votre pipeline exécute différentes étapes ou travaux en fonction des exécutions de planification cron. Par exemple, vous disposez d’une build nocturne et d’une build hebdomadaire, et vous souhaitez exécuter une certaine étape uniquement pendant la génération nocturne. Vous pouvez utiliser la Build.CronSchedule.DisplayName variable dans une condition de travail ou d’étape pour déterminer s’il faut exécuter ce travail ou cette étape.

- stage: stage1
  # Run this stage only when the pipeline is triggered by the 
  # "Daily midnight build" cron schedule
  condition: eq(variables['Build.CronSchedule.DisplayName'], 'Daily midnight build')

Pour plus d’exemples, consultez les exemples schedules.cron.

Sélectionnez les jours et les heures où vous souhaitez exécuter la build à l’aide de l’éditeur classique.

Si votre référentiel est Azure Repos Git, GitHub ou Autre Git, vous pouvez également spécifier des branches à inclure et exclure. Si vous souhaitez utiliser des caractères génériques, tapez la spécification de branche (par exemple), features/modules/*puis appuyez sur Entrée.

Déclencheur planifié UTC + 5:30 fuseau horaire

Examples

L’exemple suivant définit deux planifications :

schedules:
- cron: '0 0 * * *'
  displayName: Daily midnight build
  branches:
    include:
    - main
    - releases/*
    exclude:
    - releases/ancient/*
- cron: '0 12 * * 0'
  displayName: Weekly Sunday build
  branches:
    include:
    - releases/*
  always: true

La première planification, build Quotidienne minuit, exécute un pipeline à minuit tous les jours, mais uniquement si le code a changé depuis la dernière exécution planifiée réussie, pour main et toutes les releases/* branches, à l’exception des branches sous releases/ancient/*.

La deuxième planification, build Hebdomadaire dimanche, exécute un pipeline à midi le dimanche, que le code ait changé ou non depuis la dernière exécution, pour toutes les releases/* branches.

Note

Le fuseau horaire des planifications cron est UTC. Dans ces exemples, la build de minuit et la build midi sont à minuit et midi au format UTC.

Pour plus d’exemples, consultez Migration à partir de l’éditeur classique.

Exemple : Build nocturne du référentiel Git dans plusieurs fuseaux horaires

Dans cet exemple, le déclencheur planifié de l’éditeur classique comporte deux entrées, qui produisent les builds suivantes.

  • Tous les lundis - vendredi à 3h00 (UTC + 5:30 fuseau horaire), créez des branches qui répondent aux critères de features/india/* filtre de branche

    Déclencheur planifié UTC + 5:30 fuseau horaire

  • Tous les lundis - vendredi à 3h00 (UTC - 5:00 fuseau horaire), créez des branches qui répondent aux critères de features/nc/* filtre de branche

    Déclencheur planifié UTC -5:00 fuseau horaire

Exemple : Génération nocturne avec différentes fréquences

Dans cet exemple, le déclencheur planifié de l’éditeur classique comporte deux entrées, produisant les builds suivantes.

  • Tous les lundis - vendredi à 3h00 UTC, créez des branches qui répondent aux critères de filtre de branche et main de releases/* branche

    Fréquence de déclencheur planifiée 1, Azure Pipelines et Serveur Azure DevOps 2019.

  • Tous les dimanches à 3h00 UTC, générez la releases/lastversion branche, même si la source ou le pipeline n’a pas changé

    Fréquence de déclencheur planifiée 2, Azure Pipelines et Serveur Azure DevOps 2019.

Syntaxe Cron

Chaque expression cron de déclencheur planifié Azure Pipelines est une expression délimitée par un espace avec cinq entrées dans l’ordre suivant. L’expression est placée entre guillemets 'simples.

mm HH DD MM DW
 \  \  \  \  \__ Days of week
  \  \  \  \____ Months
   \  \  \______ Days
    \  \________ Hours
     \__________ Minutes
Terrain Valeurs acceptées
Procès-verbaux 0 à 59
Heures 0 à 23
Jours 1 à 31
Mois 1 à 12, noms anglais complets, trois premières lettres de noms anglais
Jours de semaine 0 à 6 (à compter du dimanche), noms anglais complets, trois premières lettres de noms anglais

Les valeurs peuvent être dans les formats suivants.

Format Example Descriptif
Caractère générique * Correspond à toutes les valeurs de ce champ
Valeur unique 5 Spécifie une valeur unique pour ce champ
Virgule délimitée 3,5,6 Spécifie plusieurs valeurs pour ce champ. Plusieurs formats peuvent être combinés, comme 1,3-6
Gammes 1-3 Plage inclusive de valeurs pour ce champ
Intervalles */4 ou 1-5/2 Intervalles de correspondance pour ce champ, tels que chaque quatrième valeur ou la plage 1 à 5 avec un intervalle d’étape de 2
Example Expression Cron
Construire tous les lundis, mercredis et vendredis à 18h00 0 18 * * Mon,Wed,Fri, 0 18 * * 1,3,5 ou 0 18 * * 1-5/2
Générer toutes les 6 heures 0 0,6,12,18 * * *, 0 */6 * * * ou 0 0-18/6 * * *
Générer toutes les 6 heures à partir de 9h00 0 9,15,21 * * * ou 0 9-21/6 * * *

Pour plus d’informations sur les formats pris en charge, consultez L’expression Crontab.

Utiliser GitHub Copilot pour créer une expression cron

Vous pouvez obtenir de l’aide sur l’IA de GitHub Copilot pour générer des expressions cron ou convertir des expressions cron existantes de votre fuseau horaire local en UTC.

Les planifications cron d’Azure Pipelines sont définies au format UTC. Par conséquent, les planifications telles que Build tous les lundis, mercredis et vendredis à 18 h 00 doivent être créées à l’aide de la syntaxe cron et converties de votre fuseau horaire local en UTC.

Personnalisez les invites suivantes pour créer des expressions cron ou convertir des expressions cron en utc à partir du fuseau horaire que vous avez utilisé pour créer les expressions.

Dans l’exemple suivant, Copilot est invité à créer une planification cron UTC pour générer tous les lundis, mercredis et vendredis à 18 h 00 heure de l’Est.

Build a UTC cron expression for Monday, Wednesday, and Friday at 6:00 PM Eastern Standard Time

Si vous avez déjà une expression cron dans votre fuseau horaire local, vous pouvez demander à Copilot de le convertir en UTC. Dans cet exemple, une planification cron à générer tous les lundis, mercredis et vendredis à 18 h 00 (0 18 * * Mon,Wed,Fri) heure standard est convertie en heure UTC.

Convert the following cron expression from Eastern Standard Time to UTC: 0 18 * * Mon,Wed,Fri

La conversion d’une expression cron en utc peut nécessiter la modification des jours de la semaine dans votre expression. Dans l’exemple suivant, Copilot est invité à créer une planification cron UTC pour générer le lundi au vendredi à 12 h 30 heure standard de l’Europe centrale. L’heure standard de l’Europe centrale est à l’avance de l’heure UTC, de sorte que l’expression résultante commence tard dimanche soir au lieu du lundi matin tôt et se termine le jeudi.

Build a UTC cron expression for Monday through Friday at 12:30 AM Central European Standard Time

Pour obtenir des détails supplémentaires sur l’expression cron générée par Copilot, vous pouvez demander à Copilot de fournir une explication de l’expression cron générée dans votre invite.

Build a UTC cron expression for Monday through Friday at 12:30 AM Central European Standard Time and explain the different parts of the cron expression

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.

Vue Exécutions planifiées

Vous pouvez afficher un aperçu des builds planifiées à venir en choisissant les exécutions planifiées dans le menu contextuel de la page détails du pipeline pour votre pipeline.

Important

La vue Exécutions planifiées affiche uniquement les pipelines planifiés à s’exécuter dans les sept jours suivant la date actuelle. Si votre planification cron a un intervalle de plus de 7 jours et que la prochaine exécution est planifiée pour démarrer après sept jours à partir de la date actuelle, elle ne s’affiche pas dans l’affichage Exécutions planifiées .

Menu Exécutions planifiées

Après avoir créé ou mis à jour vos déclencheurs planifiés, vous pouvez les vérifier à l’aide de la vue Exécutions planifiées .

Exécutions planifiées

Cet exemple affiche les exécutions planifiées pour la planification suivante.

schedules:
- cron: '0 0 * * *'
  displayName: Daily midnight build
  branches:
    include:
    - main

Les fenêtres d’exécution planifiées affichent les heures converties en fuseau horaire local défini sur l’ordinateur utilisé pour accéder au portail Azure DevOps. Cet exemple montre comment afficher une capture d’écran prise dans le fuseau horaire EST.

Note

Si vous mettez à jour la planification d’un pipeline en cours d’exécution, la vue Exécutions planifiées n’est pas mise à jour avec la nouvelle planification tant que le pipeline en cours d’exécution n’est pas terminé.

Vous pouvez afficher un aperçu des builds planifiées à venir en choisissant les exécutions planifiées dans le menu contextuel de la page détails du pipeline pour votre pipeline.

Menu Exécutions planifiées

Après avoir créé ou mis à jour vos déclencheurs planifiés, vous pouvez les vérifier à l’aide de cette vue.

Exécutions planifiées

Exécution même en l’absence de modifications de code

Par défaut, votre pipeline ne s’exécute pas comme prévu s’il n’y a pas eu de modifications de code depuis la dernière exécution planifiée réussie. Par exemple, pensez à planifier l’exécution d’un pipeline tous les soirs à 19h00. Pendant les jours de semaine, vous envoyez plusieurs modifications à votre code. Le pipeline s’exécute selon la planification. Pendant les week-ends, vous n’apportez aucune modification à votre code. Si aucun code n’a été modifié depuis l’exécution planifiée le vendredi, le pipeline ne s’exécute pas comme prévu pendant le week-end.

Pour forcer l’exécution d’un pipeline même en l’absence de modifications de code, vous pouvez utiliser le always mot clé.

schedules:
- cron: ...
  ...
  always: true

Pour configurer le pipeline planifié pour générer uniquement s’il y a eu une modification depuis la dernière build, vérifiez uniquement les builds planifiées si la source ou le pipeline a changé.

Déclencheur planifié UTC + 5:30 fuseau horaire

Limites du nombre d’exécutions planifiées dans des pipelines YAML

Il existe certaines limites quant à la fréquence à laquelle vous pouvez planifier l’exécution d’un pipeline. Ces limites ont été mises en place pour empêcher l’utilisation abusive des ressources Azure Pipelines, en particulier les agents hébergés par Microsoft. Les limites sont les suivantes :

  • environ 1000 exécutions par pipeline par semaine
  • 10 exécutions par pipeline par 15 minutes

Migration à partir de l’éditeur classique

Les exemples suivants vous montrent comment migrer vos planifications de l’éditeur classique vers YAML.

Exemple : Build nocturne du référentiel Git dans plusieurs fuseaux horaires

Dans cet exemple, le déclencheur planifié de l’éditeur classique comporte deux entrées, produisant les builds suivantes.

  • Tous les lundis - vendredi à 3h00 (UTC + 5:30 fuseau horaire), créez des branches qui répondent aux critères de features/india/* filtre de branche

    Déclencheur planifié UTC + 5:30 fuseau horaire

  • Tous les lundis - vendredi à 3h00 (UTC - 5:00 fuseau horaire), créez des branches qui répondent aux critères de features/nc/* filtre de branche

    Déclencheur planifié UTC -5:00 fuseau horaire

Le déclencheur planifié YAML équivalent est le suivant :

schedules:
- cron: '30 21 * * Sun-Thu'
  displayName: M-F 3:00 AM (UTC + 5:30) India daily build
  branches:
    include:
    - /features/india/*
- cron: '0 8 * * Mon-Fri'
  displayName: M-F 3:00 AM (UTC - 5) NC daily build
  branches:
    include:
    - /features/nc/*

Dans la première planification, M-F 3:00 (UTC + 5:30) Build quotidienne inde, la syntaxe cron (mm HH DD MM DW) est 30 21 * * Sun-Thu.

  • Minutes et heures - 30 21 Cette valeur est mappée à 21:30 UTC (9:30 PM UTC). Étant donné que le fuseau horaire spécifié dans l’éditeur classique est UTC + 5:30, nous devons soustraire 5 heures et 30 minutes de l’heure de génération souhaitée de 3:00 pour arriver à l’heure UTC souhaitée pour spécifier pour le déclencheur YAML. Vous pouvez obtenir de l’aide sur l’IA de GitHub Copilot pour créer votre expression cron.
  • Les jours et les mois sont spécifiés comme caractères génériques, car cette planification ne spécifie pas de s’exécuter uniquement sur certains jours du mois ou sur un mois spécifique.
  • Jours de la semaine - Sun-Thu en raison de la conversion du fuseau horaire, pour que nos builds s’exécutent à 3:00 dans le fuseau horaire UTC + 5:30 Inde, nous devons spécifier leur démarrage le jour précédent dans l’heure UTC. Nous pourrions également spécifier les jours de la semaine en tant que 0-4 ou 0,1,2,3,4.

Dans la deuxième planification, la build quotidienne M-F 3:00 (UTC - 5) NC, la syntaxe cron est 0 8 * * Mon-Fri.

  • Minutes et heures - 0 8 Cette opération est mappée à 8:00 AM UTC. Étant donné que le fuseau horaire spécifié dans l’éditeur classique est UTC - 5:00, nous devons ajouter 5 heures à partir de l’heure de génération souhaitée de 3:00 pour arriver à l’heure UTC souhaitée pour spécifier pour le déclencheur YAML. Vous pouvez obtenir de l’aide sur l’IA de GitHub Copilot pour créer votre expression cron.
  • Les jours et les mois sont spécifiés comme caractères génériques, car cette planification ne spécifie pas de s’exécuter uniquement sur certains jours du mois ou sur un mois spécifique.
  • Jours de la semaine - Mon-Fri Étant donné que nos conversions de fuseau horaires ne s’étendent pas sur plusieurs jours de la semaine pour notre planification souhaitée, nous n’avons pas besoin d’effectuer de conversion ici. Nous pourrions également spécifier les jours de la semaine en tant que 1-5 ou 1,2,3,4,5.

Important

Les fuseaux horaires UTC dans les déclencheurs planifiés YAML ne comptent pas pour l’heure d’été.

Conseil / Astuce

Lorsque vous utilisez 3 lettres de la semaine et que vous souhaitez une période de plusieurs jours par soleil, Sun doit être considéré comme le premier jour de la semaine, par exemple pour une planification de minuit EST, jeudi à dimanche, la syntaxe cron est 0 5 * * Sun,Thu-Sat.

Exemple : Génération nocturne avec différentes fréquences

Dans cet exemple, le déclencheur planifié de l’éditeur classique comporte deux entrées, produisant les builds suivantes.

  • Tous les lundis - vendredi à 3h00 UTC, créez des branches qui répondent aux critères de filtre de branche et main de releases/* branche

    Fréquence de déclencheur planifiée 1.

  • Tous les dimanches à 3h00 UTC, générez la releases/lastversion branche, même si la source ou le pipeline n’a pas changé

    Fréquence de déclencheur planifiée 2.

Le déclencheur planifié YAML équivalent est le suivant :

schedules:
- cron: '0 3 * * Mon-Fri'
  displayName: M-F 3:00 AM (UTC) daily build
  branches:
    include:
    - main
    - /releases/*
- cron: '0 3 * * Sun'
  displayName: Sunday 3:00 AM (UTC) weekly latest version build
  branches:
    include:
    - /releases/lastversion
  always: true

Dans la première planification, M-F 3:00 (UTC) build quotidienne, la syntaxe cron est 0 3 * * Mon-Fri.

  • Minutes et heures - 0 3 Cette opération est mappée à 3:00 AM UTC. Étant donné que le fuseau horaire spécifié dans l’éditeur classique est UTC, nous n’avons pas besoin d’effectuer de conversions de fuseau horaire.
  • Les jours et les mois sont spécifiés comme caractères génériques, car cette planification ne spécifie pas de s’exécuter uniquement sur certains jours du mois ou sur un mois spécifique.
  • Jours de la semaine : Mon-Fri étant donné qu’il n’y a pas de conversion de fuseau horaire, les jours de la semaine correspondent directement à la planification de l’éditeur classique. Nous pourrions également spécifier les jours de la semaine en tant que 1,2,3,4,5.

Dans la deuxième planification, dimanche 3:00 (UTC) la dernière version hebdomadaire, la syntaxe cron est 0 3 * * Sun.

  • Minutes et heures - 0 3 Cette opération est mappée à 3:00 AM UTC. Étant donné que le fuseau horaire spécifié dans l’éditeur classique est UTC, nous n’avons pas besoin d’effectuer de conversions de fuseau horaire.
  • Les jours et les mois sont spécifiés comme caractères génériques, car cette planification ne spécifie pas de s’exécuter uniquement sur certains jours du mois ou sur un mois spécifique.
  • Jours de la semaine - Sun Étant donné que nos conversions de fuseau horaires ne s’étendent pas sur plusieurs jours de la semaine pour notre planification souhaitée, nous n’avons pas besoin d’effectuer de conversion ici. Nous pourrions également spécifier les jours de la semaine en tant que 0.
  • Nous spécifions always: true également, car cette build est planifiée pour s’exécuter si le code source a été mis à jour ou non.

Questions fréquentes (FAQ)

Je souhaite que mon pipeline s’exécute uniquement selon la planification et non lorsque quelqu’un envoie une modification à une branche

Si vous souhaitez que votre pipeline s’exécute uniquement selon la planification, et non lorsque quelqu’un envoie une modification à une branche ou fusionne une modification vers la branche principale, vous devez désactiver explicitement les déclencheurs CI et PR par défaut sur le pipeline.

Pour désactiver les déclencheurs CI et PR par défaut, ajoutez les instructions suivantes à votre pipeline YAML et vérifiez que vous n’avez pas remplacé les déclencheurs de pipeline YAML avec des déclencheurs d’interface utilisateur.

trigger: none
pr: none

Pour plus d’informations, consultez définition de pr et définition de déclencheur.

J’ai défini une planification dans le fichier YAML. Mais ça ne s’est pas exécuté. Que s’est-il passé ?

  • Vérifiez les prochaines exécutions planifiées par Azure Pipelines pour votre pipeline. Vous pouvez trouver ces exécutions en sélectionnant l’action d’exécutions planifiées dans votre pipeline. La liste est filtrée pour vous montrer uniquement les quelques prochaines exécutions au cours des prochains jours. Si cela ne répond pas à vos attentes, c’est probablement le cas que vous avez mal tapé votre planification cron ou que vous n’avez pas la planification définie dans la branche appropriée. Lisez la rubrique ci-dessus pour comprendre comment configurer des planifications. Réévaluez votre syntaxe cron. Toutes les heures des planifications cron sont au format UTC.

  • Apportez une petite modification triviale à votre fichier YAML et envoyez cette mise à jour dans votre référentiel. S’il y a eu un problème lors de la lecture des planifications à partir du fichier YAML précédemment, elle doit être corrigée maintenant.

  • Si vous avez des planifications définies dans l’interface utilisateur, vos planifications YAML ne sont pas respectées. Vérifiez que vous n’avez pas de planifications d’interface utilisateur en accédant à l’éditeur de votre pipeline, puis en sélectionnant Déclencheurs.

  • Il existe une limite quant au nombre d’exécutions que vous pouvez planifier pour un pipeline. En savoir plus sur les limites.

  • S’il n’existe aucune modification de votre code, Azure Pipelines peut ne pas démarrer de nouvelles exécutions. Découvrez comment remplacer ce comportement.

Mes planifications YAML fonctionnaient correctement. Mais ils ont cessé de travailler maintenant. Comment déboguer cela ?

  • Si vous n’avez pas spécifié always:true, votre pipeline ne sera pas planifié, sauf s’il existe des mises à jour apportées à votre code. Vérifiez s’il y a eu des modifications de code et comment vous avez configuré les planifications.

  • Il existe une limite quant au nombre de fois que vous pouvez planifier votre pipeline. Vérifiez si vous avez dépassé ces limites.

  • Vérifiez si une personne a activé plus de planifications dans l’interface utilisateur. Ouvrez l’éditeur de votre pipeline, puis sélectionnez Déclencheurs. Si elles définissent des planifications dans l’interface utilisateur, vos planifications YAML ne seront pas respectées.

  • Vérifiez si votre pipeline est suspendu ou désactivé. Sélectionnez Paramètres de votre pipeline.

  • Vérifiez les prochaines exécutions planifiées par Azure Pipelines pour votre pipeline. Vous pouvez trouver ces exécutions en sélectionnant l’action d’exécutions planifiées dans votre pipeline. Si vous ne voyez pas les planifications attendues, apportez une petite modification triviale à votre fichier YAML et envoyez la mise à jour à votre référentiel. Cela doit resynchroniser les planifications.

  • Si vous utilisez GitHub pour stocker votre code, il est possible qu’Azure Pipelines ait été limité par GitHub lorsqu’il a essayé de démarrer une nouvelle exécution. Vérifiez si vous pouvez démarrer une nouvelle exécution manuellement.

Mon code n’a pas changé, mais une build planifiée est déclenchée. Pourquoi?

  • Vous avez peut-être activé une option pour toujours exécuter une build planifiée, même s’il n’y a aucune modification de code. Si vous utilisez un fichier YAML, vérifiez la syntaxe de la planification dans le fichier YAML. Si vous utilisez des pipelines classiques, vérifiez si vous avez coché cette option dans les déclencheurs planifiés.

  • Vous avez peut-être mis à jour le pipeline de build ou une propriété du pipeline. Cela entraîne la planification d’une nouvelle exécution même si vous n’avez pas mis à jour votre code source. Vérifiez l’historique des modifications dans le pipeline à l’aide de l’éditeur classique.

  • Vous avez peut-être mis à jour la connexion de service utilisée pour vous connecter au référentiel. Cela entraîne la planification d’une nouvelle exécution même si vous n’avez pas mis à jour votre code source.

  • Azure Pipelines vérifie d’abord s’il existe des mises à jour de votre code. Si Azure Pipelines n’est pas en mesure d’atteindre votre référentiel ou d’obtenir ces informations, il crée une exécution informationnelle. Il s’agit d’une build factice pour vous informer que Azure Pipelines n’est pas en mesure d’atteindre votre référentiel.

  • Votre pipeline peut ne pas avoir de build complètement réussie. Pour déterminer s’il faut planifier une nouvelle build ou non, Azure DevOps recherche la dernière build planifiée complètement réussie. S’il n’en trouve pas, il déclenche une nouvelle build planifiée. Les builds planifiées partiellement réussies ne sont pas considérées comme réussies. Par conséquent, si votre pipeline a uniquement des builds partiellement réussies, Azure DevOps déclenche des builds planifiées, même si votre code n’a pas changé.

Je vois l’exécution planifiée dans le panneau Exécutions planifiées. Toutefois, elle ne s’exécute pas à ce moment-là. Pourquoi?

  • Le panneau Exécutions planifiées affiche toutes les planifications potentielles. Toutefois, elle ne peut pas s’exécuter réellement, sauf si vous avez effectué des mises à jour réelles du code. Pour forcer l’exécution d’une planification, vérifiez que vous avez défini la propriété always dans le pipeline YAML ou activé l’option pour toujours s’exécuter dans un pipeline classique.

Les planifications définies dans le pipeline YAML fonctionnent pour une branche, mais pas l’autre. Comment résoudre ce problème ?

Les planifications sont définies dans les fichiers YAML et ces fichiers sont associés aux branches. Si vous souhaitez qu’un pipeline soit planifié pour une branche particulière, par exemple features/X, assurez-vous que le fichier YAML de cette branche a la planification cron définie dans celle-ci et qu’il a les inclusions de branche correctes pour la planification. Le fichier YAML dans la features/X branche doit avoir les éléments suivants schedule dans cet exemple :

schedules: 
- cron: '0 12 * * 0'   # replace with your schedule
  branches: 
    include: 
    - features/X  

Pour plus d’informations, consultez Considérations relatives à la branche pour les déclencheurs planifiés.