İş akışınıza özel istemler ekleme

Varsayılan olarak üç azd up şey istenir: ortam adı, abonelik ve konum. Ancak gerçek projeler genellikle ortam türü, proje sahibi veya ekip adı gibi ek girişlere ihtiyaç duyar. Bu makalede, en basitten en esneke kadar özel istemler eklemeye yönelik üç yaklaşım açıklanmaktadır. Aynı şablondaki üç yaklaşımı da karıştırabilir ve eşleştirebilirsiniz.

Seçenek 1: @allowed dekoratör ile seçim listesi

Özel istem eklemenin en basit yolu, Bicep parametresinde @allowed dekoratör kullanmaktır. azd bir parametreyle ve @allowed değerleriyle karşılaştığında ve hiçbir değer sağlanmadığında, yerleşik abonelik ve konum seçicilere benzer şekilde etkileşimli bir seçim listesi görüntüler.

Dosyanıza düzenlenmiş parametreyi infra/main.bicep ekleyin:

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

komutunu çalıştırdığınızda azd up, azd bu parametre için otomatik olarak bir seçim listesi sunar. Kullanıcı, abonelik seçici gibi ok tuşlarını kullanarak gezinebilir ve filtrelemek için yazabilir.

Ek yapılandırma gerekmez. Parametreyi Bicep dosyanıza ekleyin ve gerisini azd halleder.

Tavsiye

Varsayılan seçimi vurgulamak için @metadata dekoratörünü azd.default ile kullanın.

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

Daha fazla dekoratör seçeneği için Bicep giriş parametreleri açısından Azure Geliştirici CLI meta verileri ile çalışmaya bakın.

Seçenek 2: Serbest metin girişi

Sabit liste yerine açık uçlu girişe ihtiyacınız varsa, varsayılan değeri olmayan bir parametre bildirin. azd içinde varsayılan ve değeri olmayan gerekli bir parametreyle karşılaştığındamain.parameters.json, kullanıcıdan serbest metin girişi ister.

parametresini dosyanıza infra/main.bicep ekleyin:

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

komutunu çalıştırdığınızda azd up, kullanıcı bir değer girer ve Enter tuşuna basar.

Seçenek 3: Özel mantık için hook'lar

Bicep dekoratörler çoğu senaryoyu kapsar, ancak bazen API'den dinamik listeler, koşullu istemler, doğrulama veya özel menü tarzı kullanıcı arabirimi gibi daha fazla esnekliğe ihtiyacınız vardır. Bu gibi durumlarda, preprovision öncesinde özel bir betiği çalıştırmak için bir hook kullanın.

Akışı anlama

Kanca yaklaşımı aşağıdaki zincirde çalışır:

  1. Kanca betiği çalıştırılır ve kullanıcıya özel menüler, doğrulama veya başka bir mantığı sunar.
  2. Betik azd env set VARIABLE_NAME value kullanarak değerleri depolar.
  3. Değerler .azure/<env>/.env içinde kalıcıdır.
  4. main.parameters.json değerleri ${VARIABLE_NAME} olarak referans alır.
  5. Sağlama sırasında Bicep bunları normal parametreler olarak alır.

Kanca betiğini oluşturun

Kullanıcıdan bilgi isteyen ve sonucu depolayan bir kanca betiği oluşturun. Aşağıdaki örneklerde, bir değer zaten ayarlanmışsa yeniden çalıştırmalarda istemi atlayan bir idempotentlik koruması ve geçersiz girişi işleyen bir default durumu yer alır.

hooks/preprovision.ps1 Dosya oluşturma:

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"

Değişkeni bir Bicep parametresiyle eşleme

Dosyanızda main.parameters.json ortam değişkenine başvurun:

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

Dosyanızda main.bicep parametresini varsayılan azd değerle bildirerek bunu da istemesini önleyin:

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

Kancayı etkinleştir

Kanca yapılandırmasını azure.yaml öğenize ekleyin.

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

interactive: true ayarı, kullanıcı girişini okuyabilmesi için betiği konsola bağlar. Kanca yapılandırması hakkında daha fazla bilgi için bkz. Azure Geliştirici CLI iş akışlarınızı komut ve olay kancalarını kullanarak özelleştirin .

Doğru yaklaşımı seçin

Scenario Yaklaşım
Sabit bir değer listesinden seçin. @allowed dekoratör (Seçenek 1)
Serbest metin girişi toplayın. Varsayılan olmayan parametre (Seçenek 2)
Dinamik listeler, API çağrıları veya koşullu mantık. Tıkaç komut dosyası (Alternatif 3)
CI/CD'deki tüm istemleri atlayın. Önceden ayarlanmış değerler (aşağıdaki bölüme bakın)

CI/CD'de istemleri atlama

Üç seçenek de etkileşimli olmayan modu destekler. Önce azd çalıştırın ve --no-prompt geçirin; ardından değerleri ayarlayın.

# 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

Gerekli bir değer eksikse, azd tam olarak hangi parametrenin azd env config set eksik olduğunu bildirir ve düzeltmek için gereken komutu gösterir.