Tutoriel : Exécuter une tâche ACR selon une planification définie

Ce didacticiel montre comment exécuter une tâche ACR selon une planification. Planifiez une tâche en définissant un ou plusieurs déclencheurs de minuteur. Les déclencheurs de minuteur peuvent être utilisés seuls ou en combinaison avec d’autres déclencheurs de tâche.

Dans ce didacticiel, découvrez comment planifier des tâches et :

  • Créer une tâche avec un déclencheur de minuteur
  • Gérer les déclencheurs de minuteur

Planifier une tâche est utile pour les scénarios tels que les suivants :

  • Exécuter une charge de travail de conteneur pour les opérations de maintenance planifiée. Par exemple, exécuter une application conteneurisée pour supprimer les images inutiles de votre registre.
  • Exécuter un ensemble de tests sur une image de production pendant la journée dans le cadre de votre analyse de site actif.

Prérequis

À propos de la planification d’une tâche

  • Déclencheur avec expression cron - Le déclencheur de minuteur d'une tâche utilise une expression cron. L’expression est une chaîne à cinq champs spécifiant la minute, l'heure, le jour, le mois et le jour de la semaine où déclencher la tâche. Les fréquences jusqu'à une fois par minute sont prises en charge.

    Par exemple, l’expression "0 12 * * Mon-Fri" déclenche une tâche à midi UTC chaque jour de la semaine. Consultez les détails plus loin dans cet article.

  • Déclencheurs de minuteurs multiples - L'ajout de plusieurs minuteurs à une tâche est autorisée, à condition que les planifications diffèrent.

    • Spécifiez plusieurs déclencheurs de minuteurs lorsque vous créez la tâche ou ajoutez-les ultérieurement.
    • Nommez les déclencheurs pour faciliter leur gestion, à défaut de quoi, ACR Tasks leur attribue des noms par défaut.
    • Si des planifications de minuteur se chevauchent, ACR Tasks déclenche la tâche à l’heure planifiée pour chaque minuteur.
  • Autres déclencheurs de tâche : dans le cadre d'une tâche déclenchée par minuteur, vous pouvez également activer des déclencheurs basés sur la validation du code source ou les mises à jour d’images de base. Comme d’autres fonctionnalités ACR Tasks, vous pouvez également exécuter manuellement une tâche planifiée.

Créer une tâche avec un déclencheur de minuteur

Commande de la tâche

Tout d’abord, renseignez la variable d’environnement d’interpréteur de commandes suivante à l’aide d’une valeur appropriée pour votre environnement. Cette étape n’est pas strictement obligatoire, mais facilite un peu l’exécution des commandes multilignes de l’interface de ligne de commande Azure de ce didacticiel. Si vous ne renseignez pas la variable d’environnement, vous devez remplacer manuellement chaque valeur chaque fois qu’elle apparaît dans les exemples de commandes.

ACR_NAME=<registry-name>        # The name of your Azure container registry

Lorsque vous créez une tâche avec la commande az acr task create, vous pouvez ajouter un déclencheur de minuteur. Ajoutez le paramètre --schedule et transmettez une expression cron pour le minuteur.

À titre d’exemple simple, la tâche suivante déclenche l’exécution de l’image hello-world à partir de Microsoft Container Registry tous les jours à 21 h 00 UTC. La tâche s’exécute sans contexte de code source.

az acr task create \
  --name timertask \
  --registry $ACR_NAME \
  --cmd mcr.microsoft.com/hello-world \
  --schedule "0 21 * * *" \
  --context /dev/null

Exécutez la commande az acr task show pour vérifier que le déclencheur de minuteur est configuré. Par défaut, le déclencheur de mise à jour d’image de base est également activé.

az acr task show --name timertask --registry $ACR_NAME --output table
NAME      PLATFORM    STATUS    SOURCE REPOSITORY       TRIGGERS
--------  ----------  --------  -------------------     -----------------
timertask linux       Enabled                           BASE_IMAGE, TIMER

En outre, un exemple simple de la tâche exécutée avec le contexte de code source. La tâche suivante déclenche l’exécution de l’image hello-world à partir de Microsoft Container Registry tous les jours à 21h00 UTC.

Suivez les Conditions préalables pour générer le contexte de code source, puis créez une tâche planifiée avec contexte.

az acr task create \
  --name timertask \
  --registry $ACR_NAME \
  --context https://github.com/$GIT_USER/acr-build-helloworld-node.git#master \
  --file Dockerfile \
  --image timertask:{{.Run.ID}} \
  --git-access-token $GIT_PAT \
  --schedule "0 21 * * *"

Exécutez la commande az acr task show pour vérifier que le déclencheur de minuteur est configuré. Par défaut, le déclencheur de mise à jour d’image de base est également activé.

az acr task show --name timertask --registry $ACR_NAME --output table

Exécutez la commande az acr task run pour déclencher la tâche manuellement.

az acr task run --name timertask --registry $ACR_NAME

Déclencher la tâche

Déclenchez la tâche manuellement avec az acr task run pour vous assurer qu’elle est correctement configurée :

az acr task run --name timertask --registry $ACR_NAME

Si le conteneur s’exécute correctement, la sortie ressemble à ce qui suit. La sortie est condensée pour afficher les principales étapes.

Queued a run with ID: cf2a
Waiting for an agent...
2020/11/20 21:03:36 Using acb_vol_2ca23c46-a9ac-4224-b0c6-9fde44eb42d2 as the home volume
2020/11/20 21:03:36 Creating Docker network: acb_default_network, driver: 'bridge'
[...]
2020/11/20 21:03:38 Launching container with name: acb_step_0

Hello from Docker!
This message shows that your installation appears to be working correctly.
[...]

Après l’heure planifiée, exécutez la commande az acr task list-runs pour vérifier que le minuteur a déclenché la tâche comme prévu :

az acr task list-runs --name timertask --registry $ACR_NAME --output table

Si tel est le cas, la sortie ressemble à ce qui suit :

RUN ID    TASK       PLATFORM    STATUS     TRIGGER    STARTED               DURATION
--------  ---------  ----------  ---------  ---------  --------------------  ----------
ca15      timertask  linux       Succeeded  Timer      2020-11-20T21:00:23Z  00:00:06
ca14      timertask  linux       Succeeded  Manual     2020-11-20T20:53:35Z  00:00:06

Gérer les déclencheurs de minuteur

Utilisez la commande az acr task timer pour gérer les déclencheurs de minuteur pour une tâche d’ACR.

Ajouter ou mettre à jour un déclencheur de minuteur

Après avoir créé une tâche, vous pouvez lui ajouter un déclencheur de minuteur en utilisant la commande az acr task timer add. L’exemple suivant ajoute un nom de déclencheur de minuteur timer2 à la tâche timertask créée. Ce minuteur déclenche la tâche tous les jours à 10:30 UTC.

az acr task timer add \
  --name timertask \
  --registry $ACR_NAME \
  --timer-name timer2 \
  --schedule "30 10 * * *"

Mettez à jour la planification d’un déclencheur existant ou modifier son état, à l’aide de la commande az acr task timer update. Par exemple, mettez à jour le déclencheur nommé timer2 pour déclencher la tâche à 11:30 UTC :

az acr task timer update \
  --name timertask \
  --registry $ACR_NAME \
  --timer-name timer2 \
  --schedule "30 11 * * *"

Répertorier les déclencheurs de minuteur

La commande az acr task timer list affiche les déclencheurs de minuteur définis pour une tâche :

az acr task timer list --name timertask --registry $ACR_NAME

Exemple de sortie :

[
  {
    "name": "timer2",
    "schedule": "30 11 * * *",
    "status": "Enabled"
  },
  {
    "name": "t1",
    "schedule": "0 21 * * *",
    "status": "Enabled"
  }
]

Supprimer un déclencheur de minuteur

Utilisez la commande az acr task timer remove commande pour supprimer un déclencheur de minuteur associé à une tâche. L’exemple suivant supprime le déclencheur timer2 de timertask :

az acr task timer remove \
  --name timertask \
  --registry $ACR_NAME \
  --timer-name timer2

Expressions cron

ACR Tasks utilise la bibliothèque NCronTab pour interpréter les expressions cron. Les expressions prises en charge dans ACR Tasks présentent cinq champs requis, séparés par un espace blanc :

{minute} {hour} {day} {month} {day-of-week}

Le fuseau horaire utilisé avec les expressions cron est le temps universel coordonné (UTC). Les heures sont au format 24 heures.

Notes

ACR Tasks ne prend pas en charge le champ {second} ou {year} dans les expressions cron. Si vous copiez une expression cron utilisée dans un autre système, supprimez ces champs, le cas échéant.

Chaque champ peut être associé aux types de valeurs suivants :

Type Exemple En cas de déclenchement
Une valeur spécifique "5 * * * *" toutes les heures, 5 minutes après l’heure
Toutes les valeurs (*) "* 5 * * *" toutes les minutes, à partir de 5:00 UTC (60 fois par jour)
Une plage (opérateur -) "0 1-3 * * *" 3 fois par jour à 1:00, 2:00 et 3:00 UTC
Un ensemble de valeurs (opérateur ,) "20,30,40 * * * *" 3 fois par heure, 20 minutes, 30 minutes et 40 minutes après l’heure
Une valeur d’intervalle (opérateur /) "*/10 * * * *" 6 fois par heure, 10 minutes, 20 minutes et ainsi de suite, après l’heure

Pour spécifier les mois ou les jours, vous pouvez utiliser des valeurs numériques, des noms ou des abréviations de noms :

  • Pour les jours, les valeurs numériques vont de 0 à 6 (ici, 0 représente « dimanche »).
  • Les noms sont en anglais. Par exemple : Monday, January.
  • Les noms sont sensibles à la casse.
  • Les noms peuvent être abrégés. La longueur d’abréviation recommandée est de trois lettres. Par exemple : Mon, Jan.

Exemples cron

Exemple En cas de déclenchement
"*/5 * * * *" une fois toutes les cinq minutes
"0 * * * *" une fois toutes les heures
"0 */2 * * *" une fois toutes les deux heures
"0 9-17 * * *" une fois toutes les heures entre 9:00 et 17:00 UTC
"30 9 * * *" à 9:30 UTC tous les jours
"30 9 * * 1-5" à 9:30 UTC tous les jours de la semaine
"30 9 * Jan Mon" à 9:30 UTC tous les lundis en janvier

Nettoyer les ressources

Pour supprimer toutes les ressources créées dans cette série de tutoriels, y compris le ou les registres de conteneurs, l’instance de conteneur, le coffre de clés et le principal du service, exécutez les commandes suivantes :

az group delete --resource-group $RES_GROUP
az ad sp delete --id http://$ACR_NAME-pull

Étapes suivantes

Dans ce didacticiel, vous avez appris à créer des tâches Azure Container Registry qui sont déclenchées automatiquement par un minuteur.

Pour obtenir un exemple d’utilisation d’une tâche planifiée afin de nettoyer des dépôts dans un registre , consultez Purger automatiquement les images d’un registre de conteneurs Azure.

Pour obtenir des exemples de tâches déclenchées par les validations de code source ou les mises à jour d'images de base, consultez d’autres articles dans les didacticiels ACR Tasks.