Övning – Uppdatera pipelinens utlösare

Slutförd

En kollega ber dig att aktivera funktionen App Service Always On på företagets webbplats, så att webbplatsappen alltid körs.

I den här övningen uppdaterar du pipelinen som du skapade så att den körs automatiskt när en fil ändras på huvudgrenen. Du använder den uppdaterade pipelinen för att distribuera den begärda konfigurationsändringen till webbplatsen.

Under processen gör du följande:

  • Uppdatera pipelinen så att den utlöses automatiskt när en fil ändras i distributionsmappen på huvudgrenen.
  • Gör en ändring i Bicep-filen.
  • Kontrollera att pipelinen körs automatiskt.

Uppdatera utlösaren så att den är grenbaserad

  1. Öppna filen deploy/azure-pipelines.yml i Visual Studio Code.

  2. Ta bort den manuella utlösaren på den första raden.

  3. Lägg till följande utlösardefinition på den första raden:

    trigger:
      batch: true
      branches:
        include:
        - main
    

    Observera att du även aktiverar samtidighetskontroll för att undvika att pipelinen körs flera gånger samtidigt.

  4. Spara ändringarna i filen.

  5. Genomför ändringarna, men push-överför inte ändringarna ännu. Du kommer att pusha dem snart.

    git add .
    git commit -m 'Add branch trigger'
    

Uppdatera Bicep-filen

  1. Öppna filen main.bicep i Visual Studio Code.

  2. I resursdefinitionens appServiceApp siteConfig egenskap lägger du till alwaysOn egenskapen med värdet true:

    resource appServiceApp 'Microsoft.Web/sites@2022-03-01' = {
      name: appServiceAppName
      location: location
      properties: {
        serverFarmId: appServicePlan.id
        httpsOnly: true
        siteConfig: {
          alwaysOn: true
          appSettings: [
            {
              name: 'ToyManualsStorageAccountConnectionString'
              value: toyManualsStorageAccountConnectionString
            }
          ]
        }
      }
    }
    
  3. Spara ändringarna i filen.

  4. I Visual Studio Code-terminalen kör du följande kod för att checka in ändringarna och push-överföra båda incheckningarna:

    git add .
    git commit -m 'Configure app Always On setting'
    git push
    

Kontrollera att pipelinen misslyckas

  1. I webbläsaren väljer du Pipelines och sedan din pipeline.

  2. Välj den senaste körningen för att se att pipelinen kördes automatiskt. Pipelinen kördes eftersom du push-överförde ändringarna till en gren som grenutlösaren övervakar. Om pipelinen fortfarande körs väntar du en minut och uppdaterar sedan sidan.

    Skärmbild av Azure DevOps som visar den misslyckade pipelinekörningen.

    Pipelinen visar en misslyckad distribution.

  3. Om du vill diagnostisera felet går du till Jobb, väljer jobbet och väljer sedan den misslyckade AzureResourceManagerTemplateDeployment-uppgiften . Rulla om du vill se det fullständiga felmeddelandet. Felmeddelandet innehåller följande text:

    There was a conflict. AlwaysOn cannot be set for this site as the plan does not allow it. For more information on pricing and features, please see: https://aka.ms/appservicepricingdetails

    Det här felmeddelandet anger att distributionen misslyckades eftersom App Service-appen distribuerades med hjälp av den kostnadsfria F1-nivån, som inte stöder funktionen AlwaysOn.

    Viktigt!

    Det här exemplet illustrerar hur det är viktigt att testa dina Bicep-filer, inklusive alla parametervärden som du använder. Det är enkelt att lägga till diskreta fel i resurskonfigurationen eller annan kod. Du kanske inte upptäcker något problem förrän din pipeline distribuerar koden och den misslyckas. I en framtida modul får du lära dig några strategier som du kan använda för att verifiera och testa din Bicep-kod.

Åtgärda Bicep-filen och se pipelinen utlöses igen

Du pratar med din kollega om den misslyckade distributionen. Tillsammans bestämmer du dig för att inställningen AlwaysOn endast behöver tillämpas för din produktionsmiljö. Här kan du åtgärda problemet som orsakade distributionsfelet genom att tillämpa den nya regel som du bestämmer dig för att använda.

  1. I Visual Studio Code lägger du till nya egenskaper för varje miljötyp i variabeln environmentConfigurationMap :

    var environmentConfigurationMap = {
      nonprod: {
        appServiceApp: {
          alwaysOn: false
        }
        appServicePlan: {
          sku: {
            name: 'F1'
            capacity: 1
          }
        }
        toyManualsStorageAccount: {
          sku: {
            name: 'Standard_LRS'
          }
        }
      }
      prod: {
        appServiceApp: {
          alwaysOn: true
        }
        appServicePlan: {
          sku: {
            name: 'S1'
            capacity: 2
          }
        }
        toyManualsStorageAccount: {
          sku: {
            name: 'Standard_ZRS'
          }
        }
      }
    }
    
  2. Ändra programmets inställning så att det använder lämpligt konfigurationsmappningsvärde alwaysOn för miljötypen:

    resource appServiceApp 'Microsoft.Web/sites@2022-03-01' = {
      name: appServiceAppName
      location: location
      properties: {
        serverFarmId: appServicePlan.id
        httpsOnly: true
        siteConfig: {
          alwaysOn: environmentConfigurationMap[environmentType].appServiceApp.alwaysOn
          appSettings: [
            {
              name: 'ToyManualsStorageAccountConnectionString'
              value: toyManualsStorageAccountConnectionString
            }
          ]
        }
      }
    }
    
  3. Spara ändringarna i filen.

  4. I Visual Studio Code-terminalen checkar du in ändringarna och push-överför dem:

    git add .
    git commit -m 'Enable App Service Always On for production environments only'
    git push
    

Kontrollera att pipelinen lyckas

  1. I Azure DevOps går du tillbaka till listan Pipelines och väljer din pipeline.

  2. Välj den senaste körningen. Om pipelinen fortfarande körs väntar du en minut och uppdaterar sedan sidan.

    Skärmbild av Azure DevOps som visar lyckad pipelinekörning.

    Pipelinen visar en lyckad distribution. Det lyckades den här gången eftersom du använde en giltig Bicep-fil.

Rensa resurserna

Nu när du har slutfört övningen kan du ta bort resurserna så att du inte debiteras för dem.

Kör följande kommando i Visual Studio Code-terminalen:

az group delete --resource-group ToyWebsite --yes --no-wait

Resursgruppen tas bort i bakgrunden.

Remove-AzResourceGroup -Name ToyWebsite -Force