Cvičení – přidání fází lint a ověření do kanálu

Dokončeno

Mluvili jste se svým týmem a rozhodli jste se dále automatizovat nasazení pomocí kanálu. Chcete získat větší jistotu v tom, co nasazujete.

V tomto cvičení přidáte do kanálu fáze ověřování. Potom spustíte linter a předběžné ověření před každým nasazením.

Během tohoto procesu:

  • Aktualizujte stávající kanál, abyste přidali dvě nové fáze pro lint a ověřili kód Bicep.
  • Spusťte kanál.
  • Opravte všechny problémy, které váš kanál detekuje.

Aktualizace kanálu tak, aby se připravil na fáze

Nejprve je potřeba aktualizovat soubor kanálu, aby se definovala fáze. Azure Pipelines pro vás automaticky vytvoří jednu fázi, ale protože brzy přidáte další fáze, musíte kanál aktualizovat tak, aby explicitně definoval fáze.

  1. V editoru Visual Studio Code otevřete soubor azure-pipelines.yml ve složce deploy .

  2. Odeberte všechno v souboru z řádku 14 do dolní části souboru. Nezapomeňte také odebrat čáru jobs: .

  3. Do dolní části souboru přidejte následující kód:

    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

    Soubory YAML jsou citlivé na odsazení. Bez ohledu na to, jestli tento kód napíšete nebo vložíte, zkontrolujte správnost odsazení. V další části uvidíte úplnou definici kanálu YAML, abyste mohli ověřit, že se váš soubor shoduje.

Přidání fází lint a ověření do kanálu

  1. Pod čáru stages: přidejte lintovou fázi:

    - stage: Lint
      jobs:
      - job: LintCode
        displayName: Lint code
        steps:
          - script: |
              az bicep build --file deploy/main.bicep
            name: LintBicepCode
            displayName: Run Bicep linter
    

    Tato fáze definuje jeden krok, který spustí az bicep build příkaz pro lintování souboru Bicep.

  2. Pod řádky, které jste právě přidali, přidejte fázi ověření:

    - 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)
    

    Tato fáze definuje jeden krok, který spustí předběžné ověření. Všimněte si, že tento krok obsahuje odkaz na připojení ke službě, protože proces předběžného ověření vyžaduje komunikaci s Azure.

    Definice kanálu teď má tři fáze. První spustí linter v souboru Bicep, druhý provede předběžné ověření a třetí provede nasazení do Azure.

  3. Uložte soubor.

Konfigurace linteru

Ve výchozím nastavení poskytuje linter Bicep upozornění, když zjistí problém s vaším souborem. Azure Pipelines nezachází s upozorněními linteru jako s problémy, které by měly kanál zastavit. Chcete-li toto chování přizpůsobit, vytvoříte bicepconfig.json soubor, který překonfiguruje linter.

  1. Do složky deploy přidejte nový soubor a pojmenujte ho bicepconfig.json.

    Snímek obrazovky Průzkumníka editoru Visual Studio Code s novým souborem zobrazeným ve složce deploy

  2. Zkopírujte do souboru následující kód:

    {
      "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"
            }
          }
        }
      }
    }
    
  3. Uložte soubor.

Ověření a potvrzení definice kanálu

  1. Ověřte, že váš soubor azure-pipelines.yml vypadá jako následující soubor:

    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)
    

    Pokud tomu tak není, aktualizujte ho tak, aby odpovídal tomuto příkladu, a pak ho uložte.

  2. Potvrďte a nasdílejte změny do úložiště Git spuštěním následujících příkazů v terminálu editoru Visual Studio Code:

    git add .
    git commit -m "Add lint and validation stages"
    git push
    

    Hned po nasdílení změn azure Pipelines spustí nové spuštění kanálu.

Zobrazení spuštění kanálu

  1. V prohlížeči přejděte na Pipelines.

  2. Vyberte poslední spuštění kanálu.

    Snímek obrazovky Azure DevOps se zvýrazněným odkazem na nejnovější spuštění kanálu

    Pokud je kanál stále spuštěný, počkejte, až se dokončí. I když Azure Pipelines stránku automaticky aktualizuje nejnovějším stavem, je vhodné stránku občas aktualizovat.

  3. Všimněte si, že spuštění kanálu teď zobrazuje tři fáze, které jste definovali v souboru YAML. Všimněte si také, že fáze Lint selhala.

    Snímek obrazovky se spuštěním kanálu v Azure DevOps a selháním generování sestav fáze Lint

  4. Výběrem fáze Lint zobrazíte její podrobnosti.

    Snímek obrazovky se spuštěním kanálu v Azure DevOps se zvýrazněným názvem fáze Lint

  5. Výběrem kroku Run Bicep linter zobrazte protokol kanálu.

    Snímek obrazovky s protokolem kanálu pro fázi Lint a zvýrazněným krokem spuštění linteru Bicep

    Všimněte si, že zobrazená chyba je podobná následující:

    Chyba no-unused-params: Parametr storageAccountNameParam je deklarován, ale nikdy se nepoužívá.

    Tato chyba značí, že linter v souboru Bicep zjistil porušení pravidla.

Oprava chyby linteru

Teď, když jste problém identifikovali, můžete ho opravit v souboru Bicep.

  1. V editoru Visual Studio Code otevřete soubor main.bicep ve složce deploy .

  2. Všimněte si, že linter Bicep také zjistil, že storageAccountNameParam se parametr nepoužívá. Visual Studio Code označuje nepoužitý parametr vlnovkou. Za normálních okolností by čára byla žlutá, aby označovala upozornění. Protože jste ale přizpůsobili soubor bicepconfig.json , linter zachází s kódem jako s chybou a zobrazuje řádek červeně.

    param storageAccountNameParam string = uniqueString(resourceGroup().id)
    
  3. storageAccountNameParam Odstraňte parametr.

  4. Uložte soubor.

  5. Potvrďte a nasdílejte změny do úložiště Git spuštěním následujících příkazů v terminálu editoru Visual Studio Code:

    git add .
    git commit -m "Remove unused parameter"
    git push
    

    Azure Pipelines znovu automaticky aktivuje nové spuštění vašeho kanálu.

Opětovné zobrazení spuštění kanálu

  1. V prohlížeči přejděte do kanálu.

  2. Vyberte poslední spuštění.

    Počkejte na dokončení spuštění kanálu. I když Azure Pipelines stránku automaticky aktualizuje nejnovějším stavem, je vhodné stránku občas aktualizovat.

  3. Všimněte si, že fáze Lint byla úspěšně dokončena, ale teď se fáze Ověření nezdařila.

    Snímek obrazovky se spuštěním kanálu s úspěšným hlášením fáze Lint a neúspěšným hlášením fáze ověření

  4. Výběrem fáze Ověření zobrazíte její podrobnosti.

  5. Výběrem kroku Spustit předběžné ověření zobrazte protokol kanálu.

    Snímek obrazovky s protokolem kanálu pro fázi Ověření a zvýrazněným krokem spuštění předběžného ověření

    Všimněte si, že chyba zobrazená v protokolu obsahuje následující zprávu:

    mystorageresourceNameSuffix není platný název účtu úložiště. Název účtu úložiště musí mít délku 3 až 24 znaků a musí obsahovat jenom číslice a malá písmena.

    Tato chyba značí, že název účtu úložiště není platný.

Oprava chyby ověření

V souboru Bicep jste našli jiný problém. Tady problém vyřešíte.

  1. V editoru Visual Studio Code otevřete soubor main.bicep ve složce deploy .

  2. Podívejte se na definici storageAccountName proměnné:

    var appServiceAppName = 'toy-website-${resourceNameSuffix}'
    var appServicePlanName = 'toy-website'
    var applicationInsightsName = 'toywebsite'
    var logAnalyticsWorkspaceName = 'workspace-${resourceNameSuffix}'
    var storageAccountName = 'mystorageresourceNameSuffix'
    

    Zdá se, že došlo k překlepu a interpolace řetězců nebyla správně nakonfigurovaná.

  3. Aktualizujte proměnnou storageAccountName tak, aby správně používala interpolaci řetězců:

    var storageAccountName = 'mystorage${resourceNameSuffix}'
    
  4. Uložte soubor.

  5. Potvrďte a nasdílejte změny do úložiště Git spuštěním následujících příkazů v terminálu editoru Visual Studio Code:

    git add .
    git commit -m "Fix string interpolation"
    git push
    

Zobrazení úspěšného spuštění kanálu

  1. V prohlížeči přejděte do kanálu.

  2. Vyberte poslední spuštění.

    Počkejte na dokončení spuštění kanálu. I když Azure Pipelines stránku automaticky aktualizuje nejnovějším stavem, je vhodné stránku občas aktualizovat.

  3. Všimněte si, že všechny tři fáze kanálu byly úspěšně dokončeny:

    Snímek obrazovky se spuštěním kanálu v Azure DevOps se všemi třemi fázemi, které hlásí úspěch

Teď máte kanál, který úspěšně rozpozná chyby v kódu Bicep v rané fázi procesu nasazení a pak se nasadí do Azure, pokud nedojde k žádným chybám.