Menambahkan perintah kustom ke alur kerja Anda

Secara default, azd up meminta tiga hal: nama lingkungan, langganan, dan lokasi. Namun, proyek nyata sering membutuhkan input tambahan, seperti jenis lingkungan, pemilik proyek, atau nama tim. Artikel ini menjelaskan tiga pendekatan untuk menambahkan perintah kustom, dari yang paling sederhana hingga yang paling fleksibel. Anda dapat mencampur dan mencocokkan ketiga pendekatan dalam templat yang sama.

Opsi 1: Daftar pilihan dengan @allowed dekorator

Cara paling sederhana untuk menambahkan prompt kustom adalah dengan menggunakan dekorator @allowed pada parameter Bicep. Saat azd menemukan parameter dengan @allowed nilai dan tidak ada nilai yang diberikan, sistem akan menampilkan daftar pilihan interaktif, mirip dengan pemilih langganan dan lokasi bawaan.

Tambahkan parameter yang didekorasi ke file Anda infra/main.bicep :

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

Saat Anda menjalankan azd up, azd secara otomatis menyajikan daftar pilih untuk parameter ini. Pengguna dapat menavigasi dengan menggunakan tombol panah dan mengetik untuk memfilter, seperti pada pemilih langganan.

Tidak diperlukan konfigurasi tambahan. Tambahkan parameter ke file Bicep Anda dan azd menangani sisanya.

Petunjuk / Saran

@metadata Gunakan dekorator dengan azd.default untuk menyoroti pilihan default:

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

Untuk opsi dekorator lainnya, lihat Bekerja dengan metadata Azure Developer CLI untuk parameter input Bicep.

Opsi 2: Input teks bebas

Jika Anda memerlukan input terbuka alih-alih daftar tetap, deklarasikan parameter tanpa nilai default. Ketika azd menemukan parameter yang diperlukan yang tidak memiliki nilai default dan tidak ada nilai di main.parameters.json, parameter meminta input teks bebas kepada pengguna.

Tambahkan parameter ke file Anda infra/main.bicep :

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

Saat Anda menjalankan azd up, pengguna mengetikan nilai dan menekan Enter.

Opsi 3: Kait untuk logika kustom

Bicep dekorator mencakup sebagian besar skenario, tetapi terkadang Anda memerlukan lebih banyak fleksibilitas, seperti daftar dinamis dari API, prompt bersyarat, validasi, atau antarmuka pengguna gaya menu kustom. Dalam kasus ini, gunakan preprovision hook untuk menjalankan skrip kustom sebelum azd provision.

Memahami alur

Pendekatan kait bekerja melalui urutan langkah berikut:

  1. Skrip kait dijalankan dan meminta interaksi dari pengguna melalui menu kustom, validasi, atau logika lainnya.
  2. Skrip menyimpan nilai menggunakan azd env set VARIABLE_NAME value.
  3. Nilai bertahan di .azure/<env>/.env.
  4. main.parameters.json mereferensikan nilai sebagai ${VARIABLE_NAME}.
  5. Bicep menerimanya sebagai parameter reguler selama proses penyediaan.

Membuat skrip hook

Buat skrip hook yang meminta pengguna dan menyimpan hasilnya. Contoh berikut menyertakan 'idempotency guard' yang melewati prompt pada saat dijalankan ulang jika nilai sudah ditetapkan, dan skenario default yang menangani input yang tidak valid.

Buat file 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"

Memetakan variabel ke parameter Bicep

Dalam file Anda main.parameters.json , referensikan variabel lingkungan:

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

Dalam file Anda main.bicep , deklarasikan parameter dengan default sehingga azd tidak juga memintanya:

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

Aktifkan hook

Tambahkan konfigurasi kait ke azure.yaml:

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

Pengaturan mengikat interactive: true skrip ke konsol sehingga dapat membaca input pengguna. Untuk informasi selengkapnya tentang konfigurasi hook, lihat Sesuaikan alur kerja CLI Pengembang Azure Anda dengan menggunakan perintah dan hook peristiwa.

Pilih pendekatan yang tepat

Skenario Pendekatan
Pilih dari daftar nilai tetap. @allowed dekorator (Opsi 1)
Kumpulkan input teks bebas. Parameter tanpa nilai default (Opsi 2)
Daftar dinamis, panggilan API, atau logika bersyarah. Skrip kait (Opsi 3)
Lewati semua perintah dalam CI/CD. Nilai yang telah ditetapkan sebelumnya (lihat bagian berikut)

Lewati perintah di CI/CD

Ketiga opsi mendukung mode non-interaktif. Nilai yang telah ditetapkan sebelumnya sebelum menjalankan azd dan meneruskan --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

Jika nilai yang diperlukan hilang, azd laporkan dengan tepat parameter mana yang hilang dan menunjukkan perintah yang azd env config set diperlukan untuk memperbaikinya.