Aangepaste prompts toevoegen aan uw werkstroom

azd up Standaard wordt u gevraagd om drie dingen: omgevingsnaam, abonnement en locatie. Echte projecten hebben echter vaak extra invoer nodig, zoals een omgevingstype, projecteigenaar of teamnaam. In dit artikel worden drie benaderingen beschreven voor het toevoegen van aangepaste prompts, van eenvoudigste tot meest flexibele. U kunt alle drie de benaderingen in dezelfde sjabloon combineren en vergelijken.

Optie 1: Selectielijst met de @allowed decorator

De eenvoudigste manier om een aangepaste prompt toe te voegen, is door de @allowed decorator te gebruiken op een Bicep parameter. Wanneer azd er een parameter met @allowed waarden tegenkomt en er geen waarde wordt opgegeven, wordt er een interactieve selectielijst weergegeven, vergelijkbaar met de ingebouwde abonnements- en locatiekiezers.

Voeg de versieringsparameter toe aan uw infra/main.bicep bestand:

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

Wanneer u azd up uitvoert, wordt er automatisch een selectielijst voor deze parameter weergegeven door azd. De gebruiker kan navigeren met behulp van pijltoetsen en typen om te filteren, net zoals de abonnementskiezer.

Er is geen extra configuratie nodig. Voeg de parameter toe aan het Bicep-bestand en azd verwerkt de rest.

Aanbeveling

Gebruik de @metadata decorator met azd.default om een standaardselectie te markeren.

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

Voor meer decoratoropties raadpleegt u Werken met Azure Developer CLI-metadata voor Bicep-invoerparameters.

Optie 2: Invoer in vrije tekst

Als u open-ended invoer nodig hebt in plaats van een vaste lijst, declareert u een parameter zonder standaardwaarde. Wanneer azd een vereiste parameter tegenkomt zonder standaardwaarde en geen waarde in main.parameters.json, wordt de gebruiker gevraagd om vrije-tekstinvoer.

Voeg de parameter toe aan uw infra/main.bicep bestand:

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

Wanneer u uitvoert azd up, typt de gebruiker een waarde en drukt op Enter.

Optie 3: Hooks voor aangepaste logica

Bicep decorateurs dekken de meeste scenario's, maar soms hebt u meer flexibiliteit nodig, zoals dynamische lijsten afkomstig van een API, voorwaardelijke aanvragen, validatie of een menugestuurde gebruikersinterface. In dergelijke gevallen gebruikt u een preprovision hook om een aangepast script uit te voeren voordat azd provision.

Inzicht in de flow

De haakbenadering werkt via de volgende keten:

  1. Een hookscript wordt uitgevoerd en vraagt de gebruiker om aangepaste menu's, validatie of andere logica.
  2. In het script worden waarden opgeslagen met behulp van azd env set VARIABLE_NAME value.
  3. Waarden blijven behouden in .azure/<env>/.env.
  4. main.parameters.json verwijst naar de waarden als ${VARIABLE_NAME}.
  5. Bicep ontvangt deze als normale parameters tijdens het provisionen.

Het hookscript maken

Maak een hookscript waarmee de gebruiker wordt gevraagd en het resultaat wordt opgeslagen. De volgende voorbeelden zijn een idempotentiebeveiliging waarmee de prompt bij opnieuw uitvoeren wordt overgeslagen als er al een waarde is ingesteld en een default case die ongeldige invoer verwerkt.

hooks/preprovision.ps1 Een bestand maken:

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"

** Wijs de variabele toe aan een Bicep-parameter

Raadpleeg in uw main.parameters.json bestand de omgevingsvariabele:

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

Declareer in uw main.bicep bestand de parameter met een standaardwaarde, zodat azd er niet ook om gevraagd wordt.

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

De haak inschakelen

Voeg de hook configuratie toe aan uw azure.yaml:

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

De interactive: true instelling verbindt het script met de console, zodat gebruikersinvoer kan worden gelezen. Zie Customize your Azure Developer CLI workflows using command and event hooks voor meer informatie over hook-configuratie.

De juiste benadering kiezen

Scenario Methode
Kies uit een vaste lijst met waarden. @allowed Decorator (Optie 1)
Verzamel invoer in vrije tekst. Parameter zonder standaardwaarde (optie 2)
Dynamische lijsten, API-aanroepen of voorwaardelijke logica. Hook-script (optie 3)
Sla alle prompts in CI/CD over. Vooraf ingestelde waarden (zie de volgende sectie)

Prompts overslaan in CI/CD

Alle drie de opties ondersteunen niet-interactieve modus. Voorgedefinieerde waarden instellen voordat azd wordt uitgevoerd en --no-prompt wordt doorgegeven.

# 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

Als een vereiste waarde ontbreekt, azd rapporteert u precies welke parameter ontbreekt en geeft u de opdracht weer die nodig is om deze azd env config set te herstellen.