教學課程:在定義的排程上執行 ACR 工作

本教學課程說明如何依排程執行 ACR 工作 。 藉由設定一或多個 定時器觸發程式來排程工作。 定時器觸發程式可以單獨使用,或與其他工作觸發程式搭配使用。

在本教學課程中,瞭解排程工作和:

  • 使用定時器觸發程式建立工作
  • 管理定時器觸發程式

排程工作對類似下列案例很有用:

  • 執行排程維護作業的容器工作負載。 例如,執行容器化應用程式,從登錄中移除不需要的映像。
  • 在工作日期間於生產映射上執行一組測試,作為即時網站監視的一部分。

必要條件

關於排程工作

  • 使用cron運算式 觸發程式 - 工作的定時器觸發程式會使用 cron表達式。 表達式是一個字串,其中包含五個字段,指定要觸發工作的分鐘、小時、日、月和日。 支援每分鐘最多一次的頻率。

    例如,表達式 "0 12 * * Mon-Fri" 會在每個工作日的中午UTC觸發工作。 請參閱 本文稍後的詳細 數據。

  • 多個定時器觸發程式 - 只要排程不同,就允許將多個定時器新增至工作。

    • 當您建立工作時指定多個定時器觸發程式,或稍後加以新增。
    • 選擇性地將觸發程式命名為更容易管理,或 ACR 工作會提供預設的觸發程式名稱。
    • 如果定時器排程一次重疊,ACR 工作會在每個定時器的排程時間觸發工作。
  • 其他工作觸發程式 - 在定時器觸發的工作中,您也可以根據 原始程式碼認可基底映射更新來啟用觸發程式。 如同其他 ACR 工作,您也可以 手動執行 排程的工作。

使用定時器觸發程式建立工作

工作命令

首先,使用適合您環境的值,填入下列殼層環境變數。 此步驟並非絕對必要,但可讓您更輕鬆地在本教學課程中執行多行 Azure CLI 命令。 如果您未填入環境變數,則必須在範例命令中出現的位置手動取代每個值。

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

當您使用 az acr task create 命令建立工作時,您可以選擇性地新增定時器觸發程式。 新增 參數, --schedule 並傳遞定時器的cron運算式。

簡單的範例是,下列工作會觸發每天 21:00 UTC 從 Microsoft Container Registry 執行 hello-world 映射。 工作會在沒有原始碼內容的情況下執行。

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

此外,使用原始碼內容執行之工作的簡單範例。 下列工作會觸發每天 21:00 UTC 從 Microsoft Container Registry 執行 hello-world 映像。

遵循必要條件來建置原始碼內容,然後使用內容建立排程的工作。

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-run 命令,確認定時器已如預期般觸發工作:

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 timers 命令來管理 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 命令,從工作中移除定時器觸發程式。 下列範例會timertask 移除 timer2 觸發程式:

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

Cron 運算式

ACR 工作會 使用 NCronTab 連結庫來解譯 cron 表達式。 ACR 工作中支援的運算式有五個必要欄位,以空格符分隔:

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

與cron表達式搭配使用的時區為國際標準時間(UTC)。 小時格式為24小時。

注意

ACR 工作不支援 {second} cron運算式中的或 {year} 欄位。 如果您複製另一個系統中所使用的cron運算式,請務必移除這些欄位,如果使用這些字段。

每個欄位都可以有下列其中一種值:

類型 範例 觸發時
特定值 "5 * * * *" 每小時 5 分鐘超過一小時
所有值 (* "* 5 * * *" 每小時每分鐘開始 5:00 UTC (每天 60 次)
範圍 (- 運算子) "0 1-3 * * *" 每天 3 次,1:00、2:00 和 3:00 UTC
一組值 (, 運算子) "20,30,40 * * * *" 每小時 3 次、20 分鐘、30 分鐘和 40 分鐘過去一小時
間隔值 (/ 運算子) "*/10 * * * *" 每小時 6 次、10 分鐘、20 分鐘等等,過去一小時

若要指定月份或天數,您可以使用數值、名稱或名稱縮寫:

  • 天數內,數值為 0 到 6,其中 0 從星期日開始。
  • 名稱是英文。 例如: MondayJanuary
  • 名稱不區分大小寫。
  • 名稱可以縮寫。 三個字母是建議的縮寫長度。 例如: MonJan

Cron 範例

範例 觸發時
"*/5 * * * *" 每五分鐘一次
"0 * * * *" 每小時頂端一次
"0 */2 * * *" 每兩小時一次
"0 9-17 * * *" 每小時 9:00 到 17:00 UTC 一次
"30 9 * * *" 每天 9:30 UTC
"30 9 * * 1-5" 每工作日 9:30 UTC
"30 9 * Jan Mon" 1 月每星期一上午 9:30 UTC

清除資源

若要移除您在本教學課程系列中建立的所有資源,包括容器登錄或登錄、容器實例、金鑰保存庫和服務主體,請發出下列命令:

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

下一步

在本教學課程中,您已瞭解如何建立定時器自動觸發的 Azure Container Registry 工作。

如需使用排程工作清除登錄中存放庫的範例,請參閱 從 Azure 容器登錄自動清除映像。

如需原始碼認可或基底映射更新所觸發之工作的範例,請參閱 ACR 工作教學課程系列中的其他文章