教學課程:在定義的排程上執行 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-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 從星期日開始。
- 名稱是英文。 例如:
Monday
、January
。 - 名稱不區分大小寫。
- 名稱可以縮寫。 三個字母是建議的縮寫長度。 例如:
Mon
、Jan
。
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 工作教學課程系列中的其他文章。