Samouczek: uruchamianie zadania usługi ACR zgodnie ze zdefiniowanym harmonogramem

W tym samouczku pokazano, jak uruchomić zadanie usługi ACR zgodnie z harmonogramem. Zaplanuj zadanie, konfigurując co najmniej jeden wyzwalacz czasomierza. Wyzwalacze czasomierza mogą być używane samodzielnie lub w połączeniu z innymi wyzwalaczami zadań.

Z tego samouczka dowiesz się więcej na temat planowania zadań i:

  • Tworzenie zadania z wyzwalaczem czasomierza
  • Zarządzanie wyzwalaczami czasomierza

Planowanie zadania jest przydatne w scenariuszach, takich jak następujące:

  • Uruchamianie obciążenia kontenera na potrzeby zaplanowanych operacji konserwacji. Na przykład uruchom konteneryzowaną aplikację, aby usunąć niepotrzebne obrazy z rejestru.
  • Uruchom zestaw testów na obrazie produkcyjnym w ramach monitorowania na żywo w dniu roboczym.

Wymagania wstępne

Informacje o planowaniu zadania

  • Wyzwalacz z wyrażeniem cron — wyzwalacz czasomierza dla zadania używa wyrażenia cron. Wyrażenie jest ciągiem z pięcioma polami określającymi minutę, godzinę, dzień, miesiąc i dzień tygodnia, aby wyzwolić zadanie. Obsługiwane są częstotliwości do raz na minutę.

    Na przykład wyrażenie "0 12 * * Mon-Fri" wyzwala zadanie o południu UTC każdego dnia tygodnia. Zobacz szczegóły w dalszej części tego artykułu.

  • Wiele wyzwalaczy czasomierza — dodawanie wielu czasomierzy do zadania jest dozwolone, o ile harmonogramy się różnią.

    • Określ wiele wyzwalaczy czasomierza podczas tworzenia zadania lub dodaj je później.
    • Opcjonalnie nazwij wyzwalacze w celu łatwiejszego zarządzania lub usługa ACR Tasks udostępnia domyślne nazwy wyzwalaczy.
    • Jeśli harmonogramy czasomierza nakładają się w danym momencie, usługa ACR Tasks wyzwala zadanie w zaplanowanym czasie dla każdego czasomierza.
  • Inne wyzwalacze zadań — w zadaniu wyzwalanym przez czasomierz można również włączyć wyzwalacze na podstawie zatwierdzenia kodu źródłowego lub aktualizacji obrazu podstawowego. Podobnie jak w przypadku innych zadań usługi ACR, można również ręcznie uruchomić zaplanowane zadanie.

Tworzenie zadania z wyzwalaczem czasomierza

Polecenie zadania

Najpierw wypełnij następującą zmienną środowiskową powłoki wartością odpowiednią dla danego środowiska. Ten krok nie jest ściśle wymagany, ale trochę ułatwia wykonywanie przedstawionych w tym samouczku wielowierszowych poleceń interfejsu wiersza polecenia platformy Azure. Jeśli nie wypełnisz zmiennej środowiskowej, musisz ręcznie zastąpić każdą wartość wszędzie tam, gdzie będzie wyświetlana w przykładowych poleceniach.

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

Podczas tworzenia zadania za pomocą polecenia az acr task create można opcjonalnie dodać wyzwalacz czasomierza. --schedule Dodaj parametr i przekaż wyrażenie cron dla czasomierza.

W prostym przykładzie następujące zadanie wyzwala uruchamianie hello-world obrazu z usługi Microsoft Container Registry codziennie o godzinie 21:00 UTC. Zadanie jest uruchamiane bez kontekstu kodu źródłowego.

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

Uruchom polecenie az acr task show, aby zobaczyć, że wyzwalacz czasomierza jest skonfigurowany. Domyślnie wyzwalacz aktualizacji obrazu podstawowego jest również włączony.

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

Ponadto prosty przykład zadania uruchomionego z kontekstem kodu źródłowego. Następujące zadanie wyzwala uruchamianie hello-world obrazu z usługi Microsoft Container Registry codziennie o godzinie 21:00 UTC.

Postępuj zgodnie z wymaganiami wstępnymi , aby skompilować kontekst kodu źródłowego, a następnie utworzyć zaplanowane zadanie z kontekstem.

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

Uruchom polecenie az acr task show, aby zobaczyć, że wyzwalacz czasomierza jest skonfigurowany. Domyślnie wyzwalacz aktualizacji obrazu podstawowego jest również włączony.

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

Uruchom polecenie az acr task run, aby ręcznie wyzwolić zadanie.

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

Wyzwalanie zadania

Wyzwól zadanie ręcznie za pomocą polecenia az acr task run , aby upewnić się, że zostało ono prawidłowo skonfigurowane:

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

Jeśli kontener zostanie uruchomiony pomyślnie, dane wyjściowe będą podobne do poniższych. Dane wyjściowe są skondensowane w celu wyświetlenia kluczowych kroków

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

Po zaplanowanym czasie uruchom polecenie az acr task list-runs , aby sprawdzić, czy czasomierz wyzwolił zadanie zgodnie z oczekiwaniami:

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

Gdy czasomierz zakończy się pomyślnie, dane wyjściowe są podobne do następujących:

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

Zarządzanie wyzwalaczami czasomierza

Użyj poleceń az acr task timer, aby zarządzać wyzwalaczami czasomierza dla zadania usługi ACR.

Dodawanie lub aktualizowanie wyzwalacza czasomierza

Po utworzeniu zadania opcjonalnie dodaj wyzwalacz czasomierza przy użyciu polecenia az acr task timer add . W poniższym przykładzie dodano czasomierz o nazwie czasomierza2 do utworzonego wcześniej czasomierza timertask . Ten czasomierz wyzwala zadanie codziennie o godzinie 10:30 CZASU UTC.

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

Zaktualizuj harmonogram istniejącego wyzwalacza lub zmień jego stan za pomocą polecenia az acr task timer update . Na przykład zaktualizuj wyzwalacz o nazwie timer2 , aby wyzwolić zadanie o godzinie 11:30 UTC:

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

Wyzwalacze czasomierza listy

Polecenie az acr task timer list pokazuje wyzwalacze czasomierza skonfigurowane dla zadania:

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

Przykładowe wyjście:

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

Usuwanie wyzwalacza czasomierza

Użyj polecenia az acr task timer remove, aby usunąć wyzwalacz czasomierza z zadania. Poniższy przykład usuwa wyzwalacz timer2 z timertask:

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

Wyrażenia Cron

Usługa ACR Tasks używa biblioteki NCronTab do interpretowania wyrażeń cron. Obsługiwane wyrażenia w usłudze ACR Tasks mają pięć wymaganych pól rozdzielonych białym znakiem:

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

Strefa czasowa używana z wyrażeniami cron jest uniwersalnym czasem koordynowanym (UTC). Godziny mają format 24-godzinny.

Uwaga

Usługa ACR Tasks nie obsługuje {second} pola lub {year} w wyrażeniach cron. Jeśli skopiujesz wyrażenie cron używane w innym systemie, pamiętaj, aby usunąć te pola, jeśli są używane.

Każde pole może mieć jeden z następujących typów wartości:

Typ Przykład Po wyzwoleniu
Określona wartość "5 * * * *" co godzinę o 5 minutach po godzinie
Wszystkie wartości (*) "* 5 * * *" co minutę godziny rozpoczynającej się 5:00 UTC (60 razy dziennie)
Zakres (- operator) "0 1-3 * * *" 3 razy dziennie, o 1:00, 2:00 i 3:00 UTC
Zestaw wartości (, operator) "20,30,40 * * * *" 3 razy na godzinę, przy 20 minutach, 30 minutach i 40 minutach po godzinie
Wartość interwału (/ operator) "*/10 * * * *" 6 razy na godzinę, przy 10 minutach, 20 minutach itd., w ciągu ostatniej godziny

Aby określić miesiące lub dni, możesz użyć wartości liczbowych, nazw lub skrótów nazw:

  • W dniach wartości liczbowe to od 0 do 6, gdzie 0 zaczyna się od niedzieli.
  • Nazwy są w języku angielskim. Przykład: Monday, January.
  • Nazwy są niewrażliwe na wielkość liter.
  • Nazwy można skrócić. Trzy litery to zalecana długość skrótu. Przykład: Mon, Jan.

Przykłady Cron

Przykład Po wyzwoleniu
"*/5 * * * *" raz na pięć minut
"0 * * * *" raz w górnej części co godzinę
"0 */2 * * *" raz na dwie godziny
"0 9-17 * * *" raz na godzinę od 9:00 do 17:00 UTC
"30 9 * * *" o 9:30 UTC każdego dnia
"30 9 * * 1-5" o 9:30 UTC co dzień powszedni
"30 9 * Jan Mon" o 9:30 UTC co poniedziałek w styczniu

Czyszczenie zasobów

Aby usunąć wszystkie zasoby utworzone w tej serii samouczków, w tym rejestry kontenerów lub rejestry, wystąpienie kontenera, magazyn kluczy i jednostkę usługi, wydaj następujące polecenia:

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

Następne kroki

W tym samouczku przedstawiono sposób tworzenia zadań usługi Azure Container Registry, które są automatycznie wyzwalane przez czasomierz.

Aby zapoznać się z przykładem użycia zaplanowanego zadania do czyszczenia repozytoriów w rejestrze, zobacz Automatyczne przeczyszczanie obrazów z rejestru kontenerów platformy Azure.

Przykłady zadań wyzwalanych przez zatwierdzenia kodu źródłowego lub aktualizacje obrazu podstawowego można znaleźć w innych artykułach z serii samouczków usługi ACR Tasks.