教學課程:根據定義的排程執行 ACR 工作
本教學課程說明如何依排程執行 ACR 工作。 設定一或多個「計時器觸發程序」來排程工作。 計時器觸發程序可以單獨使用,或與其他工作觸發程序搭配使用。
在本教學課程中,您將了解如何排程工作以及:
- 使用計時器觸發程序建立工作
- 管理計時器觸發程序
排程工作適用於類似以下的案例:
- 執行排程維護作業的容器工作負載。 例如,執行容器化的應用程式,從登錄中移除不必要的映像。
- 在工作日期間對生產映像執行一組測試,作為即時網站監視的一部分。
必要條件
在 Azure Cloud Shell 中使用 Bash 環境。 如需詳細資訊,請參閱 Azure Cloud Shell 中的 Bash 快速入門。
若要在本地執行 CLI 參考命令,請安裝 Azure CLI。 若您在 Windows 或 macOS 上執行,請考慮在 Docker 容器中執行 Azure CLI。 如需詳細資訊,請參閱〈如何在 Docker 容器中執行 Azure CLI〉。
如果您使用的是本機安裝,請使用 az login 命令,透過 Azure CLI 來登入。 請遵循您終端機上顯示的步驟,完成驗證程序。 如需其他登入選項,請參閱使用 Azure CLI 登入。
出現提示時,請在第一次使用時安裝 Azure CLI 延伸模組。 如需擴充功能詳細資訊,請參閱使用 Azure CLI 擴充功能。
執行 az version 以尋找已安裝的版本和相依程式庫。 若要升級至最新版本,請執行 az upgrade。
關於排程工作
使用 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 工作教學課程系列 (部分機器翻譯) 中的其他文章。