Gyakorlat – Tesztfeladat hozzáadása a munkafolyamathoz
A toy cég biztonsági csapata azt szeretné, hogy ellenőrizze, hogy webhelye csak HTTPS-kapcsolaton keresztül érhető-e el. Ebben a gyakorlatban úgy konfigurálja a munkafolyamatot, hogy futtasson egy füsttesztet, amely ellenőrzi a biztonsági csapat követelményeit.
A folyamat során a következő feladatokat fogja elvégezni:
- Adjon hozzá egy tesztszkriptet az adattárhoz.
- Frissítse a munkafolyamat-definíciót tesztfeladat hozzáadásához.
- Futtassa a munkafolyamatot, és figyelje meg, hogy a teszt sikertelen.
- Javítsa ki a Bicep-fájlt, és figyelje meg, hogy a munkafolyamat sikeresen fut.
Tesztszkript hozzáadása
Itt egy tesztszkriptet ad hozzá annak ellenőrzéséhez, hogy a webhely elérhető-e HTTPS használata esetén, és nem érhető el a nem biztonságos HTTP protokoll használatakor.
A Visual Studio Code-ban hozzon létre egy új fájlt a Website.Tests.ps1 nevű üzembehelyezési mappában.
Másolja és illessze be a következő tesztkódot a fájlba:
param( [Parameter(Mandatory)] [ValidateNotNullOrEmpty()] [string] $HostName ) Describe 'Toy Website' { It 'Serves pages over HTTPS' { $request = [System.Net.WebRequest]::Create("https://$HostName/") $request.AllowAutoRedirect = $false $request.GetResponse().StatusCode | Should -Be 200 -Because "the website requires HTTPS" } It 'Does not serves pages over HTTP' { $request = [System.Net.WebRequest]::Create("http://$HostName/") $request.AllowAutoRedirect = $false $request.GetResponse().StatusCode | Should -BeGreaterOrEqual 300 -Because "HTTP is not secure" } }
Az eredmény egy Pester tesztfájl. Ehhez egy .
$HostName
Két tesztet futtat a gazdagépnéven:- HTTPS-en keresztül próbál csatlakozni a webhelyhez. A teszt akkor megy át, ha a kiszolgáló egy 200 és 299 közötti HTTP-válasz állapotkóddal válaszol, amely sikeres kapcsolatot jelez.
- HTTP-en keresztül próbál csatlakozni a webhelyhez. A teszt akkor megy át, ha a kiszolgáló 300-ás vagy újabb HTTP-válaszállapot-kóddal válaszol.
Ennek a gyakorlatnak a alkalmazásában nem fontos, hogy megértse a tesztfájl részleteit és működését. Az összefoglalásban hivatkozásokat biztosítunk, hogy többet tudjon meg, ha érdekli.
A Bicep-fájl kimenetének közzététele feladatkimenetként
Az előző lépésekben létrehozott tesztszkript teszteléséhez egy gazdagépnév szükséges. A Bicep-fájl már tartalmaz egy kimenetet, de mielőtt használni szeretné a füsttesztekben, közzé kell tennie feladatkimenetként.
A Visual Studio Code-ban nyissa meg a workflow.yml fájlt a .github/workflows mappában.
Az üzembe helyezési feladatban adjon hozzá egy
id
elemet aDeploy website
lépéshez, hogy hivatkozzon a lépésre. Adjon hozzá egy feladatkimenetet is, amely az üzembe helyezési lépésből másolja aappServiceAppHostName
kimenetet:deploy: runs-on: ubuntu-latest environment: Website needs: preview outputs: appServiceAppHostName: ${{ steps.deploy.outputs.appServiceAppHostName }} steps: - uses: actions/checkout@v3 - uses: azure/login@v1 name: Sign in to Azure with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} - uses: azure/arm-deploy@v1 id: deploy name: Deploy website with: failOnStdErr: false deploymentName: ${{ github.run_number }} resourceGroupName: ${{ env.AZURE_RESOURCEGROUP_NAME }} template: ./deploy/main.bicep parameters: environmentType=${{ env.ENVIRONMENT_TYPE }}
Mentse a fájlt.
Füsttesztelési feladat hozzáadása a munkafolyamathoz
Most hozzáadhat egy füsttesztelési feladatot, amely futtatja a teszteket.
A fájl alján adja hozzá a következő definíciót a füsttesztelési feladathoz:
smoke-test: runs-on: ubuntu-latest needs: deploy steps: - uses: actions/checkout@v3 - run: | $container = New-PesterContainer ` -Path 'deploy/Website.Tests.ps1' ` -Data @{ HostName = '${{needs.deploy.outputs.appServiceAppHostName}}' } Invoke-Pester ` -Container $container ` -CI name: Run smoke tests shell: pwsh
Ez a kód határozza meg a feladatot. A feladat tartalmaz egy lépést a kód kivételéhez, és egy lépést a tesztek pesterrel való futtatásához.
A feladatdefiníció a tulajdonságot használja az
needs
üzembe helyezési feladat függőségének meghatározásához. Ez a függőség biztosítja, hogy a feladatok a kívánt sorrendben fussanak. Emellett lehetővé teszi az üzembe helyezési feladat kimeneteinek használatát a füsttesztek futtatásakor.Feljegyzés
A PowerShell és a Pester előre telepítve van a GitHub által üzemeltetett futókon. Nem kell semmi különlegeset tennie ahhoz, hogy szkriptlépésben használhassa őket.
Mentse a fájlt.
A munkafolyamat-definíció ellenőrzése és véglegesítése
Ellenőrizze, hogy a workflow.yml fájl a következő kódhoz hasonlóan néz-e ki:
name: deploy-toy-website-test concurrency: toy-company on: push: branches: - main permissions: id-token: write contents: read env: AZURE_RESOURCEGROUP_NAME: ToyWebsiteTest ENVIRONMENT_TYPE: Test jobs: lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Run Bicep linter run: az bicep build --file deploy/main.bicep validate: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: azure/login@v1 name: Sign in to Azure with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} - uses: azure/arm-deploy@v1 name: Run preflight validation with: deploymentName: ${{ github.run_number }} resourceGroupName: ${{ env.AZURE_RESOURCEGROUP_NAME }} template: ./deploy/main.bicep parameters: environmentType=${{ env.ENVIRONMENT_TYPE }} deploymentMode: Validate preview: runs-on: ubuntu-latest needs: [lint, validate] steps: - uses: actions/checkout@v3 - uses: azure/login@v1 name: Sign in to Azure with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} - uses: azure/arm-deploy@v1 name: Run what-if with: failOnStdErr: false resourceGroupName: ${{ env.AZURE_RESOURCEGROUP_NAME }} template: deploy/main.bicep parameters: > environmentType=${{ env.ENVIRONMENT_TYPE }} additionalArguments: --what-if deploy: runs-on: ubuntu-latest environment: Website needs: preview outputs: appServiceAppHostName: ${{ steps.deploy.outputs.appServiceAppHostName }} steps: - uses: actions/checkout@v3 - uses: azure/login@v1 name: Sign in to Azure with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} - uses: azure/arm-deploy@v1 id: deploy name: Deploy website with: failOnStdErr: false deploymentName: ${{ github.run_number }} resourceGroupName: ${{ env.AZURE_RESOURCEGROUP_NAME }} template: ./deploy/main.bicep parameters: environmentType=${{ env.ENVIRONMENT_TYPE }} smoke-test: runs-on: ubuntu-latest needs: deploy steps: - uses: actions/checkout@v3 - run: | $container = New-PesterContainer ` -Path 'deploy/Website.Tests.ps1' ` -Data @{ HostName = '${{needs.deploy.outputs.appServiceAppHostName}}' } Invoke-Pester ` -Container $container ` -CI name: Run smoke tests shell: pwsh
Ha a fájl másként néz ki, frissítse a példának megfelelően, majd mentse.
Véglegesítse és küldje le a módosításokat a Git-adattárba az alábbi parancsok futtatásával a Visual Studio Code terminálon:
git add . git commit -m "Add test job" git push
Futtassa a munkafolyamatot, és tekintse át a teszt eredményét
Nyissa meg a munkafolyamatot a böngészőben.
Válassza ki a munkafolyamat legutóbbi futtatását.
Várjon, amíg a munkafolyamat befejezi a lint, az érvényesítési és az előnézeti feladatokat. Bár a GitHub Actions automatikusan frissíti a lapot a legújabb állapottal, érdemes időnként frissíteni a lapot.
Válassza az Üzemelő példányok áttekintése gombot, válassza a Webhelykörnyezetet, majd a Jóváhagyás és üzembe helyezés lehetőséget.
Várja meg, amíg a munkafolyamat lefut.
Figyelje meg, hogy az üzembe helyezési feladat sikeresen befejeződött. A füsttesztelési feladat egy hibával fejeződik be.
Válassza ki a füsttesztelési feladatot a részleteinek megtekintéséhez.
Figyelje meg, hogy a füstteszt kimenete azt mutatja, hogy két teszt futott. Egy átment, egy pedig sikertelen volt. A sikertelen teszt a Toy-webhelyként van felsorolva. Nem szolgál ki oldalakat HTTP-en keresztül.
Ez a szöveg azt jelzi, hogy a webhely nincs megfelelően konfigurálva, hogy megfeleljen a biztonsági csapat követelményeinek.
A Bicep-fájl frissítése
Most, hogy megállapította, hogy a Bicep-definíció nem felel meg a biztonsági csapat követelményeinek, kijavíthatja azt.
A Visual Studio Code-ban nyissa meg a main.bicep fájlt a központi telepítési mappában.
Keresse meg a Azure-alkalmazás Service-alkalmazás definícióját, és frissítse a tulajdonságot a
httpsOnly
területéreproperties
:resource appServiceApp 'Microsoft.Web/sites@2022-03-01' = { name: appServiceAppName location: location properties: { serverFarmId: appServicePlan.id httpsOnly: true siteConfig: { appSettings: [ { name: 'APPINSIGHTS_INSTRUMENTATIONKEY' value: applicationInsights.properties.InstrumentationKey } { name: 'APPLICATIONINSIGHTS_CONNECTION_STRING' value: applicationInsights.properties.ConnectionString } ] } } }
Mentse a fájlt.
Véglegesítse és küldje le a módosításokat a Git-adattárba az alábbi parancsok futtatásával a Visual Studio Code terminálon:
git add . git commit -m "Configure HTTPS on website" git push
Futtassa újra a munkafolyamatot
A böngészőben nyissa meg a munkafolyamat-futtatásokat.
Válassza ki a legutóbbi futtatás lehetőséget.
Várjon, amíg a munkafolyamat befejezi a lint, az érvényesítési és az előnézeti feladatokat. Bár a GitHub automatikusan frissíti a lapot a legújabb állapottal, érdemes időnként frissíteni a lapot.
Válassza ki az előnézeti feladatot, és tekintse át újra a lehetőségelemzési eredményeket.
Figyelje meg, hogy a what-if parancs észlelte a
httpsOnly
tulajdonság értékének változását:Resource and property changes are indicated with these symbols: - Delete + Create ~ Modify = Nochange * Ignore The deployment will update the following scope: Scope: /subscriptions/***/resourceGroups/ToyWebsiteTest ~ Microsoft.OperationalInsights/workspaces/workspace-abcdefghijklm [2022-10-01] - properties.retentionInDays: 30 - properties.sku: name: "pergb2018" - properties.workspaceCapping: dailyQuotaGb: -1.0 ~ Microsoft.Web/sites/toy-website-abcdefghijklm [2022-03-01] + properties.siteConfig.localMySqlEnabled: false + properties.siteConfig.netFrameworkVersion: "v4.6" ~ properties.httpsOnly: false => true = Microsoft.Insights/components/toywebsite [2020-02-02] = Microsoft.Storage/storageAccounts/mystorageabcdefghijklm [2022-09-01] = Microsoft.Web/serverfarms/toy-website [2022-03-01] * microsoft.alertsmanagement/smartDetectorAlertRules/Failure Anomalies - toywebsite Resource changes: 2 to modify, 3 no change, 1 to ignore.
Térjen vissza a munkafolyamat futtatásához.
Válassza az Üzemelő példányok áttekintése gombot, válassza a Webhelykörnyezetet, majd a Jóváhagyás és üzembe helyezés lehetőséget.
Várja meg, amíg a munkafolyamat lefut.
Figyelje meg, hogy a teljes munkafolyamat sikeresen befejeződött, beleértve a füsttesztelési feladatot is. Ez a sikeresség azt jelzi, hogy mindkét teszt sikeres volt.
Az erőforrások eltávolítása
A gyakorlat elvégzése után eltávolíthatja az erőforrásokat, hogy ne kelljenek fizetnie rájuk.
A Visual Studio Code terminálon futtassa a következő parancsot:
az group delete --resource-group ToyWebsiteTest --yes --no-wait
Az erőforráscsoport a háttérben törlődik.
Remove-AzResourceGroup -Name ToyWebsiteTest -Force