使用命令和事件攔截自定義 Azure 開發人員 CLI 工作流程
Azure 開發人員 CLI 支援各種擴充點來自定義您的工作流程和部署。 攔截中間件可讓您在命令和服務生命週期事件前後 azd
執行自定義腳本。 攔截會遵循命名慣例,在相符azd
的命令或服務事件名稱上使用前置詞和後置前置詞。
例如,您可能想要在下列案例中執行自定義腳本:
- 使用預先儲存區勾點來自定義相依性管理。
- 使用預先部署勾點來確認外部相依性或自定義組態已就緒,再部署您的應用程式。
- 使用工作流程或管線結尾的後置攔截來執行自定義清除或記錄。
可用的勾點
下列 azd
命令勾點可供使用:
prerestore
和postrestore
:還原套件相依性之前和之後執行。preprovision
和postprovision
:在建立 Azure 資源之前和之後執行。predeploy
和postdeploy
:在應用程式程式代碼部署至 Azure 之前和之後執行。preup
和postup
:在合併的部署管線前後執行。Up
是執行、provision
和deploy
循序的速記命令restore
。predown
和postdown
:在移除資源之前和之後執行。
以下是可用的服務生命週期事件攔截:
prerestore
和postrestore
:還原服務套件和相依性之前和之後執行。prepackage
和postpackage
:在封裝應用程式以進行部署之前和之後執行。predeploy
和postdeploy
:在服務程式代碼部署至 Azure 之前和之後執行。
攔截組態
您可以在根目錄或特定服務組態的檔案中註冊 azure.yaml
勾點。 所有類型的勾點都支援下列組態選項:
shell
:sh
|pwsh
(如果未指定,則自動從執行推斷)。- 注意:需要 PowerShell 7。
pwsh
- 注意:需要 PowerShell 7。
run
:定義內嵌腳本或檔案的路徑。continueOnError
:當 set 會在命令攔截期間發生腳本錯誤之後繼續執行時 (預設值 false)。interactive
:設定時會將執行中的文稿系結至主控台stdin
,stdout
和stderr
(預設值 false) 。windows
:指定巢狀組態只會套用在 Windows OS 上。 如果排除此組態選項,則勾點會在所有平台上執行。posix
:指定巢狀組態僅適用於POSIX型OS(Linux和 MaxOS)。 如果排除此組態選項,則勾點會在所有平台上執行。
勾點範例
下列範例示範不同類型的攔截註冊和組態。
根命令註冊
勾點可以設定為針對檔案azure.yaml
根目錄的特定azd
命令執行。
項目目錄 (檔案 azure.yaml
所在的位置) 是命令攔截的預設目前工作目錄 (cwd
)。
name: todo-nodejs-mongo
metadata:
template: todo-nodejs-mongo@0.0.1-beta
hooks:
prerestore: # Example of an inline script. (shell is required for inline scripts)
shell: sh
run: echo 'Hello'
preprovision: # Example of external script (Relative path from project root)
run: ./hooks/preprovision.sh
services:
web:
project: ./src/web
dist: build
language: js
host: appservice
api:
project: ./src/api
language: js
host: appservice
服務註冊
攔截也可以設定為只針對檔案 .yaml
中定義的特定服務執行。
服務目錄(與檔案中服務組態azure.yaml
的 屬性中所project
定義的相同路徑)是服務攔截的預設值cwd
。
name: todo-nodejs-mongo
metadata:
template: todo-nodejs-mongo@0.0.1-beta
services:
web:
project: ./src/web
dist: build
language: js
host: appservice
api:
project: ./src/api
language: js
host: appservice
hooks:
prerestore: # Example of an inline script. (shell is required for inline scripts)
shell: sh
run: echo 'Restoring API service...'
prepackage: # Example of external script (Relative path from service path)
run: ./hooks/prepackage.sh
OS 特定勾點
或者,您也可以將勾點設定為在 Windows 或 Posix (Linux 和 MaxOS) 上執行。 根據預設,如果 Windows 或 Posix 設定已排除,則勾點會在所有平台上執行。
name: todo-nodejs-mongo
metadata:
template: todo-nodejs-mongo@0.0.1-beta
hooks:
prerestore:
posix: # Only runs on Posix environments
shell: sh
run: echo 'Hello'
windows: # Only runs on Windows environments
shell: pwsh
run: Write-Host "Hello"
services:
web:
project: ./src/web
dist: build
language: js
host: appservice
api:
project: ./src/api
language: js
host: appservice
搭配勾點使用環境變數
勾點可以使用 和 azd set <key> <value>
命令,.env
在檔案azd env get-values
中取得和設定環境變數。 勾點也可以使用 語法,從本機環境 ${YOUR_ENVIRONMENT VARIABLE}
擷取環境變數。 azd
當指令執行時,會自動設定檔案中的 .env
特定環境變數,例如 AZURE_ENV_NAME
和 AZURE_LOCATION
。 檔案中的 main.bicep
輸出參數也會在 檔案中 .env
設定。 [ 管理環境變數 ] 頁面包含環境變數工作流程的詳細資訊。
勾點可以內嵌或透過參考的腳本取得及設定環境變數,如下列範例所示:
name: azure-search-openai-demo
metadata:
template: azure-search-openai-demo@0.0.2-beta
services:
backend:
project: ./app/backend
language: py
host: appservice
hooks:
postprovision:
windows: # Run referenced script that uses environment variables (script shown below)
shell: pwsh
run: ./scripts/prepdocs.ps1
interactive: true
continueOnError: false
posix:
shell: sh
run: ./scripts/prepdocs.sh
interactive: true
continueOnError: false
postdeploy: # Pull environment variable inline from local device and set in .env file
shell: sh
run: azd env set REACT_APP_WEB_BASE_URL ${SERVICE_WEB_ENDPOINT_URL}
參考的:文稿: prepdocs.sh
echo "Loading azd .env file from current environment"
# Use the `get-values` azd command to retrieve environment variables from the `.env` file
while IFS='=' read -r key value; do
value=$(echo "$value" | sed 's/^"//' | sed 's/"$//')
export "$key=$value"
done <<EOF
$(azd env get-values)
EOF
echo 'Creating python virtual environment "scripts/.venv"'
python3 -m venv scripts/.venv
echo 'Installing dependencies from "requirements.txt" into virtual environment'
./scripts/.venv/bin/python -m pip install -r scripts/requirements.txt
echo 'Running "prepdocs.py"'
./scripts/.venv/bin/python ./scripts/prepdocs.py './data/*'
--storageaccount "$AZURE_STORAGE_ACCOUNT"
--container "$AZURE_STORAGE_CONTAINER"
--searchservice "$AZURE_SEARCH_SERVICE"
--openaiservice "$AZURE_OPENAI_SERVICE"
--openaideployment "$AZURE_OPENAI_EMB_DEPLOYMENT"
--index "$AZURE_SEARCH_INDEX"
--formrecognizerservice "$AZURE_FORMRECOGNIZER_SERVICE"
--tenantid "$AZURE_TENANT_ID" -v
要求說明
如需如何提出 Bug、要求協助或為 Azure 開發人員 CLI 提出新功能的資訊,請流覽 疑難解答和支援 頁面。