Adición de avisos personalizados al flujo de trabajo

De forma predeterminada, azd up solicita tres cosas: nombre del entorno, suscripción y ubicación. Sin embargo, los proyectos reales suelen necesitar una entrada adicional, como un tipo de entorno, el propietario del proyecto o el nombre del equipo. En este artículo se describen tres enfoques para agregar avisos personalizados, de más sencillo a flexible. Puede combinar los tres enfoques en la misma plantilla.

Opción 1: Lista de selección con el decorador @allowed

La manera más sencilla de agregar un mensaje personalizado es usar el decorador @allowed en un parámetro Bicep. Cuando azd encuentra un parámetro con @allowed valores y no se proporciona ningún valor, muestra una lista de selección interactiva, similar a la suscripción integrada y a los selectores de ubicación.

Agregue el parámetro decorado al infra/main.bicep archivo:

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

Al ejecutar azd up, azd presenta automáticamente una lista de selección para este parámetro. El usuario puede navegar usando las teclas de flecha y escribir para filtrar, al igual que el selector de suscripciones.

No se necesita ninguna configuración adicional. Agregue el parámetro al archivo de Bicep y azd controla el resto.

Sugerencia

Use el @metadata decorador con azd.default para resaltar una selección predeterminada:

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

Para obtener más opciones de decorador, consulte Trabajar con los metadatos del CLI de Azure Developer para parámetros de entrada Bicep.

Opción 2: Entrada de texto libre

Si necesita una entrada abierta en lugar de una lista fija, declare un parámetro sin ningún valor predeterminado. Cuando azd encuentra un parámetro necesario que no tiene ningún valor predeterminado y ningún valor en main.parameters.json, solicita al usuario la entrada de texto libre.

Agregue el parámetro al infra/main.bicep archivo:

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

Al ejecutar azd up, el usuario escribe un valor y presiona Entrar.

Opción 3: Enlaces para la lógica personalizada

Bicep decorators cubren la mayoría de los escenarios, pero a veces se necesita más flexibilidad, como listas dinámicas de una API, indicaciones condicionales, validación o una interfaz de usuario personalizada con estilo de menú. En estos casos, use un preprovision gancho para ejecutar un script personalizado antes de azd provision.

Descripción del flujo

El enfoque de enlace funciona a través de la cadena siguiente:

  1. Un script de enlace se ejecuta y solicita al usuario menús personalizados, validación u otra lógica.
  2. El script almacena valores mediante azd env set VARIABLE_NAME value.
  3. Los valores persisten en .azure/<env>/.env.
  4. main.parameters.json hace referencia a los valores como ${VARIABLE_NAME}.
  5. Bicep los recibe como parámetros normales durante la implementación.

Creación del script de enlace

Cree un hook script que solicite información al usuario y almacene el resultado. En los ejemplos siguientes se incluye una protección de idempotencia que evita el mensaje en las repeticiones si ya se ha establecido un valor, además de una situación default que controla la entrada no válida.

Cree un hooks/preprovision.ps1 archivo:

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"

Asigna la variable a un parámetro de Bicep

En el main.parameters.json archivo, haga referencia a la variable de entorno:

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

En el main.bicep archivo, declare el parámetro con un valor predeterminado, por lo que azd tampoco lo solicita:

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

Habilitar el gancho

Agregue la configuración del gancho a azure.yaml:

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

La interactive: true configuración enlaza el script a la consola para que pueda leer la entrada del usuario. Para obtener más información sobre la configuración del gancho, consulte Personalice sus flujos de trabajo de Azure Developer CLI utilizando ganchos de comandos y eventos.

Elegir el enfoque correcto

Escenario Enfoque
Elija de una lista fija de valores. @allowed decorador (opción 1)
Recoja datos de texto libre. Parámetro sin valor predeterminado (opción 2)
Listas dinámicas, llamadas API o lógica condicional. Script de enganche (opción 3)
Omitir todas las indicaciones en CI/CD. Valores predefinidos (consulte la sección siguiente)

Omitir avisos en CI/CD

Las tres opciones admiten el modo no interactivo. Valores establecidos previamente antes de ejecutar azd y pasar --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 falta un valor necesario, azd notifica exactamente qué parámetro falta y muestra el azd env config set comando necesario para corregirlo.