Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Som standard azd up uppmanas du att ange tre saker: miljönamn, prenumeration och plats. Verkliga projekt behöver dock ofta extra indata, till exempel en miljötyp, projektägare eller teamnamn. Den här artikeln beskriver tre metoder för att lägga till anpassade frågor, från enklast till mest flexibel. Du kan blanda och matcha alla tre metoderna i samma mall.
Alternativ 1: Urvalslista med @allowed-dekoratören
Det enklaste sättet att lägga till en anpassad fråga är att använda @allowed decorator på en Bicep-parameter. När azd stöter på en parameter med @allowed värden och inget värde anges visas en interaktiv urvalslista, liknande inbyggda prenumerations- och platsväljare.
Lägg till den dekorerade parametern i infra/main.bicep filen:
@description('The environment type')
@allowed([
'dev'
'staging'
'prod'
])
param environmentType string
När du kör azd upazd visar automatiskt en plocklista för den här parametern. Användaren kan navigera med hjälp av piltangenterna och skriva för att filtrera, precis som prenumerationsväljaren.
Ingen extra konfiguration krävs. Lägg till parametern i Bicep-filen och azd hanterar resten.
Tips/Råd
Använd dekoratören @metadata med azd.default för att markera ett standardval:
@allowed(['dev', 'staging', 'prod'])
@metadata({
azd: {
default: 'dev'
}
})
param environmentType string
Fler alternativ för dekoratörer finns i Arbeta med Azure Developer CLI metadata för Bicep-insparametrar.
Alternativ 2: Fritextinmatning
Om du behöver öppna indata i stället för en fast lista deklarerar du en parameter utan standardvärde. När azd påträffar en obligatorisk parameter som inte har något standardvärde och inget värde i main.parameters.jsonuppmanas användaren att ange fritextinmatning.
Lägg till parametern i infra/main.bicep filen:
@description('Who owns this project')
param projectOwner string
När du kör azd upskriver användaren ett värde och trycker på Retur.
Alternativ 3: Krokar för anpassad logik
Bicep-dekoratörer täcker de flesta scenarier, men ibland behöver du mer flexibilitet, till exempel dynamiska listor från ett API, villkorade uppmaningar, validering eller en anpassad menybaserad UI. I dessa fall använder du en preprovision krok för att köra ett anpassat skript före azd provision.
Förstå flödet
Krokmetoden fungerar genom den följande kedjan:
- Ett hook-skript körs och uppmanar användaren med anpassade menyer, validering eller annan logik.
- Skriptet lagrar värden med .
azd env set VARIABLE_NAME value - Värdena bevaras i
.azure/<env>/.env. -
main.parameters.jsonrefererar till värdena som${VARIABLE_NAME}. - Bicep tar emot dem som vanliga parametrar under försörjningen.
Skapa hook-skriptet
Skapa ett hook-skript som frågar användaren och lagrar resultatet. I följande exempel ingår en idempotensskyddsmekanism som hoppar över användaruppmaningen vid omkörningar om ett värde redan har angetts, och ett default fall som hanterar ogiltiga indata.
Skapa en hooks/preprovision.ps1 fil:
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"
Mappa variabeln till en Bicep parameter
main.parameters.json I filen refererar du till miljövariabeln:
{
"parameters": {
"customTeamName": {
"value": "${CUSTOM_TEAM_NAME}"
}
}
}
main.bicep I filen deklarerar du parametern med ett standardvärde så azd frågar inte heller efter den:
@description('Team name - set by preprovision hook')
param customTeamName string = ''
Aktivera kroken
Lägg till hook-konfigurationen i azure.yaml:
hooks:
preprovision:
windows:
shell: pwsh
run: hooks/preprovision.ps1
interactive: true
posix:
shell: sh
run: hooks/preprovision.sh
interactive: true
Inställningen interactive: true binder skriptet till konsolen så att det kan läsa indata från användaren. Mer information om hookkonfiguration finns i Anpassa dina cli-arbetsflöden för Azure utvecklare med hjälp av kommando- och händelsekrokar.
Välj rätt metod
| Scenario | Tillvägagångssätt |
|---|---|
| Välj från en fast lista med värden. |
@allowed dekoratör (alternativ 1) |
| Samla in fritextindata. | Parameter utan standard (alternativ 2) |
| Dynamiska listor, API-anrop eller villkorsstyrd logik. | Hook-skript (alternativ 3) |
| Hoppa över alla uppmaningar i CI/CD. | Förinställda värden (se följande avsnitt) |
Hoppa över uppmaningar i CI/CD
Alla tre alternativen stöder icke-interaktivt läge. Förinställda värden innan du kör azd och skickar --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
Om ett obligatoriskt värde saknas azd rapporterar exakt vilken parameter som saknas och visar kommandot azd env config set som behövs för att åtgärda det.