Руководство: запуск задачи ACR по определенному расписанию

В этом руководстве показано, как выполнять по расписанию задачу ACR. Запланируйте задачу, настроив один или несколько триггеров таймера. Триггеры таймера можно использовать отдельно или в сочетании с другими триггерами задачи.

Изучив это руководство, вы научитесь планировать задачи, а также:

  • Создание задачи с триггером таймера
  • управлять триггерами таймера.

Планирование задачи полезно в сценариях, похожих на следующие:

  • Рабочая нагрузка контейнера запускается для выполнения операций запланированного обслуживания. Например, контейнерное приложение выполняется, чтобы удалить ненужные образы из реестра.
  • Во время рабочего дня по отношению к рабочему образу выполняется ряд тестов в рамках мониторинга активного сайта.

Необходимые компоненты

  • Используйте среду Bash в Azure Cloud Shell. Дополнительные сведения см . в кратком руководстве по Bash в Azure Cloud Shell.

  • Если вы предпочитаете выполнять справочные команды CLI локально, установите Azure CLI. Если вы работаете в Windows или macOS, Azure CLI можно запустить в контейнере Docker. Дополнительные сведения см. в статье Как запустить Azure CLI в контейнере Docker.

    • Если вы используете локальную установку, выполните вход в Azure CLI с помощью команды az login. Чтобы выполнить аутентификацию, следуйте инструкциям в окне терминала. Сведения о других возможностях, доступных при входе, см. в статье Вход с помощью Azure CLI.

    • Установите расширение Azure CLI при первом использовании, когда появится соответствующий запрос. Дополнительные сведения о расширениях см. в статье Использование расширений с Azure CLI.

    • Выполните команду az version, чтобы узнать установленную версию и зависимые библиотеки. Чтобы обновиться до последней версии, выполните команду az upgrade.

О планировании задачи

  • Триггер с выражениям cron — выражение cron применяется в триггере таймера задачи. Это выражение представляет собой строку с пятью полями, где указываются минута, час, день, месяц и день недели, когда задача будет активирована. Поддерживаются частоты до одного раза в минуту.

    Например, выражение "0 12 * * Mon-Fri" запускает задачу в 12:00 по времени UTC каждый будний день. См. подробные сведения далее в этой статье.

  • Несколько триггеров таймера — добавление нескольких таймеров к задаче разрешено, если расписания отличаются друг от друга.

    • Укажите несколько триггеров таймера при создании задачи или добавьте их позднее.
    • При необходимости присвойте триггерам имена, чтобы ими было проще управлять. Иначе задачами ACR будут предоставляться имена триггеров по умолчанию.
    • Если расписания таймера конфликтуют, задачи ACR активируют задачу в запланированное время для каждого таймера.
  • Другие триггеры задачи — для задачи, активируемой с помощью таймера, можно также включить триггеры на основе фиксации исходного кода или обновлений базового образа. Как и другие задачи ACR, запланированную задачу можно также запустить вручную.

Создание задачи с триггером таймера

Командная строка задачи

Сначала заполните следующее поле переменной среды оболочки, указав значение, подходящее для вашей среды. Этот шаг не является обязательным, но он упрощает выполнение многолинейных команд Azure CLI в этом руководстве. Если вы не заполните эти переменные среды, вам придется вручную заменять каждое значение, где бы оно ни фигурировало в примерах команд.

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

При создании задачи с помощью команды az acr task create можно дополнительно добавить триггер таймера. Добавьте параметр --schedule и передайте выражение cron для таймера.

В качестве простого примера возьмем следующую задачу, активирующую выполнение образа hello-world из Microsoft Container Registry каждый день в 21:00 UTC. Задача выполняется без контекста в виде исходного кода.

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

Выполните команду az acr task show, чтобы убедиться, что триггер таймера настроен. По умолчанию также разрешен триггер обновления базового образа.

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

Кроме того, простой пример задачи, выполняемой с контекстом исходного кода. Следующая задача запускает hello-world образ из реестра контейнеров Майкрософт каждый день в 21:00 UTC.

Следуйте предварительным требованиям, чтобы создать контекст исходного кода, а затем создать запланированную задачу с контекстом.

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

Выполните команду az acr task show, чтобы убедиться, что триггер таймера настроен. По умолчанию также разрешен триггер обновления базового образа.

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

Выполните команду az acr task run, чтобы активировать задачу вручную.

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

Активация задачи

Активируйте задачу вручную с помощью команды az acr task run, чтобы убедиться, что она правильно настроена.

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

Если контейнер успешно выполняется, выходные данные похожи на приведенные ниже. В сокращенном примере выходных данных показаны только основные шаги.

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

Когда пройдет запланированный период времени, выполните команду az acr task list-runs, чтобы убедиться, что таймер активировал задачу ожидаемым образом.

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

Если таймер успешно сработал, выходные данные похожи на приведенные ниже.

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

управлять триггерами таймера.

Используйте команды az acr task timer при управлении триггерами таймера для задачи ACR.

Добавление или обновление триггера таймера

После создания задачи можно добавить триггер таймера с помощью команды az acr task timer add. В следующем примере имя триггера таймера timer2 добавляется в созданную ранее задачу timertask. Этот таймер активирует задачу каждый день в 10:30 UTC.

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

Обновите расписание существующего триггера или измените его состояние с помощью команды az acr task timer update. Например, обновите триггер под названием timer2, чтобы активировать задачу в 11:30 UTC.

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

Список триггеров таймера

Команда az acr task timer list служит для отображения триггеров таймера, настроенных для задачи.

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

Пример результата:

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

Удаление триггера таймера

С помощью команды az acr task timer remove триггер таймера удаляется из задачи. В следующем примере триггер timer2 удаляется из задачи timertask.

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

Выражения cron

Для интерпретации выражений cron в Задачах ACR используется библиотека NCronTab. Поддерживаемые выражения в Задачах ACR обладают пятью обязательными полями, разделяемыми пробелом:

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

Часовой пояс, используемый выражениями cron, — время в формате UTC. Часы представлены в 24-часовом формате.

Примечание.

Задачи ACR не поддерживают поле {second} или {year} в выражениях cron. При копировании выражения cron, используемого в другой системе, обязательно удалите эти поля, если они используются.

Каждое поле может принимать значение одного из следующих типов:

Тип Пример Когда активируется
Определенное значение "5 * * * *" каждый час через 5 минут после его начала
Все значения (*) "* 5 * * *" каждую минуту в течение часа, начиная с 05:00 UTC (60 раз в день)
Диапазон (оператор -) "0 1-3 * * *" 3 раза в день, в 01:00, 02:00 и 03:00 UTC
Набор значений (оператор ,) "20,30,40 * * * *" 3 раза в час, через 20, 30 и 40 минут после его начала
Значение интервала (оператор /) "*/10 * * * *" 6 раз в час, через 10 минут, 20 минут и так далее после его начала

Чтобы указать дни или месяцы, можно использовать числовые значения, имена или сокращения:

  • В течение нескольких дней числовые значения — от 0 до 6, где 0 начинается с воскресенья.
  • Имена указываются на английском языке. Например: Monday, January.
  • Регистр в именах не учитывается.
  • Допускается сокращение имен. Мы рекомендуем использовать три буквы для аббревиаций. Например: Mon, Jan.

Примеры cron

Пример Когда активируется
"*/5 * * * *" через каждые пять минут
"0 * * * *" через каждый час
"0 */2 * * *" через каждые 2 часа
"0 9-17 * * *" через каждый час с 09:00 до 17:00 UTC
"30 9 * * *" в 9:30 UTC каждый день
"30 9 * * 1-5" в 9:30 UTC каждый будний день
"30 9 * Jan Mon" в 9:30 каждый понедельник января

Очистка ресурсов

Чтобы удалить все ресурсы, созданные в этой серии руководств, включая реестр или реестры контейнеров, экземпляр контейнера, хранилище ключей и субъект-службу, выполните следующие команды:

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

Следующие шаги

Из этого руководства вы узнали, как создавать задачи Реестра контейнеров Azure, которые автоматически активируются таймером.

Пример использования запланированной задачи очистки репозиториев в реестре см. в статье Автоматическая очистка образов из Реестра контейнеров Azure.

Примеры задач, активируемых путем фиксаций исходного кода или обновлений базового образа, см. в других статьях серии руководств по Задачам ACR.