Dodawanie niestandardowych monitów do przepływu pracy

Domyślnie azd up monituje o trzy elementy: nazwę środowiska, subskrypcję i lokalizację. Jednak rzeczywiste projekty często wymagają dodatkowych danych wejściowych, takich jak typ środowiska, właściciel projektu lub nazwa zespołu. W tym artykule opisano trzy podejścia do dodawania niestandardowych monitów — od najprostszych do najbardziej elastycznych. Możesz mieszać i dopasowywać wszystkie trzy podejścia w tym samym szablonie.

Opcja 1: Lista wyboru z dekoratorem @allowed

Najprostszym sposobem dodania niestandardowego monitu jest użycie dekoratora @allowed na parametrze Bicep. Gdy azd napotka parametr z wartościami @allowed i nie zostanie podana żadna wartość, zostanie wyświetlona interaktywna lista wyboru, podobna do wbudowanych selektorów subskrypcji i lokalizacji.

Dodaj parametr ozdobiony do infra/main.bicep pliku:

@description('The environment type')
@allowed([
  'dev'
  'staging'
  'prod'
])
param environmentType string

Po uruchomieniu polecenia azd upazd program automatycznie wyświetla listę wyboru dla tego parametru. Użytkownik może nawigować przy użyciu klawiszy strzałek i wpisać, aby filtrować, podobnie jak selektor subskrypcji.

Nie jest wymagana żadna dodatkowa konfiguracja. Dodaj parametr do pliku Bicep, a azd zajmie się pozostałymi czynnościami.

Wskazówka

Użyj dekoratora @metadata z azd.default , aby wyróżnić wybór domyślny:

@allowed(['dev', 'staging', 'prod'])
@metadata({
  azd: {
    default: 'dev'
  }
})
param environmentType string

Aby uzyskać więcej opcji dekoratora, zobacz Praca z metadanymi wiersza polecenia dewelopera Azure dla parametrów wejściowych Bicep.

Opcja 2: Wprowadzanie tekstu dowolnego

Jeśli potrzebujesz otwartych danych wejściowych zamiast stałej listy, zadeklaruj parametr bez wartości domyślnej. W przypadku azd napotkania wymaganego parametru, który nie ma wartości domyślnej i żadnej wartości w elemencie main.parameters.json, wyświetla użytkownikowi monit o wprowadzenie swobodnego tekstu.

Dodaj parametr do infra/main.bicep pliku:

@description('Who owns this project')
param projectOwner string

Po uruchomieniu polecenia azd upużytkownik wpisze wartość i naciśnie klawisz Enter.

Opcja 3: Hooki dla logiki niestandardowej

Bicep dekoratory obejmują większość scenariuszy, ale czasami potrzebujesz większej elastyczności, takich jak dynamiczne listy z API, podpowiedzi warunkowe, walidacja lub niestandardowy interfejs użytkownika w stylu menu. W takich przypadkach użyj haka preprovision , aby uruchomić skrypt niestandardowy przed azd provision.

Omówienie przepływu

Metoda oparta na haku działa przez następujący łańcuch:

  1. Skrypt hooka jest uruchamiany i prezentuje użytkownikowi niestandardowe menu, walidację lub inną logikę.
  2. Skrypt przechowuje wartości przy użyciu polecenia azd env set VARIABLE_NAME value.
  3. Wartości są utrwalane w pliku .azure/<env>/.env.
  4. main.parameters.json odwołuje się do wartości jako ${VARIABLE_NAME}.
  5. Bicep odbiera je jako zwykłe parametry podczas prowizjonowania.

Tworzenie skryptu zaczepienia

Utwórz skrypt zaczepienia, który monituje użytkownika i zapisuje wynik. Poniższe przykłady obejmują ochronę idempotentności, która pomija monit po ponownym uruchomieniu, jeśli wartość jest już ustawiona, oraz default przypadek, który obsługuje nieprawidłowe dane wejściowe.

hooks/preprovision.ps1 Utwórz plik:

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"

Mapuj zmienną na parametr Bicep

main.parameters.json W pliku odwołaj się do zmiennej środowiskowej:

{
  "parameters": {
    "customTeamName": {
      "value": "${CUSTOM_TEAM_NAME}"
    }
  }
}

main.bicep W pliku zadeklaruj parametr z wartością domyślną, więc azd nie wyświetla również monitu o jego podanie:

@description('Team name - set by preprovision hook')
param customTeamName string = ''

Włączanie haka

Dodaj konfigurację punktów zaczepienia do elementu azure.yaml:

hooks:
  preprovision:
    windows:
      shell: pwsh
      run: hooks/preprovision.ps1
      interactive: true
    posix:
      shell: sh
      run: hooks/preprovision.sh
      interactive: true

Ustawienie interactive: true wiąże skrypt z konsolą, aby mógł odczytywać dane wejściowe użytkownika. Aby uzyskać więcej informacji na temat konfiguracji hooków, zobacz Dostosowywanie przepływów pracy interfejsu wiersza polecenia dewelopera Azure przy użyciu poleceń i hooków zdarzeń.

Wybieranie odpowiedniego podejścia

Scenario Metoda
Wybierz z stałej listy wartości. @allowed Dekorator (Opcja 1)
Zbieranie danych wejściowych w formie dowolnego tekstu. Parametr bez wartości domyślnej (opcja 2)
Listy dynamiczne, wywołania interfejsu API lub logika warunkowa. Skrypt hooka (opcja 3)
Pomiń wszystkie monity w CI/CD. Wstępnie ustawione wartości (zobacz następującą sekcję)

Pomiń monity i komunikaty w procesach CI/CD

Wszystkie trzy opcje obsługują tryb nieinterakcyjny. Przed uruchomieniem azd i przekazaniem --no-promptwstępnie ustawionych wartości:

# 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

Jeśli brakuje wymaganej wartości, azd raportuje dokładnie, którego parametru brakuje i wyświetla azd env config set polecenie potrzebne do jego naprawienia.