將自訂提示加入你的工作流程

預設情況下, 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 前執行自訂腳本。

理解流程

鉤子方法的運作方式是透過以下過程進行:

  1. 掛鉤腳本會執行並以自訂選單、驗證或其他邏輯提示使用者。
  2. 腳本會用 azd env set VARIABLE_NAME value 來儲存數值。
  3. 值在.azure/<env>/.env中持續存在。
  4. main.parameters.json 將值 ${VARIABLE_NAME}視為 。
  5. 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 指令。