Oefening: lint toevoegen en fasen valideren aan uw pijplijn
U hebt met uw team gesproken en besloten om uw implementaties verder te automatiseren met behulp van een pijplijn. U wilt meer vertrouwen opbouwen in wat u implementeert.
In deze oefening voegt u validatiefasen toe aan uw pijplijn. Vervolgens voert u de linter en de preflight-validatie uit voor elke implementatie.
Tijdens het proces gaat u het volgende doen:
- Werk uw bestaande pijplijn bij om twee nieuwe fasen toe te voegen aan lint en uw Bicep-code te valideren.
- Voer uw pipeline uit.
- Los eventuele problemen op die door uw pijplijn worden gedetecteerd.
Uw pijplijn bijwerken om u voor te bereiden op fasen
Eerst moet u uw pijplijnbestand bijwerken om een fase te definiëren. Azure Pipelines maakt automatisch één fase voor u, maar omdat u binnenkort meer fasen toevoegt, moet u uw pijplijn bijwerken om fasen expliciet te definiëren.
Open in Visual Studio Code het azure-pipelines.yml-bestand in de implementatiemap .
Verwijder alles in het bestand van regel 14 tot onderaan het bestand. Zorg ervoor dat u ook de
jobs:
regel verwijdert.Voeg onder aan het bestand de volgende code toe:
stages: - stage: Deploy jobs: - job: Deploy steps: - task: AzureResourceManagerTemplateDeployment@3 name: Deploy displayName: Deploy to Azure inputs: connectedServiceName: $(ServiceConnectionName) deploymentName: $(Build.BuildNumber) location: $(DeploymentDefaultLocation) resourceGroupName: $(ResourceGroupName) csmFile: deploy/main.bicep overrideParameters: > -environmentType $(EnvironmentType)
Tip
YAML-bestanden zijn gevoelig voor inspringing. Controleer of de inspringing juist is, ongeacht of u deze code typt of plakt. In de volgende sectie ziet u de volledige YAML-pijplijndefinitie, zodat u kunt controleren of het bestand overeenkomt.
Lint- en validatiefasen toevoegen aan uw pijplijn
Voeg onder de
stages:
regel een lintfase toe:- stage: Lint jobs: - job: LintCode displayName: Lint code steps: - script: | az bicep build --file deploy/main.bicep name: LintBicepCode displayName: Run Bicep linter
In deze fase wordt één stap gedefinieerd waarmee de
az bicep build
opdracht wordt uitgevoerd om het Bicep-bestand te linten.Voeg onder de regels die u zojuist hebt toegevoegd een validatiefase toe:
- stage: Validate jobs: - job: ValidateBicepCode displayName: Validate Bicep code steps: - task: AzureResourceManagerTemplateDeployment@3 name: RunPreflightValidation displayName: Run preflight validation inputs: connectedServiceName: $(ServiceConnectionName) location: $(deploymentDefaultLocation) deploymentMode: Validation resourceGroupName: $(ResourceGroupName) csmFile: deploy/main.bicep overrideParameters: > -environmentType $(EnvironmentType)
In deze fase wordt één stap gedefinieerd waarmee de preflight-validatie wordt uitgevoerd. U ziet dat deze stap een verwijzing naar uw serviceverbinding bevat, omdat voor het preflight-validatieproces communicatie met Azure is vereist.
Uw pijplijndefinitie heeft nu drie fasen. De eerste voert de linter uit op uw Bicep-bestand, de tweede voert een voorbereidende validatie uit en de derde voert de implementatie uit naar Azure.
Sla het bestand op.
De linter configureren
Bicep linter biedt standaard een waarschuwing wanneer er een probleem met uw bestand wordt gedetecteerd. Azure Pipelines behandelt linterwaarschuwingen niet als problemen die uw pijplijn moeten stoppen. Als u dit gedrag wilt aanpassen, maakt u een bicepconfig.json-bestand waarmee de linter opnieuw wordt geconfigureerd.
Voeg een nieuw bestand toe aan de implementatiemap en geef het bicepconfig.json een naam.
Kopieer de volgende code naar het bestand:
{ "analyzers": { "core": { "enabled": true, "verbose": true, "rules": { "adminusername-should-not-be-literal": { "level": "error" }, "max-outputs": { "level": "error" }, "max-params": { "level": "error" }, "max-resources": { "level": "error" }, "max-variables": { "level": "error" }, "no-hardcoded-env-urls": { "level": "error" }, "no-unnecessary-dependson": { "level": "error" }, "no-unused-params": { "level": "error" }, "no-unused-vars": { "level": "error" }, "outputs-should-not-contain-secrets": { "level": "error" }, "prefer-interpolation": { "level": "error" }, "secure-parameter-default": { "level": "error" }, "simplify-interpolation": { "level": "error" }, "protect-commandtoexecute-secrets": { "level": "error" }, "use-stable-vm-image": { "level": "error" } } } } }
Sla het bestand op.
Uw pijplijndefinitie controleren en doorvoeren
Controleer of het azure-pipelines.yml-bestand er als volgt uitziet:
trigger: batch: true branches: include: - main pool: vmImage: ubuntu-latest variables: - name: deploymentDefaultLocation value: westus3 stages: - stage: Lint jobs: - job: LintCode displayName: Lint code steps: - script: | az bicep build --file deploy/main.bicep name: LintBicepCode displayName: Run Bicep linter - stage: Validate jobs: - job: ValidateBicepCode displayName: Validate Bicep code steps: - task: AzureResourceManagerTemplateDeployment@3 name: RunPreflightValidation displayName: Run preflight validation inputs: connectedServiceName: $(ServiceConnectionName) location: $(deploymentDefaultLocation) deploymentMode: Validation resourceGroupName: $(ResourceGroupName) csmFile: deploy/main.bicep overrideParameters: > -environmentType $(EnvironmentType) - stage: Deploy jobs: - job: Deploy steps: - task: AzureResourceManagerTemplateDeployment@3 name: Deploy displayName: Deploy to Azure inputs: connectedServiceName: $(ServiceConnectionName) deploymentName: $(Build.BuildNumber) location: $(DeploymentDefaultLocation) resourceGroupName: $(ResourceGroupName) csmFile: deploy/main.bicep overrideParameters: > -environmentType $(EnvironmentType)
Als dit niet het probleem is, werkt u deze bij zodat deze overeenkomt met dit voorbeeld en slaat u het op.
Voer uw wijzigingen door en push deze naar uw Git-opslagplaats door de volgende opdrachten uit te voeren in de Visual Studio Code-terminal:
git add . git commit -m "Add lint and validation stages" git push
Direct nadat u een push hebt uitgevoerd, start Azure Pipelines een nieuwe pijplijnuitvoering.
De pijplijnuitvoering weergeven
Ga in uw browser naar Pijplijnen.
Selecteer de meest recente uitvoering van uw pijplijn.
Als de pijplijn nog steeds wordt uitgevoerd, wacht u totdat deze is voltooid. Hoewel Azure Pipelines de pagina automatisch bijwerkt met de meest recente status, is het een goed idee om uw pagina af en toe te vernieuwen.
U ziet dat de pijplijnuitvoering nu de drie fasen toont die u hebt gedefinieerd in het YAML-bestand. U ziet ook dat de lintfase is mislukt.
Selecteer de lintfase om de details ervan weer te geven.
Selecteer de stap Bicep linter uitvoeren om het pijplijnlogboek weer te geven.
U ziet dat de weergegeven fout vergelijkbaar is met de volgende:
Fout no-unused-params: Parameter "storageAccountNameParam" is gedeclareerd maar nooit gebruikt.
Deze fout geeft aan dat de linter een regelschending heeft gevonden in uw Bicep-bestand.
De linter-fout oplossen
Nu u het probleem hebt geïdentificeerd, kunt u dit oplossen in uw Bicep-bestand.
Open in Visual Studio Code het bestand main.bicep in de implementatiemap .
U ziet dat bicep linter ook heeft gedetecteerd dat de
storageAccountNameParam
parameter niet wordt gebruikt. Visual Studio Code geeft de ongebruikte parameter aan met een golvende lijn. Normaal gesproken is de lijn geel om een waarschuwing aan te geven. Maar omdat u het bicepconfig.json-bestand hebt aangepast, behandelt de linter de code als een fout en wordt de regel rood weergegeven.param storageAccountNameParam string = uniqueString(resourceGroup().id)
Verwijder de
storageAccountNameParam
parameter.Sla het bestand op.
Voer uw wijzigingen door en push deze naar uw Git-opslagplaats door de volgende opdrachten uit te voeren in de Visual Studio Code-terminal:
git add . git commit -m "Remove unused parameter" git push
Opnieuw activeert Azure Pipelines automatisch een nieuwe uitvoering van uw pijplijn.
De pijplijnuitvoering opnieuw weergeven
Ga in uw browser naar uw pijplijn.
Selecteer de meest recente uitvoering.
Wacht totdat de pijplijnuitvoering is voltooid. Hoewel Azure Pipelines de pagina automatisch bijwerkt met de meest recente status, is het een goed idee om uw pagina af en toe te vernieuwen.
U ziet dat de lintfase is voltooid, maar nu de fase Valideren is mislukt.
Selecteer de fase Valideren om de details ervan weer te geven.
Selecteer de stap voor de voorbereidende validatie uitvoeren om het pijplijnlogboek weer te geven.
U ziet dat de fout die wordt weergegeven in het logboek het volgende bericht bevat:
mystorageresourceNameSuffix is geen geldige naam van het opslagaccount. Een opslagaccountnaam moet tussen 3 en 24 tekens lang zijn en mag alleen bestaan uit getallen en kleine letters.
Deze fout geeft aan dat de naam van het opslagaccount niet geldig is.
De validatiefout oplossen
U hebt een ander probleem gevonden in het Bicep-bestand. Hier lost u het probleem op.
Open in Visual Studio Code het bestand main.bicep in de implementatiemap .
Bekijk de definitie van de
storageAccountName
variabele:var appServiceAppName = 'toy-website-${resourceNameSuffix}' var appServicePlanName = 'toy-website' var applicationInsightsName = 'toywebsite' var logAnalyticsWorkspaceName = 'workspace-${resourceNameSuffix}' var storageAccountName = 'mystorageresourceNameSuffix'
Er lijkt een typefout te zijn en de tekenreeksinterpolatie is niet correct geconfigureerd.
Werk de
storageAccountName
variabele bij om tekenreeksinterpolatie correct te gebruiken:var storageAccountName = 'mystorage${resourceNameSuffix}'
Sla het bestand op.
Voer uw wijzigingen door en push deze naar uw Git-opslagplaats door de volgende opdrachten uit te voeren in de Visual Studio Code-terminal:
git add . git commit -m "Fix string interpolation" git push
De geslaagde pijplijnuitvoering weergeven
Ga in uw browser naar uw pijplijn.
Selecteer de meest recente uitvoering.
Wacht totdat de pijplijnuitvoering is voltooid. Hoewel Azure Pipelines de pagina automatisch bijwerkt met de meest recente status, is het een goed idee om uw pagina af en toe te vernieuwen.
U ziet dat alle drie de fasen van de pijplijn zijn voltooid:
U hebt nu een pijplijn die fouten in uw Bicep-code vroeg in uw implementatieproces detecteert en vervolgens in Azure implementeert als er geen fouten zijn.