Ajouter des invites personnalisées à votre flux de travail

Par défaut, azd up vous êtes invité à entrer trois éléments : nom de l’environnement, abonnement et emplacement. Toutefois, les projets réels ont souvent besoin d’une entrée supplémentaire, comme un type d’environnement, un propriétaire de projet ou un nom d’équipe. Cet article décrit trois approches pour l’ajout d’invites personnalisées, de la plus simple à la plus flexible. Vous pouvez combiner et mettre en correspondance les trois approches dans le même modèle.

Option 1 : Liste de sélection avec le @allowed décorateur

La façon la plus simple d’ajouter un prompt personnalisé consiste à utiliser le décorateur @allowed sur un paramètre Bicep. Lorsque azd rencontre un paramètre avec @allowed valeurs et qu’aucune valeur n’est fournie, il affiche une liste de sélection interactive, similaire aux sélecteurs d’abonnement et d’emplacement intégrés.

Ajoutez le paramètre décoré à votre infra/main.bicep fichier :

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

Lorsque vous exécutez azd up, azd présente automatiquement une liste de sélections pour ce paramètre. L’utilisateur peut naviguer à l’aide de touches de direction et taper pour filtrer, tout comme le sélecteur d’abonnement.

Aucune configuration supplémentaire n’est nécessaire. Ajoutez le paramètre à votre fichier Bicep et azd gère le reste.

Conseil / Astuce

Utilisez le @metadata décorateur avec azd.default pour mettre en surbrillance une sélection par défaut :

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

Pour plus d’options de décoration, consultez Utilisez les métadonnées de Azure Developer CLI pour les paramètres d’entrée de Bicep.

Option 2 : Entrée de texte libre

Si vous avez besoin d’une entrée ouverte au lieu d’une liste fixe, déclarez un paramètre sans valeur par défaut. Lorsque azd rencontre un paramètre obligatoire qui n’a ni valeur par défaut ni valeur, il invite l’utilisateur à entrer du texte libre.

Ajoutez le paramètre à votre infra/main.bicep fichier :

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

Lorsque vous exécutez azd up, l’utilisateur tape une valeur et appuie sur Entrée.

Option 3 : Hooks pour une logique personnalisée

Les décorateurs Bicep couvrent la plupart des scénarios, mais vous avez parfois besoin d’une plus grande flexibilité, comme des listes dynamiques issues d’une API, d’invites conditionnelles, de validation ou d’une interface utilisateur personnalisée de type menu. Dans ces cas, utilisez un preprovision hook pour exécuter un script personnalisé avant azd provision.

Comprendre le flux

L’approche par crochet fonctionne selon la chaîne suivante :

  1. Un script de déclencheur s’exécute et propose à l’utilisateur des menus personnalisés, une validation ou d'autres logiques.
  2. Le script stocke les valeurs à l’aide de azd env set VARIABLE_NAME value.
  3. Les valeurs sont conservées dans .azure/<env>/.env.
  4. main.parameters.json référence les valeurs en tant que ${VARIABLE_NAME}.
  5. Bicep les reçoit en tant que paramètres réguliers lors de l’approvisionnement.

Créer le script de crochet

Créez un script de hook qui invite l’utilisateur et stocke le résultat. Les exemples suivants incluent un garde d’idempotency qui ignore l’invite lors de nouvelles exécutions si une valeur est déjà définie et un cas qui gère l’entrée default non valide.

Créez un hooks/preprovision.ps1 fichier :

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"

Associer la variable à un paramètre Bicep

Dans votre main.parameters.json fichier, référencez la variable d’environnement :

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

Dans votre fichier main.bicep, déclarez le paramètre avec une valeur par défaut pour que azd ne le demande pas non plus.

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

Activer le hook

Ajoutez la configuration du hook à votre azure.yaml:

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

Le interactive: true paramètre lie le script à la console afin qu’il puisse lire l’entrée utilisateur. Pour plus d’informations sur la configuration du hook, consultez Customiser vos flux de travail CLI Azure développeur à l’aide de hooks de commande et d’événements.

Choisir l’approche appropriée

Scénario Approche
Choisissez dans une liste fixe de valeurs. @allowed décorateur (Option 1)
Collecter une entrée de texte libre. Paramètre sans valeur par défaut (Option 2)
Listes dynamiques, appels d’API ou logique conditionnelle. Script de hook (option 3)
Ignorez toutes les invites dans CI/CD. Valeurs prédéfinies (voir la section suivante)

Ignorer les invites dans CI/CD

Les trois options prennent en charge le mode non interactif. Valeurs prédéfinies avant l’exécution de azd et le passage de --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

Si une valeur requise est manquante, azd signale exactement quel paramètre est manquant et affiche la azd env config set commande nécessaire pour la corriger.