Självstudie: Köra en ACR-uppgift enligt ett definierat schema

Den här självstudien visar hur du kör en ACR-uppgift enligt ett schema. Schemalägg en aktivitet genom att konfigurera en eller flera timerutlösare. Timerutlösare kan användas ensamt eller i kombination med andra aktivitetsutlösare.

I den här självstudien lär du dig mer om schemaläggning av uppgifter och:

  • Skapa en uppgift med en timerutlösare
  • Hantera timerutlösare

Schemaläggning av en uppgift är användbart för scenarier som följande:

  • Kör en containerarbetsbelastning för schemalagda underhållsåtgärder. Kör till exempel en containerbaserad app för att ta bort onödiga avbildningar från registret.
  • Kör en uppsättning tester på en produktionsbild under arbetsdagen som en del av övervakningen av din live-plats.

Förutsättningar

Om schemaläggning av en aktivitet

  • Utlösare med cron-uttryck – Timerutlösaren för en uppgift använder ett cron-uttryck. Uttrycket är en sträng med fem fält som anger minut, timme, dag, månad och veckodag för att utlösa aktiviteten. Frekvenser på upp till en gång per minut stöds.

    Uttrycket "0 12 * * Mon-Fri" utlöser till exempel en aktivitet kl. 12.00 UTC på varje veckodag. Mer information finns senare i den här artikeln.

  • Flera timerutlösare – Det är tillåtet att lägga till flera timers i en aktivitet, så länge schemana skiljer sig åt.

    • Ange flera timerutlösare när du skapar uppgiften eller lägg till dem senare.
    • Du kan också ge utlösarna ett namn för enklare hantering, eller så ger ACR Tasks standardnamn för utlösare.
    • Om tidsinställda scheman överlappar åt gången utlöser ACR Tasks aktiviteten vid den schemalagda tiden för varje timer.
  • Andra aktivitetsutlösare – I en tidsinställd aktivitet kan du även aktivera utlösare baserat på incheckning av källkod eller uppdateringar av basavbildningar. Precis som andra ACR-uppgifter kan du också köra en schemalagd aktivitet manuellt.

Skapa en uppgift med en timerutlösare

Aktivitetskommando

Fyll först i följande gränssnittsmiljövariabel med ett värde som är lämpligt för din miljö. Det här steget är inte obligatoriskt, men det gör det lite enklare att köra de flerradiga Azure CLI-kommandona i den här självstudien. Om du inte fyller i miljövariabeln måste du manuellt ersätta varje värde var det än visas i exempelkommandona.

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

När du skapar en uppgift med kommandot az acr task create kan du lägga till en timerutlösare. Lägg till parametern --schedule och skicka ett cron-uttryck för timern.

Som ett enkelt exempel utlöser följande uppgift körning av avbildningen hello-world från Microsoft Container Registry varje dag kl. 21:00 UTC. Uppgiften körs utan källkodskontext.

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

Kör kommandot az acr task show för att se att timerutlösaren är konfigurerad. Som standard är även utlösaren för basavbildningsuppdatering aktiverad.

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

Ett enkelt exempel på uppgiften som körs med källkodskontext. Följande uppgift utlöser körning av avbildningen hello-world från Microsoft Container Registry varje dag kl. 21:00 UTC.

Följ kraven för att skapa källkodskontexten och skapa sedan en schemalagd aktivitet med kontext.

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 * * *"

Kör kommandot az acr task show för att se att timerutlösaren är konfigurerad. Som standard är även utlösaren för basavbildningsuppdatering aktiverad.

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

Kör kommandot az acr task run för att utlösa aktiviteten manuellt.

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

Utlös uppgiften

Utlös aktiviteten manuellt med az acr task run för att säkerställa att den har konfigurerats korrekt:

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

Om containern körs korrekt liknar utdata följande. Utdata komprimeras för att visa viktiga steg

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.
[...]

Efter den schemalagda tiden kör du kommandot az acr task list-runs för att kontrollera att timern utlöste uppgiften som förväntat:

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

När timern lyckas liknar utdata följande:

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

Hantera timerutlösare

Använd kommandona az acr task timer för att hantera timerutlösare för en ACR-uppgift.

Lägga till eller uppdatera en timerutlösare

När en aktivitet har skapats kan du lägga till en timerutlösare med hjälp av kommandot az acr task timer add . I följande exempel läggs timerutlösarens namn timer2 till timertask som skapades tidigare. Den här timern utlöser uppgiften varje dag kl. 10:30 UTC.

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

Uppdatera schemat för en befintlig utlösare eller ändra dess status med hjälp av kommandot az acr task timer update . Uppdatera till exempel utlösaren med namnet timer2 för att utlösa aktiviteten kl. 11:30 UTC:

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

Lista timerutlösare

Kommandot az acr task timer list visar de timerutlösare som har konfigurerats för en aktivitet:

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

Exempel på utdata>

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

Ta bort en timerutlösare

Använd kommandot az acr task timer remove för att ta bort en timerutlösare från en aktivitet. I följande exempel tar du bort timer2-utlösaren från timertask:

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

Cron-uttryck

ACR Tasks använder biblioteket NCronTab för att tolka cron-uttryck. Uttryck som stöds i ACR Tasks har fem obligatoriska fält avgränsade med blanksteg:

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

Tidszonen som används med cron-uttrycken är Coordinated Universal Time (UTC). Timmarna är i 24-timmarsformat.

Kommentar

ACR Tasks stöder {second} inte fältet eller {year} i cron-uttryck. Om du kopierar ett cron-uttryck som används i ett annat system måste du ta bort fälten om de används.

Varje fält kan ha någon av följande typer av värden:

Typ Exempel När den utlöses
Ett specifikt värde "5 * * * *" varje timme vid 5 minuter efter timmen
Alla värden (*) "* 5 * * *" varje minut i timmen med början 5:00 UTC (60 gånger om dagen)
Ett intervall (- operator) "0 1-3 * * *" 3 gånger per dag, kl. 1:00, 2:00 och 3:00 UTC
En uppsättning värden (, operator) "20,30,40 * * * *" 3 gånger per timme, vid 20 minuter, 30 minuter och 40 minuter efter timmen
Ett intervallvärde (/ operator) "*/10 * * * *" 6 gånger per timme, vid 10 minuter, 20 minuter och så vidare, efter timmen

Om du vill ange månader eller dagar kan du använda numeriska värden, namn eller förkortningar av namn:

  • För dagar är de numeriska värdena 0 till 6, där 0 börjar med söndag.
  • Namnen är på engelska. Exempel: Monday, January.
  • Namn är skiftlägesokänsliga.
  • Namn kan förkortas. Vi rekommenderar att du använder tre bokstäver för förkortningar. Exempel: Mon, Jan.

Cron-exempel

Exempel När den utlöses
"*/5 * * * *" en gång var femte minut
"0 * * * *" en gång högst upp i varje timme
"0 */2 * * *" en gång varannan timme
"0 9-17 * * *" en gång i timmen från 9:00 till 17:00 UTC
"30 9 * * *" kl. 9:30 UTC varje dag
"30 9 * * 1-5" kl. 9:30 UTC varje veckodag
"30 9 * Jan Mon" kl. 9:30 UTC varje måndag i januari

Rensa resurser

Om du vill ta bort alla resurser som du har skapat i den här självstudieserien, inklusive containerregistret eller -register, containerinstansen, nyckelvalvet och tjänstens huvudnamn, utfärdar du följande kommandon:

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

Nästa steg

I den här självstudien har du lärt dig hur du skapar Azure Container Registry-uppgifter som utlöses automatiskt av en timer.

Ett exempel på hur du använder en schemalagd uppgift för att rensa lagringsplatser i ett register finns i Rensa avbildningar automatiskt från ett Azure-containerregister.

Exempel på uppgifter som utlöses av incheckningar av källkod eller basavbildningsuppdateringar finns i andra artiklar i självstudieserien ACR Tasks.