ARM şablonu test araç setini kullanma

Azure Resource Manager şablonu (ARM şablonu) test araç seti , şablonunuzun önerilen uygulamalar kullanıp kullanmadığını denetler. Şablonunuz Önerilen uygulamalarla uyumlu olmadığında, önerilen değişikliklerle ilgili uyarıların bir listesini döndürür. Test araç setini kullanarak, şablon geliştirmede yaygın sorunların nasıl önleneceğini öğrenebilirsiniz. Bu makalede, test araç setinin nasıl çalıştırılacağı ve testlerin nasıl ekleneceği ve kaldırılacağı açıklanır. Testlerin nasıl çalıştırılacağı veya belirli bir testin nasıl çalıştırılacağı hakkında daha fazla bilgi için bkz. test parametreleri.

Araç seti, PowerShell veya CLı içindeki bir komuttan çalıştırılabilen bir PowerShell betikleri kümesidir. Bu sınamalar önerilerdir ancak gereksinimlerdir. Hangi testlerin hedeflerinizle ilgili olduğuna karar verebilir ve hangi testlerin çalıştırılacağını özelleştirebilirsiniz.

Araç seti dört test kümesi içerir:

Windows’ta yükleme

  1. Zaten PowerShell 'e sahip değilseniz Windows PowerShell 'i yükleyebilirsiniz.

  2. Test araç seti için en son .zip dosyasını indirin ve ayıklayın.

  3. PowerShell 'i başlatın.

  4. Test araç takımını ayıkladığınız klasöre gidin. Bu klasör içinde ARM-TTK klasörü ' ne gidin.

  5. Yürütme ilkeniz betikleri Internet 'ten engelliyorsa, betik dosyalarının engellemesini kaldırmanız gerekir. ARM-TTK klasöründe olduğunuzdan emin olun.

    Get-ChildItem *.ps1, *.psd1, *.ps1xml, *.psm1 -Recurse | Unblock-File
    
  6. Modülü içeri aktarın.

    Import-Module .\arm-ttk.psd1
    
  7. Testleri çalıştırmak için aşağıdaki komutu kullanın:

    Test-AzTemplate -TemplatePath \path\to\template
    

Linux'ta yükleme

  1. Henüz PowerShell yoksa, Linux 'Ta PowerShell 'i yükleyebilirsiniz.

  2. Test araç seti için en son .zip dosyasını indirin ve ayıklayın.

  3. PowerShell 'i başlatın.

    pwsh
    
  4. Test araç takımını ayıkladığınız klasöre gidin. Bu klasör içinde ARM-TTK klasörü ' ne gidin.

  5. Yürütme ilkeniz betikleri Internet 'ten engelliyorsa, betik dosyalarının engellemesini kaldırmanız gerekir. ARM-TTK klasöründe olduğunuzdan emin olun.

    Get-ChildItem *.ps1, *.psd1, *.ps1xml, *.psm1 -Recurse | Unblock-File
    
  6. Modülü içeri aktarın.

    Import-Module ./arm-ttk.psd1
    
  7. Testleri çalıştırmak için aşağıdaki komutu kullanın:

    Test-AzTemplate -TemplatePath /path/to/template
    

macOS’ta yükleme

  1. Zaten PowerShell 'e sahip değilseniz, macOS 'Ta PowerShell 'i yükleyebilirsiniz.

  2. coreutils yükleme:

    brew install coreutils
    
  3. Test araç seti için en son .zip dosyasını indirin ve ayıklayın.

  4. PowerShell 'i başlatın.

    pwsh
    
  5. Test araç takımını ayıkladığınız klasöre gidin. Bu klasör içinde ARM-TTK klasörü ' ne gidin.

  6. Yürütme ilkeniz betikleri Internet 'ten engelliyorsa, betik dosyalarının engellemesini kaldırmanız gerekir. ARM-TTK klasöründe olduğunuzdan emin olun.

    Get-ChildItem *.ps1, *.psd1, *.ps1xml, *.psm1 -Recurse | Unblock-File
    
  7. Modülü içeri aktarın.

    Import-Module ./arm-ttk.psd1
    
  8. Testleri çalıştırmak için aşağıdaki komutu kullanın:

    Test-AzTemplate -TemplatePath /path/to/template
    

Sonuç biçimi

Geçişi yapılan testler yeşil ve önceden kullanıma hazır olarak görüntülenir [+] .

Başarısız olan testler kırmızı ve ile önceden görüntülenir [-] .

Uyarı içeren testler sarı olarak görüntülenir ve ile önceden başlar [?] .

test sonuçlarını görüntüleyin.

Metin sonuçları şunlardır:

deploymentTemplate
[+] adminUsername Should Not Be A Literal (6 ms)
[+] apiVersions Should Be Recent In Reference Functions (9 ms)
[-] apiVersions Should Be Recent (6 ms)
    Api versions must be the latest or under 2 years old (730 days) - API version 2019-06-01 of
    Microsoft.Storage/storageAccounts is 760 days old
    Valid Api Versions:
    2021-04-01
    2021-02-01
    2021-01-01
    2020-08-01-preview

[+] artifacts parameter (4 ms)
[+] CommandToExecute Must Use ProtectedSettings For Secrets (9 ms)
[+] DependsOn Best Practices (5 ms)
[+] Deployment Resources Must Not Be Debug (6 ms)
[+] DeploymentTemplate Must Not Contain Hardcoded Uri (4 ms)
[?] DeploymentTemplate Schema Is Correct (6 ms)
    Template is using schema version '2015-01-01' which has been deprecated and is no longer
    maintained.

Test parametreleri

-TemplatePathParametresini sağladığınızda araç seti, azuredeploy.json veya maintemplate.js adlı bir şablon için bu klasöre bakar. Önce bu şablonu sınar ve sonra klasördeki ve alt klasörlerindeki diğer tüm şablonları sınar. Diğer şablonlar, bağlantılı şablonlar olarak test edilir. Yolunuz createUiDefinition.jsadlı bir dosya IÇERIYORSA, UI tanımıyla ilgili olan testleri çalıştırır. Testler Ayrıca parametre dosyaları ve klasördeki tüm JSON dosyaları için de çalıştırılır.

Test-AzTemplate -TemplatePath $TemplateFolder

Bu klasördeki bir dosyayı test etmek için -File parametresini ekleyin. Ancak, klasörde hala azuredeploy.js veya maintemplate.js adında bir ana şablon olması gerekir.

Test-AzTemplate -TemplatePath $TemplateFolder -File cdn.json

Varsayılan olarak, tüm testler çalıştırılır. Çalıştırmak üzere ayrı testler belirtmek için -Test parametresini kullanın ve test adını sağlayın. Test adları için bkz. ARM şablonları, parametre dosyaları, createUiDefinition.jsonve tüm dosyalar.

Test-AzTemplate -TemplatePath $TemplateFolder -Test "Resources Should Have Location"

Testleri özelleştirme

Varsayılan testleri özelleştirebilir veya kendi testlerinizi oluşturabilirsiniz. Bir testi kalıcı olarak kaldırmak istiyorsanız, .test.ps1 dosyasını klasöründen silin.

Araç seti, belirli dosya türleri için çalıştırılan varsayılan testleri içeren dört klasöre sahiptir:

  • ARM şablonları: \arm-ttk\testcases\deploymentTemplate
  • Parametre dosyaları: \arm-ttk\testcases\deploymentParameters
  • createUiDefinition.js: \arm-ttk\testcases\CreateUIDefinition
  • Tüm dosyalar: \arm-ttk\testcases\AllFiles

Özel test ekleme

Kendi testinizi eklemek için, adlandırma kuralına sahip bir dosya oluşturun: Your-Custom-Test-Name.test.ps1.

Test, şablonu bir nesne parametresi veya dize parametresi olarak alabilir. Genellikle, bir veya diğerini kullanırsınız, ancak her ikisini de kullanabilirsiniz.

Şablonun bir bölümünü almanız ve özellikleri boyunca yinelemek istediğinizde, Object parametresini kullanın. Object parametresini kullanan bir test aşağıdaki biçimdedir:

param(
  [Parameter(Mandatory=$true,Position=0)]
  [PSObject]
  $TemplateObject
)

# Implement test logic that evaluates parts of the template.
# Output error with: Write-Error -Message

Şablon nesnesi aşağıdaki özelliklere sahiptir:

  • $schema
  • contentVersion
  • parameters
  • variables
  • resources
  • outputs

Örneğin, ile parametrelerin koleksiyonunu alabilirsiniz $TemplateObject.parameters .

Tüm şablonda bir dize işlemi yapmanız gerektiğinde dize parametresini kullanın. String parametresini kullanan bir test aşağıdaki biçimdedir:

param(
  [Parameter(Mandatory)]
  [string]
  $TemplateText
)

# Implement test logic that performs string operations.
# Output error with: Write-Error -Message

Örneğin, belirli bir sözdiziminin kullanıldığını görmek için dize parametresinin normal bir ifadesini çalıştırabilirsiniz.

Testi uygulama hakkında daha fazla bilgi edinmek için bu klasördeki diğer testlere bakın.

Azure Pipelines ile tümleştirin

Test araç takımını Azure ardışık düzenine ekleyebilirsiniz. Bir işlem hattı ile, şablon her güncelleştirildiği zaman testi çalıştırabilir veya dağıtım işleminizin bir parçası olarak çalıştırabilirsiniz.

Test araç takımını ardışık düzene eklemenin en kolay yolu, üçüncü taraf uzantılardır. Aşağıdaki iki uzantı mevcuttur:

Ya da kendi görevlerinizi uygulayabilirsiniz. Aşağıdaki örnek, test araç setinin nasıl indirileceği gösterilmektedir.

{
  "environment": {},
  "enabled": true,
  "continueOnError": false,
  "alwaysRun": false,
  "displayName": "Download TTK",
  "timeoutInMinutes": 0,
  "condition": "succeeded()",
  "task": {
    "id": "e213ff0f-5d5c-4791-802d-52ea3e7be1f1",
    "versionSpec": "2.*",
    "definitionType": "task"
  },
  "inputs": {
    "targetType": "inline",
    "filePath": "",
    "arguments": "",
    "script": "New-Item '$(ttk.folder)' -ItemType Directory\nInvoke-WebRequest -uri '$(ttk.uri)' -OutFile \"$(ttk.folder)/$(ttk.asset.filename)\" -Verbose\nGet-ChildItem '$(ttk.folder)' -Recurse\n\nWrite-Host \"Expanding files...\"\nExpand-Archive -Path '$(ttk.folder)/*.zip' -DestinationPath '$(ttk.folder)' -Verbose\n\nWrite-Host \"Expanded files found:\"\nGet-ChildItem '$(ttk.folder)' -Recurse",
    "errorActionPreference": "stop",
    "failOnStderr": "false",
    "ignoreLASTEXITCODE": "false",
    "pwsh": "true",
    "workingDirectory": ""
  }
}

Sonraki örnek, testlerin nasıl çalıştırılacağını gösterir.

{
  "environment": {},
  "enabled": true,
  "continueOnError": true,
  "alwaysRun": false,
  "displayName": "Run Best Practices Tests",
  "timeoutInMinutes": 0,
  "condition": "succeeded()",
  "task": {
    "id": "e213ff0f-5d5c-4791-802d-52ea3e7be1f1",
    "versionSpec": "2.*",
    "definitionType": "task"
  },
  "inputs": {
    "targetType": "inline",
    "filePath": "",
    "arguments": "",
    "script": "Import-Module $(ttk.folder)/arm-ttk/arm-ttk.psd1 -Verbose\n$testOutput = @(Test-AzTemplate -TemplatePath \"$(sample.folder)\")\n$testOutput\n\nif ($testOutput | ? {$_.Errors }) {\n   exit 1 \n} else {\n    Write-Host \"##vso[task.setvariable variable=result.best.practice]$true\"\n    exit 0\n} \n",
    "errorActionPreference": "continue",
    "failOnStderr": "true",
    "ignoreLASTEXITCODE": "false",
    "pwsh": "true",
    "workingDirectory": ""
  }
}

Sonraki adımlar