預設情況下, azd up 有三個提示:環境名稱、訂閱和位置。 然而,實際專案通常需要額外的輸入,例如環境類型、專案負責人或團隊名稱。 本文介紹了三種新增自訂提示的方法,從最簡單到最靈活。 你可以在同一個範本中混合搭配三種方法。
選項一:含有 @allowed 裝飾器的選擇清單
新增自訂提示的最簡單方法是使用 @allowed 裝飾器對 Bicep 參數進行處理。 當azd遇到包含@allowed值的參數但未提供具體值時,會顯示互動式選擇清單,類似內建的訂閱與位置選擇器。
將裝飾參數加入你的 infra/main.bicep 檔案:
@description('The environment type')
@allowed([
'dev'
'staging'
'prod'
])
param environmentType string
當你執行 azd up 時,azd 會自動顯示一個選擇清單供此參數使用。 使用者可透過方向鍵和輸入方式進行篩選,就像訂閱選擇器一樣。
不需要額外的設定。 把參數加入你的 Bicep 檔案,azd 會處理剩下的部分。
小提示
使用 @metadata 配合azd.default 以突出顯示預設選擇:
@allowed(['dev', 'staging', 'prod'])
@metadata({
azd: {
default: 'dev'
}
})
param environmentType string
更多有關裝飾器的選項,請參見 處理適用於 Bicep 輸入參數的 Azure Developer CLI 中的中繼資料。
選項二:自由文字輸入
如果你需要開放式輸入而非固定清單,請宣告一個沒有預設值的參數。 當 azd 遇到一個在 main.parameters.json 中沒有預設值且沒有值的必要參數時,會提示使用者自行輸入文字。
在你的 infra/main.bicep 檔案中新增參數:
@description('Who owns this project')
param projectOwner string
當你執行 azd up時,使用者會輸入一個數值並按下 Enter。
選項三:自訂邏輯的掛鉤
Bicep 裝飾器覆蓋大多數情境,但有時你需要更多的彈性,例如從 API 獲取的動態清單、條件式提示、驗證,或自訂選單風格的介面。 在這些情況下,請用 preprovision hook 在 azd provision 前執行自訂腳本。
理解流程
鉤子方法的運作方式是透過以下過程進行:
- 掛鉤腳本會執行並以自訂選單、驗證或其他邏輯提示使用者。
- 腳本會用
azd env set VARIABLE_NAME value來儲存數值。 - 值在
.azure/<env>/.env中持續存在。 -
main.parameters.json將值${VARIABLE_NAME}視為 。 - Bicep 在配置時會以常規參數接收這些參數。
建立鉤子腳本
建立一個 hook 腳本來提示使用者並儲存結果。 以下範例包括冪等守衛,若值已設定,則在重跑時跳過提示,以及 default 處理無效輸入的情境。
建立 hooks/preprovision.ps1 檔案:
Write-Host "========================================"
Write-Host " Custom Pre-Provision Configuration"
Write-Host "========================================"
# Skip prompt if value is already set
$existingTeam = $null
$output = azd env get-value CUSTOM_TEAM_NAME 2>&1
if ($LASTEXITCODE -eq 0 -and $output) {
$existingTeam = $output.Trim()
}
if ($existingTeam) {
Write-Host "Team name is already set to: $existingTeam"
exit 0
}
Write-Host "Available teams:"
Write-Host " 1) platform-engineering"
Write-Host " 2) app-development"
Write-Host " 3) data-science"
Write-Host " 4) devops"
Write-Host " 5) Enter custom value"
$choice = Read-Host "Select a team (1-5)"
$teamName = switch ($choice) {
"1" { "platform-engineering" }
"2" { "app-development" }
"3" { "data-science" }
"4" { "devops" }
"5" { Read-Host "Enter custom team name" }
default {
Write-Error "Invalid selection: $choice"
exit 1
}
}
# Store in azd environment
azd env set CUSTOM_TEAM_NAME $teamName
Write-Host "Team name set to: $teamName"
將變數映射到 Bicep 參數
在你的 main.parameters.json 檔案中,參考環境變數:
{
"parameters": {
"customTeamName": {
"value": "${CUSTOM_TEAM_NAME}"
}
}
}
在你的 main.bicep 檔案中,請用預設的參數宣告該參數,這樣 azd 就不會同時觸發該參數:
@description('Team name - set by preprovision hook')
param customTeamName string = ''
啟用鉤子
將掛鈎配置添加到你的 azure.yaml:
hooks:
preprovision:
windows:
shell: pwsh
run: hooks/preprovision.ps1
interactive: true
posix:
shell: sh
run: hooks/preprovision.sh
interactive: true
設定interactive: true會將腳本綁定到控制台,以便它能讀取使用者輸入。 欲了解更多關於掛鉤設定的資訊,請參見 使用命令與事件鉤子自訂您的Azure開發者 CLI 工作流程。
選擇正確的方法
| Scenario | 方法 |
|---|---|
| 從固定的數值清單中選擇。 |
@allowed 裝飾者(選項一) |
| 收集自由文字輸入。 | 參數無預設值(選項二) |
| 動態清單、API 呼叫或條件邏輯。 | 鉤子腳本(選項三) |
| 跳過 CI/CD 裡的所有提示。 | 預設值(見下節) |
CI/CD 中的跳過提示
這三種選項都支援非互動模式。 在執行azd前,預設值並傳遞--no-prompt:
# Set hook values
azd env set CUSTOM_TEAM_NAME "platform-engineering"
# Set Bicep parameter values
azd env config set infra.parameters.environmentType "prod"
azd env config set infra.parameters.projectOwner "ci-bot"
# Run with no prompts
azd up --subscription <subscription-id> --location eastus --no-prompt
如果缺少某個所需值,azd 將會精確回報缺少哪個參數,並顯示修正所需的 azd env config set 指令。