ARM-sablontesztelési eszközkészlet használata
Az Azure Resource Manager-sablon (ARM-sablon) teszteszközkészlete ellenőrzi, hogy a sablon használ-e ajánlott eljárásokat. Ha a sablon nem felel meg az ajánlott eljárásoknak, a javasolt módosításokat tartalmazó figyelmeztetések listáját adja vissza. A tesztelési eszközkészlet használatával megtudhatja, hogyan kerülheti el a sablonfejlesztés gyakori problémáit. Ez a cikk bemutatja, hogyan futtathatja a teszteszközkészletet, és hogyan adhat hozzá vagy távolíthat el teszteket. A tesztek futtatásával vagy egy adott teszt futtatásával kapcsolatos további információkért lásd: Tesztparaméterek.
Az eszközkészlet PowerShell-szkriptek készlete, amelyek a PowerShell vagy a parancssori felület parancsaiból futtathatók. Ezek a tesztek javaslatok, de nem követelmények. Eldöntheti, hogy mely tesztek relevánsak a céljaihoz, és testre szabhatja a futtatott teszteket.
Az eszközkészlet négy tesztkészletet tartalmaz:
- ARM-sablonok tesztelési esetei
- Paraméterfájlok tesztelési esetei
- A createUiDefinition.json tesztelési esetei
- Az összes fájl tesztelési esetei
Megjegyzés
A teszteszközkészlet csak ARM-sablonokhoz érhető el. A Bicep-fájlok ellenőrzéséhez használja a Bicep-lintert.
Képzési források
Ha többet szeretne megtudni az ARM-sablontesztelési eszközkészletről, és gyakorlati útmutatást szeretne, olvassa el az Azure-erőforrások ellenőrzése az ARM-sablontesztelési eszközkészlettel című témakört.
Telepítés Windows rendszeren
Ha még nem rendelkezik PowerShell-lel, telepítse a PowerShellt Windows rendszeren.
Töltse le a tesztelési eszközkészlethez tartozó legújabb .zip fájlt , és bontsa ki.
Indítsa el a PowerShellt.
Lépjen arra a mappára, ahol kinyerte a teszteszközkészletet. A mappában keresse meg az arm-ttk mappát.
Ha a végrehajtási szabályzat letiltja a parancsfájlokat az internetről, fel kell oldania a szkriptfájlok letiltását. Győződjön meg arról, hogy az arm-ttk mappában van.
Get-ChildItem *.ps1, *.psd1, *.ps1xml, *.psm1 -Recurse | Unblock-File
Importálja a modult.
Import-Module .\arm-ttk.psd1
A tesztek futtatásához használja a következő parancsot:
Test-AzTemplate -TemplatePath \path\to\template
Telepítés Linux rendszeren
Ha még nem rendelkezik PowerShell-lel, telepítse a PowerShellt Linux rendszeren.
Töltse le a tesztelési eszközkészlethez tartozó legújabb .zip fájlt , és bontsa ki.
Indítsa el a PowerShellt.
pwsh
Lépjen arra a mappára, ahol kinyerte a teszteszközkészletet. A mappában keresse meg az arm-ttk mappát.
Ha a végrehajtási szabályzat letiltja a parancsfájlokat az internetről, fel kell oldania a szkriptfájlok letiltását. Győződjön meg arról, hogy az arm-ttk mappában van.
Get-ChildItem *.ps1, *.psd1, *.ps1xml, *.psm1 -Recurse | Unblock-File
Importálja a modult.
Import-Module ./arm-ttk.psd1
A tesztek futtatásához használja a következő parancsot:
Test-AzTemplate -TemplatePath /path/to/template
Telepítés macOS rendszeren
Ha még nem rendelkezik PowerShell-lel, telepítse a PowerShellt macOS rendszeren.
coreutils
telepítése:brew install coreutils
Töltse le a tesztelési eszközkészlethez tartozó legújabb .zip fájlt , és bontsa ki.
Indítsa el a PowerShellt.
pwsh
Lépjen arra a mappára, ahol kinyerte a teszteszközkészletet. A mappában keresse meg az arm-ttk mappát.
Ha a végrehajtási szabályzat letiltja a parancsfájlokat az internetről, fel kell oldania a szkriptfájlok letiltását. Győződjön meg arról, hogy az arm-ttk mappában van.
Get-ChildItem *.ps1, *.psd1, *.ps1xml, *.psm1 -Recurse | Unblock-File
Importálja a modult.
Import-Module ./arm-ttk.psd1
A tesztek futtatásához használja a következő parancsot:
Test-AzTemplate -TemplatePath /path/to/template
Az eredmény formátuma
A sikeres tesztek zöld színnel jelennek meg, és a következő előtaggal jelennek meg: [+]
.
A sikertelen tesztek pirossal jelennek meg, és a következő előtaggal jelennek meg: [-]
.
A figyelmeztetéssel ellátott tesztek sárga színnel jelennek meg, és a következő előtaggal jelennek meg: [?]
.
A szöveges eredmények a következők:
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.
Tesztparaméterek
A paraméter megadásakor -TemplatePath
az eszközkészlet egy azuredeploy.json vagy maintemplate.json nevű sablont keres a mappában. Először teszteli ezt a sablont, majd teszteli a mappában és annak almappáiban található összes többi sablont. A többi sablont csatolt sablonként teszteljük. Ha az elérési út tartalmaz egy createUiDefinition.json nevű fájlt, a felhasználói felület definíciójához kapcsolódó teszteket futtat. A teszteket a paraméterfájlok és a mappában található összes JSON-fájl is futtatja.
Test-AzTemplate -TemplatePath $TemplateFolder
Ha egy fájlt szeretne tesztelni a mappában, adja hozzá a paramétert -File
. A mappának azonban továbbra is rendelkeznie kell egy azuredeploy.json vagy maintemplate.json nevű fő sablonnal.
Test-AzTemplate -TemplatePath $TemplateFolder -File cdn.json
Alapértelmezés szerint minden teszt lefut. Az egyes futtatandó tesztek megadásához használja a paramétert -Test
, és adja meg a teszt nevét. A tesztnevekért lásd: ARM-sablonok, paraméterfájlok, createUiDefinition.json és minden fájl.
Test-AzTemplate -TemplatePath $TemplateFolder -Test "Resources Should Have Location"
Tesztek testreszabása
Testre szabhatja az alapértelmezett teszteket, vagy létrehozhat saját teszteket. Ha véglegesen el szeretne távolítani egy tesztet, törölje a .test.ps1 fájlt a mappából.
Az eszközkészlet négy mappával rendelkezik, amelyek az adott fájltípusokhoz futtatott alapértelmezett teszteket tartalmazzák:
- ARM-sablonok: \arm-ttk\testcases\deploymentTemplate
- Paraméterfájlok: \arm-ttk\testcases\deploymentParameters
- createUiDefinition.json: \arm-ttk\testcases\CreateUIDefinition
- Minden fájl: \arm-ttk\testcases\AllFiles
Egyéni teszt hozzáadása
Saját teszt hozzáadásához hozzon létre egy fájlt az elnevezési konvencióval: Your-Custom-Test-Name.test.ps1.
A teszt objektumparaméterként vagy sztringparaméterként is lekérheti a sablont. Általában az egyiket vagy a másikat használja, de mindkettőt használhatja.
Az objektumparamétert akkor használja, ha be kell szereznie a sablon egy szakaszát, és át kell haladnia a tulajdonságain. Az objektumparamétert használó teszt formátuma a következő:
param(
[Parameter(Mandatory=$true,Position=0)]
[PSObject]
$TemplateObject
)
# Implement test logic that evaluates parts of the template.
# Output error with: Write-Error -Message
A sablonobjektum a következő tulajdonságokkal rendelkezik:
$schema
contentVersion
parameters
variables
resources
outputs
Például lekérheti a paraméterek gyűjteményét a következővel $TemplateObject.parameters
: .
Akkor használja a sztringparamétert, ha sztringműveletet kell végrehajtania a teljes sablonon. A sztringparamétert használó teszt formátuma a következő:
param(
[Parameter(Mandatory)]
[string]
$TemplateText
)
# Implement test logic that performs string operations.
# Output error with: Write-Error -Message
Futtathatja például a sztringparaméter reguláris kifejezését annak ellenőrzéséhez, hogy használ-e egy adott szintaxist.
A teszt implementálásával kapcsolatos további információkért tekintse meg az adott mappában található többi tesztet.
Sablonok ellenőrzése Azure Marketplace
Ha közzé szeretne tenni egy ajánlatot Azure Marketplace, használja a teszteszközkészletet a sablonok érvényesítéséhez. Amikor a sablonok átmennek az érvényesítési teszteken, Azure Marketplace gyorsabban jóváhagyja az ajánlatot. Ha a tesztek sikertelenek, az ajánlat sikertelen lesz a minősítéssel.
Fontos
A Marketplace-teszteket 2022 júliusában adták hozzá. Ha korábbi verzióval rendelkezik, frissítse a modult.
A tesztek futtatása a környezetben
Az eszközkészlet telepítése és a modul importálása után futtassa a következő parancsmagot a csomag teszteléséhez:
Test-AzMarketplacePackage -TemplatePath "Path to the unzipped package folder"
Az eredmények értelmezése
A tesztek két szakaszban adnak vissza eredményeket. Az első szakasz a kötelező teszteket tartalmazza. Ezeknek a teszteknek az eredményei az összefoglaló szakaszban jelennek meg.
Fontos
A Marketplace-ajánlat elfogadása előtt minden eredményt pirossal kell kijavítania. Javasoljuk, hogy a sárga színnel visszaadott eredményeket kijavítsa.
A szöveges eredmények a következők:
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
Az összefoglaló szakasz alatti szakasz a figyelmeztetésként értelmezhető teszthibákat tartalmazza. A hibák kijavítása nem kötelező, de erősen ajánlott. A hibák gyakran olyan gyakori problémákra mutatnak, amelyek hibákat okoznak, amikor egy ügyfél telepíti az ajánlatot.
A tesztek javításához kövesse az Önre vonatkozó tesztesetet:
Ajánlat elküldése
A szükséges javítások elvégzése után futtassa újra a teszteszközkészletet. Mielőtt elküldené az ajánlatot Azure Marketplace, győződjön meg arról, hogy nincsenek hibák.
Integrálás az Azure Pipelines szolgáltatással
A teszteszközkészletet hozzáadhatja az Azure Pipeline-hoz. A folyamatokkal futtathatja a tesztet minden alkalommal, amikor a sablon frissül, vagy futtathatja azt az üzembe helyezési folyamat részeként.
A teszteszközkészletet a legegyszerűbben külső bővítményekkel lehet hozzáadni a folyamathoz. A következő két bővítmény érhető el:
Vagy saját feladatokat is megvalósíthat. Az alábbi példa bemutatja, hogyan töltheti le a teszteszközkészletet.
Kiadási folyamat esetén:
{
"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": ""
}
}
Folyamat YAML-definíciója esetén:
- 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'
A következő példa bemutatja, hogyan futtathatja a teszteket.
Kiadási folyamat esetén:
{
"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": ""
}
}
Folyamat YAML-definíciója esetén:
- 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
Következő lépések
- A sablontesztekkel kapcsolatos további információkért lásd: Esettesztelés ARM-sablonokhoz.
- A paraméterfájlok teszteléséhez tekintse meg a paraméterfájlok tesztelési eseteit ismertető cikket.
- A createUiDefinition tesztekhez lásd: A createUiDefinition.json tesztelési esetei.
- Az összes fájl tesztjeiről a Tesztelési esetek az összes fájl esetében című témakörben olvashat.
- A tesztelési eszközkészlet használatával kapcsolatos Learn-modulért lásd: Azure-erőforrások érvényesítése az ARM-sablontesztelési eszközkészlet használatával.