Adicione prompts personalizados ao seu fluxo de trabalho

Por defeito, azd up solicita três coisas: nome do ambiente, subscrição e localização. No entanto, projetos reais muitas vezes necessitam de input adicional, como um tipo de ambiente, proprietário do projeto ou nome da equipa. Este artigo descreve três abordagens para adicionar prompts personalizados, do mais simples ao mais flexível. Podes misturar e combinar as três abordagens no mesmo modelo.

Opção 1: Lista de seleção com o decorador @allowed

A forma mais simples de adicionar um prompt personalizado é usar o decorador @allowed num parâmetro Bicep. Quando azd encontra um parâmetro com @allowed valores e nenhum valor é fornecido, apresenta uma lista interativa de seleção, semelhante aos seletores de subscrição e localização incorporados.

Adicione o parâmetro decorado ao seu infra/main.bicep ficheiro:

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

Quando executas azd up, azd apresenta automaticamente uma lista de escolhas para este parâmetro. O utilizador pode navegar usando setas e escrever para filtrar, tal como o seletor de subscrição.

Não é necessária nenhuma configuração extra. Adiciona o parâmetro ao teu ficheiro Bicep e azd trata do resto.

Sugestão

Use o @metadata decorador com azd.default para destacar uma seleção padrão:

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

Para mais opções de decoradores, consulte Trabalhe com os metadados do Azure Developer CLI para os parâmetros de entrada do Bicep.

Opção 2: Entrada em texto livre

Se precisar de entrada aberta em vez de uma lista fixa, declare um parâmetro sem valor predefinido. Quando azd encontra um parâmetro necessário que não tem padrão nem valor em main.parameters.json, solicita ao utilizador uma introdução em texto livre.

Adicione o parâmetro ao seu infra/main.bicep ficheiro:

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

Quando executa azd up, o utilizador escreve um valor e carrega em Enter.

Opção 3: Ganchos para lógica personalizada

Os Bicep Decorators cobrem a maioria dos cenários, mas por vezes é preciso mais flexibilidade, como listas dinâmicas de uma API, prompts condicionais, validação ou uma interface personalizada ao estilo menu. Nestes casos, use um preprovision gancho para executar um script personalizado antes de azd provision.

Compreende o fluxo

A abordagem do gancho funciona através da seguinte cadeia:

  1. Um script de hook é executado e solicita ao utilizador menus personalizados, validação ou outra lógica.
  2. O script armazena valores usando azd env set VARIABLE_NAME value.
  3. Os valores persistem em .azure/<env>/.env.
  4. main.parameters.json referencia os valores como ${VARIABLE_NAME}.
  5. O Bicep recebe-os como parâmetros regulares durante o provisionamento.

Crie o script do hook

Crie um script de hook que solicite ao utilizador e armazene o resultado. Os exemplos seguintes incluem uma proteção de idempotência que evita o aviso em execuções repetidas se um valor já estiver definido, e um caso que lida com entradas inválidas.

Crie um ficheiro hooks/preprovision.ps1:

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"

Mapear a variável para um parâmetro Bicep

No seu main.parameters.json ficheiro, faça referência à variável ambiente:

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

No teu main.bicep ficheiro, declara o parâmetro com um padrão para azd não o pedir também:

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

Ativar o gancho

Adicione a configuração do gancho ao seu azure.yaml:

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

A interactive: true definição associa o script à consola para que possa ler as entradas do utilizador. Para mais informações sobre a configuração de hooks, consulte Personalize os fluxos de trabalho da CLI do seu Azure Developer usando hooks de comandos e eventos.

Escolha a abordagem certa

Scenario Abordagem
Escolhe de uma lista fixa de valores. @allowed decorador (Opção 1)
Recolha entrada de texto livre. Parâmetro sem padrão (Opção 2)
Listas dinâmicas, chamadas API ou lógica condicional. Script de gancho (Opção 3)
Ignora todas as solicitações no CI/CD. Valores pré-definidos (ver secção seguinte)

Ignorar prompts em CI/CD

As três opções suportam modo não interativo. Pré-definir valores antes de correr azd e passar --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

Se falta um valor necessário, azd reporta exatamente qual o parâmetro que falta e mostra o azd env config set comando necessário para o corrigir.