Använda testverktyg för ARM-mallar
Testverktyget för Azure Resource Manager-mall (ARM-mall) kontrollerar om mallen använder rekommenderade metoder. När mallen inte är kompatibel med rekommenderade metoder returneras en lista med varningar med de föreslagna ändringarna. Med hjälp av testverktyget kan du lära dig hur du undviker vanliga problem i mallutveckling. I den här artikeln beskrivs hur du kör testverktyget och hur du lägger till eller tar bort tester. Mer information om hur du kör tester eller hur du kör ett visst test finns i Testparametrar.
Verktygslådan är en uppsättning PowerShell-skript som kan köras från ett kommando i PowerShell eller CLI. De här testerna är rekommendationer men inte krav. Du kan bestämma vilka tester som är relevanta för dina mål och anpassa vilka tester som körs.
Verktygslådan innehåller fyra uppsättningar tester:
- Testfall för ARM-mallar
- Testfall för parameterfiler
- Testfall för createUiDefinition.json
- Testfall för alla filer
Anteckning
Testverktyget är endast tillgängligt för ARM-mallar. Om du vill verifiera Bicep-filer använder du Bicep-lintern.
Träningsresurser
Mer information om testverktygen för ARM-mallar och praktisk vägledning finns i Verifiera Azure-resurser med hjälp av testverktyget för ARM-mallar.
Installera i Windows
Om du inte redan har PowerShell installerar du PowerShell i Windows.
Ladda ned den senaste .zip filen för testverktyget och extrahera den.
Starta PowerShell.
Navigera till mappen där du extraherade testverktyget. Navigera till mappen arm-ttk i den mappen.
Om din körningsprincip blockerar skript från Internet måste du avblockera skriptfilerna. Kontrollera att du är i mappen arm-ttk .
Get-ChildItem *.ps1, *.psd1, *.ps1xml, *.psm1 -Recurse | Unblock-File
Importera modulen.
Import-Module .\arm-ttk.psd1
Kör testerna med följande kommando:
Test-AzTemplate -TemplatePath \path\to\template
Installera på Linux
Om du inte redan har PowerShell installerar du PowerShell på Linux.
Ladda ned den senaste .zip filen för testverktyget och extrahera den.
Starta PowerShell.
pwsh
Navigera till mappen där du extraherade testverktyget. Navigera till mappen arm-ttk i den mappen.
Om din körningsprincip blockerar skript från Internet måste du avblockera skriptfilerna. Kontrollera att du är i mappen arm-ttk .
Get-ChildItem *.ps1, *.psd1, *.ps1xml, *.psm1 -Recurse | Unblock-File
Importera modulen.
Import-Module ./arm-ttk.psd1
Kör testerna med följande kommando:
Test-AzTemplate -TemplatePath /path/to/template
Installera på macOS
Om du inte redan har PowerShell installerar du PowerShell på macOS.
Installera
coreutils
:brew install coreutils
Ladda ned den senaste .zip filen för testverktyget och extrahera den.
Starta PowerShell.
pwsh
Navigera till mappen där du extraherade testverktyget. Navigera till mappen arm-ttk i den mappen.
Om din körningsprincip blockerar skript från Internet måste du avblockera skriptfilerna. Kontrollera att du är i mappen arm-ttk .
Get-ChildItem *.ps1, *.psd1, *.ps1xml, *.psm1 -Recurse | Unblock-File
Importera modulen.
Import-Module ./arm-ttk.psd1
Kör testerna med följande kommando:
Test-AzTemplate -TemplatePath /path/to/template
Resultatformat
Tester som godkänns visas i grönt och föregås av [+]
.
Tester som misslyckas visas i rött och föregås av [-]
.
Tester med en varning visas i gult och föregås av [?]
.
Textresultaten ä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.
Testparametrar
När du anger parametern -TemplatePath
letar toolkit i mappen efter en mall med namnet azuredeploy.json eller maintemplate.json. Den testar först den här mallen och testar sedan alla andra mallar i mappen och dess undermappar. De andra mallarna testas som länkade mallar. Om sökvägen innehåller en fil med namnet createUiDefinition.json körs tester som är relevanta för UI-definitionen. Tester körs också för parameterfiler och alla JSON-filer i mappen.
Test-AzTemplate -TemplatePath $TemplateFolder
Om du vill testa en fil i mappen lägger du till parametern -File
. Mappen måste dock fortfarande ha en huvudmall med namnet azuredeploy.json eller maintemplate.json.
Test-AzTemplate -TemplatePath $TemplateFolder -File cdn.json
Som standard körs alla tester. Om du vill ange enskilda tester som ska köras använder du parametern -Test
och anger testnamnet. Testnamnen finns i ARM-mallar, parameterfiler, createUiDefinition.json och alla filer.
Test-AzTemplate -TemplatePath $TemplateFolder -Test "Resources Should Have Location"
Anpassa tester
Du kan anpassa standardtesterna eller skapa egna tester. Om du vill ta bort ett test permanent tar du bort .test.ps1-filen från mappen .
Verktygslådan har fyra mappar som innehåller standardtesterna som körs för specifika filtyper:
- ARM-mallar: \arm-ttk\testcases\deploymentTemplate
- Parameterfiler: \arm-ttk\testcases\deploymentParameters
- createUiDefinition.json: \arm-ttk\testcases\CreateUIDefinition
- Alla filer: \arm-ttk\testcases\AllFiles
Lägga till ett anpassat test
Om du vill lägga till ett eget test skapar du en fil med namngivningskonventionen: Your-Custom-Test-Name.test.ps1.
Testet kan hämta mallen som en objektparameter eller en strängparameter. Vanligtvis använder du den ena eller den andra, men du kan använda båda.
Använd objektparametern när du behöver hämta ett avsnitt i mallen och iterera genom dess egenskaper. Ett test som använder objektparametern har följande format:
param(
[Parameter(Mandatory=$true,Position=0)]
[PSObject]
$TemplateObject
)
# Implement test logic that evaluates parts of the template.
# Output error with: Write-Error -Message
Mallobjektet har följande egenskaper:
$schema
contentVersion
parameters
variables
resources
outputs
Du kan till exempel hämta samlingen med parametrar med $TemplateObject.parameters
.
Använd strängparametern när du behöver utföra en strängåtgärd på hela mallen. Ett test som använder strängparametern har följande format:
param(
[Parameter(Mandatory)]
[string]
$TemplateText
)
# Implement test logic that performs string operations.
# Output error with: Write-Error -Message
Du kan till exempel köra ett reguljärt uttryck för strängparametern för att se om en specifik syntax används.
Mer information om hur du implementerar testet finns i de andra testerna i den mappen.
Verifiera mallar för Azure Marketplace
Om du vill publicera ett erbjudande till Azure Marketplace använder du testverktyget för att verifiera mallarna. När dina mallar klarar valideringstesterna godkänner Azure Marketplace erbjudandet snabbare. Om testerna misslyckas misslyckas certifieringen av erbjudandet.
Viktigt
Marketplace-testerna lades till i juli 2022. Uppdatera modulen om du har en tidigare version.
Köra testerna i din miljö
När du har installerat verktygslådan och importerat modulen kör du följande cmdlet för att testa paketet:
Test-AzMarketplacePackage -TemplatePath "Path to the unzipped package folder"
Tolka resultatet
Testerna returnerar resultat i två avsnitt. Det första avsnittet innehåller de tester som är obligatoriska. Resultatet av dessa tester visas i sammanfattningsavsnittet.
Viktigt
Du måste åtgärda eventuella resultat i rött innan Marketplace-erbjudandet accepteras. Vi rekommenderar att du åtgärdar eventuella resultat som returneras i gult.
Textresultaten är:
Validating nestedtemplates\AzDashboard.json
[+] adminUsername Should Not Be A Literal (210 ms)
[+] artifacts parameter (3 ms)
[+] CommandToExecute Must Use ProtectedSettings For Secrets (201 ms)
[+] Deployment Resources Must Not Be Debug (160 ms)
[+] DeploymentTemplate Must Not Contain Hardcoded Url (13 ms)
[+] Location Should Not Be Hardcoded (31 ms)
[+] Min and Max Value Are Numbers (4 ms)
[+] Outputs Must Not Contain Secrets (9 ms)
[+] Password params must be secure (3 ms)
[+] Resources Should Have Location (2 ms)
[+] Resources Should Not Be Ambiguous (2 ms)
[+] Secure Params In Nested Deployments (205 ms)
[+] Secure String Parameters Cannot Have Default (3 ms)
[+] URIs Should Be Properly Constructed (190 ms)
[+] Variables Must Be Referenced (9 ms)
[+] Virtual Machines Should Not Be Preview (173 ms)
[+] VM Size Should Be A Parameter (165 ms)
Pass : 99
Fail : 3
Total: 102
Validating StartStopV2mkpl_1.0.09302021\anothertemplate.json
[?] Parameters Must Be Referenced (86 ms)
Unreferenced parameter: resourceGroupName
Unreferenced parameter: location
Unreferenced parameter: azureFunctionAppName
Unreferenced parameter: applicationInsightsName
Unreferenced parameter: applicationInsightsRegion
Avsnittet under sammanfattningsavsnittet innehåller testfel som kan tolkas som varningar. Det är valfritt att åtgärda felen, men rekommenderas starkt. Felen pekar ofta på vanliga problem som orsakar fel när en kund installerar erbjudandet.
Följ det testfall som gäller för dig för att åtgärda dina tester:
Skicka erbjudandet
När du har gjort nödvändiga korrigeringar kör du testverktyget igen. Innan du skickar in ditt erbjudande till Azure Marketplace kontrollerar du att det inte finns några fel.
Integrera med Azure Pipelines
Du kan lägga till testverktyget i din Azure Pipeline. Med en pipeline kan du köra testet varje gång mallen uppdateras eller köra den som en del av distributionsprocessen.
Det enklaste sättet att lägga till testverktyget i din pipeline är med tillägg från tredje part. Följande två tillägg är tillgängliga:
Eller så kan du implementera dina egna uppgifter. I följande exempel visas hur du laddar ned testverktyget.
För versionspipeline:
{
"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": ""
}
}
För YAML-definition för pipeline:
- pwsh: |
New-Item '$(ttk.folder)' -ItemType Directory
Invoke-WebRequest -uri '$(ttk.uri)' -OutFile "$(ttk.folder)/$(ttk.asset.filename)" -Verbose
Get-ChildItem '$(ttk.folder)' -Recurse
Write-Host "Expanding files..."
Expand-Archive -Path '$(ttk.folder)/*.zip' -DestinationPath '$(ttk.folder)' -Verbose
Write-Host "Expanded files found:"
Get-ChildItem '$(ttk.folder)' -Recurse
displayName: 'Download TTK'
I nästa exempel visas hur du kör testerna.
För versionspipeline:
{
"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": ""
}
}
För YAML-definition för pipeline:
- pwsh: |
Import-Module $(ttk.folder)/arm-ttk/arm-ttk.psd1 -Verbose
$testOutput = @(Test-AzTemplate -TemplatePath "$(sample.folder)")
$testOutput
if ($testOutput | ? {$_.Errors }) {
exit 1
} else {
Write-Host "##vso[task.setvariable variable=result.best.practice]$true"
exit 0
}
errorActionPreference: continue
failOnStderr: true
displayName: 'Run Best Practices Tests'
continueOnError: true
Nästa steg
- Mer information om malltesterna finns i Testfall för ARM-mallar.
- Information om hur du testar parameterfiler finns i Testfall för parameterfiler.
- För createUiDefinition-tester, se Testfall för createUiDefinition.json.
- Mer information om tester för alla filer finns i Testfall för alla filer.
- En Learn-modul som beskriver hur du använder testverktyget finns i Verifiera Azure-resurser med testverktyget för ARM-mallar.