共用方式為


教學課程:根據定義的排程執行 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-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 命令,從工作中移除計時器觸發程序。 下列範例會從 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 工作不支援 Cron 運算式中的 {second}{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 為星期日。
  • 名稱必須為英文。 例如:Monday, January
  • 名稱不區分大小寫。
  • 名稱可為縮寫。 我們建議使用三個字母作為縮寫。 例如:Mon, Jan

Cron 範例

範例 觸發時間
"*/5 * * * *" 每隔 5 分鐘一次
"0 * * * *" 每小時開始時一次
"0 */2 * * *" 每隔 2 小時一次
"0 9-17 * * *" 上午 9 點到下午 5 點 (UTC) 之間每隔一小時一次
"30 9 * * *" 每天上午 9:30 UTC
"30 9 * * 1-5" 每個平日的上午 9:30 UTC
"30 9 * Jan Mon" 一月的每個星期一上午 9:30 UTC

清除資源

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

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

下一步

透過本教學課程,您已了解如何建立由計時器自動觸發的 Azure Container Registry 工作。

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

如需由原始程式碼認可或基礎映像更新觸發工作的範例,請參閱 ACR 工作教學課程系列 (部分機器翻譯) 中的其他文章。