Dela via


Distribuera till Azure App Service med hjälp av Azure Pipelines

Azure DevOps Services | Azure DevOps Server 2022

Den här artikeln beskriver hur du använder Azure Pipelines för att automatiskt skapa, testa och distribuera din webbapp till Azure App Service. Du kan konfigurera en CI/CD-pipeline (kontinuerlig integrering och kontinuerlig leverans) som körs när du checkar in en kodändring till en angiven gren av lagringsplatsen.

Pipelines består av steg, jobb och steg. Ett steg är det minsta byggblocket i en pipeline och kan vara ett skript eller en uppgift, vilket är ett färdigt skript. Mer information om viktiga begrepp och komponenter som utgör en pipeline finns i Viktiga Azure Pipelines-begrepp.

Du kan använda Azure Web App-uppgiften i pipelinen för att distribuera till App Service. För mer komplexa scenarier, som att använda XML-parametrar i distributioner, kan du använda Azure App Service-distributionsuppgiften .

Förutsättningar

Viktigt!

Under GitHub-procedurerna kan du uppmanas att skapa en GitHub-tjänstanslutning eller omdirigeras till GitHub för att logga in, installera Azure Pipelines GitHub-appen, auktorisera Azure Pipelines eller autentisera till GitHub-organisationer. Följ anvisningarna på skärmen för att slutföra de nödvändiga processerna. Mer information finns i Åtkomst till GitHub-lagringsplatser.

Skapa en processkedja

Kodexemplen i det här avsnittet är för en ASP.NET Core-webbapp. Du kan anpassa instruktionerna för andra ramverk. Mer information om stöd för Azure Pipelines-ekosystem finns i Azure Pipelines-ekosystemexempel.

Definiera en pipeline genom att skapa en azure-pipelines.yml YAML-fil i kodlagringsplatsen.

  1. På den vänstra navigeringsmenyn för ditt Azure DevOps-projekt väljer du Pipelines.
  2. På sidan Pipelines väljer du Ny pipeline eller Skapa pipeline om den här pipelinen är den första i projektet.
  3. På skärmen Var är din kod väljer du platsen för källkoden, antingen Azure Repos Git eller GitHub. Om det behövs loggar du in på GitHub.
  4. På skärmen Välj en lagringsplats väljer du din kodlagringsplats.
  5. På skärmen Konfigurera pipeline väljer du Startpipeline.

Lägg till uppgiften .NET Core (DotNetCoreCLI@2) i pipelinen och skapa och publicera din app.

  1. På skärmen Granska yaml-pipelinen tar du bort all kod efter steps: raden.
  2. Välj slutet av filen och välj sedan Visa assistent till höger.
  3. Under Uppgifter väljer du .NET Core.
  4. konfigurationsskärmen för .NET Core går du till Azure Resource Manager-anslutningen, väljer din Azure-prenumeration och väljer sedan Auktorisera för att skapa den tjänstanslutning som krävs.
  5. Under Kommando väljer du Publicera.
  6. Kontrollera att kryssrutorna Publicera webbprojekt och Zip-publicerade projekt är markerade och välj sedan Lägg till.
  7. Uppgiften visas i YAML-pipelinen. Granska YAML-koden för att se vad den gör. När du är klar väljer du Spara och kör och väljer sedan Spara och kör igen.
  8. På skärmen Build Summary (Skapa sammanfattning ) under Jobb väljer du länken Behörighet som behövs . På skärmen Kontroller väljer du Tillåt och sedan Tillåt igen. Om du beviljar behörighet här kan du använda tjänstanslutningen som du har auktoriserat för alla körningar av den här pipelinen.

Pipelinen publicerar ZIP-distributionsfilen som en Azure-artefakt för distributionsuppgiften som ska användas i nästa steg.

Lägg till distributionsuppgiften

När pipelinen har körts lägger du till distributionsuppgiften.

  1. På skärmen Sammanfattning för pipelinekörning väljer du ikonen Fler åtgärder uppe till höger och väljer sedan Redigera pipeline.
  2. Välj slutet av YAML-filen och välj Visa assistent om listan Uppgifter inte visas.
  3. I listan Uppgifter söker du efter och väljer Azure Web App-aktiviteten . Du kan också använda Azure App Service-distributionsuppgiften .
  4. På konfigurationsskärmen för Azure Web App går du till Azure-prenumerationen och väljer samma tjänstanslutning som du konfigurerade för föregående steg. Du behöver inte auktorisera anslutningen igen.
  5. För Apptyp väljer du Azure Web App på Linux eller Azure Web App i Windows, beroende på din kod.
  6. Som Appnamn väljer eller anger du appnamnet för App Service.
  7. Välj Lägg till.
  8. Välj Verifiera och spara och välj sedan Spara.
  9. Välj Kör och välj sedan Kör igen.

Den fullständiga YAML-pipelinen bör se ut som följande kod:

trigger:
- <branch-specification>

pool:
  vmImage: <agent-specification>

steps:
- task: DotNetCoreCLI@2
  inputs:
    azureSubscription: '<your-authorized-service-connection>'
    command: 'publish'
    publishWebProjects: true

- task: AzureWebApp@1
  inputs:
    azureSubscription: '<your-authorized-service-connection>'
    appType: 'webApp'
    appName: '<your-app-name>'
    package: '$(System.DefaultWorkingDirectory)/**/*.zip'
    deploymentMethod: 'auto'  
  • azureSubscription: Namnet på den auktoriserade tjänstanslutningen till din Azure-prenumeration.
  • appName: Namnet på din befintliga app.
  • package: Filsökväg till paketet eller mappen som innehåller ditt App Service-innehåll. Jokertecken stöds.

Examples

I följande avsnitt beskrivs hur du skapar olika typer av bygg- och versionspipelines.

Distribuera till ett virtuellt program

Azure Web App-uppgiften distribueras till rotprogrammet i Azure-webbappen. Du kan distribuera till ett specifikt virtuellt program med hjälp VirtualApplication av egenskapen för Azure App Service-distributionsuppgiften .

- task: AzureRmWebAppDeployment@5
  inputs:
    VirtualApplication: '<name of virtual application>'

VirtualApplication är namnet på det virtuella programmet som konfigurerats i Azure-portalen. Mer information finns i Konfigurera en App Service-app i Azure-portalen.

Distribuera till ett fack

I följande exempel visas hur du distribuerar till ett mellanlagringsfack och sedan byter till en produktionsplats:

- task: AzureWebApp@1
  inputs:
    azureSubscription: '<service-connection-name>'
    appType: webAppLinux
    appName: '<app-name>'
    deployToSlotOrASE: true
    resourceGroupName: '<name of resource group>'
    slotName: staging
    package: '$(Build.ArtifactStagingDirectory)/**/*.zip'

- task: AzureAppServiceManage@0
  inputs:
    azureSubscription: '<service-connection-name>'
    WebAppName: '<app-name>'
    ResourceGroupName: '<name of resource group>'
    SourceSlot: staging
    SwapWithProduction: true
  • azureSubscription: Din Azure-tjänstanslutning.
  • appType: Valfri apptyp som webAppLinux att distribuera till en webbapp i Linux.
  • appName: Namnet på din befintliga app.
  • deployToSlotOrASE:Boolesk. Om du vill distribuera till ett befintligt distributionsfack eller En App Service-miljö.
  • resourceGroupName: Namnet på resursgruppen som ska distribueras till, obligatoriskt om deployToSlotOrASE det är sant.
  • slotName: Namnet på platsen som ska distribueras till, krävs om deployToSlotOrASE det är sant. Standardinställningen är production.
  • package: Filsökväg till paketet eller mappen som innehåller appens innehåll. Jokertecken stöds.
  • SourceSlot: Plats skickas till produktion om SwapWithProduction är sant.
  • SwapWithProduction:Boolesk. Om du vill växla trafik från källplatsen till produktion.

Distribuera till flera webbappar

Du kan använda jobb i YAML-filen för att konfigurera en pipeline med distributioner. Med hjälp av jobb kan du styra distributionsordningen till flera webbappar.

jobs:
- job: buildandtest
  pool:
    vmImage: ubuntu-latest
 
  steps:
  # publish an artifact called drop
  - task: PublishPipelineArtifact@1
    inputs:
      targetPath: '$(Build.ArtifactStagingDirectory)' 
      artifactName: drop
  
  # deploy to Azure Web App staging
  - task: AzureWebApp@1
    inputs:
      azureSubscription: '<service-connection-name>'
      appType: <app type>
      appName: '<staging-app-name>'
      deployToSlotOrASE: true
      resourceGroupName: <group-name>
      slotName: 'staging'
      package: '$(Build.ArtifactStagingDirectory)/**/*.zip'

- job: deploy
  dependsOn: buildandtest
  condition: succeeded()

  pool: 
    vmImage: ubuntu-latest
  
  steps:
    # download the artifact drop from the previous job
  - task: DownloadPipelineArtifact@2
    inputs:
      source: 'current'
      artifact: 'drop'
      path: '$(Pipeline.Workspace)'

  - task: AzureWebApp@1
    inputs:
      azureSubscription: '<service-connection-name>'
      appType: <app type>
      appName: '<production-app-name>'
      resourceGroupName: <group-name>
      package: '$(Pipeline.Workspace)/**/*.zip'

Distribuera villkorligt

Om du vill distribuera villkorligt i YAML använder du någon av följande tekniker:

  • Lägg till ett villkor i steget.
  • Isolera distributionssteget till ett separat jobb och lägg till ett villkor för det jobbet.

I följande exempel visas hur du använder stegvillkor för att endast distribuera lyckade versioner som kommer från huvudgrenen:

- task: AzureWebApp@1
  condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
  inputs:
    azureSubscription: '<service-connection-name>'
    appName: '<app-name>'

Mer information om villkor finns i Ange villkor.

Distribuera med webbdistribution

Azure App Service-distributionsuppgiften kan distribueras till App Service med hjälp av Webbdistribution.

trigger:
- main

pool:
  vmImage: windows-latest

variables:
  buildConfiguration: 'Release'

steps:
- task: DotNetCoreCLI@2
  inputs:
    command: 'publish'
    publishWebProjects: true
    arguments: '--configuration $(buildConfiguration)'
    zipAfterPublish: true

- task: AzureRmWebAppDeployment@5
  inputs:
    ConnectionType: 'AzureRM'
    azureSubscription: '<service-connection-name>'
    appType: 'webApp'
    WebAppName: '<app-name>'
    packageForLinux: '$(System.DefaultWorkingDirectory)/**/*.zip'
    enableCustomDeployment: true
    DeploymentType: 'webDeploy'

Vanliga frågor och svar

Vad är skillnaden mellan aktiviteterna AzureWebApp och AzureRmWebAppDeployment?

Azure Web App-uppgiften är det enklaste sättet att distribuera till en Azure-webbapp. Som standard distribuerar du rotprogrammet i Azure-webbappen.

Azure App Service-distributionsaktiviteten kan hantera fler anpassade scenarier, till exempel:

Anmärkning

Den separata filtransformeringsaktiviteten stöder även filtransformering och variabelersättning som ska användas i Azure Pipelines. Du kan använda filtransformeringsaktiviteten för att tillämpa filtransformeringar och variabelersättningar på alla konfigurations- och parameterfiler.

Varför visas meddelandet "Ogiltig App Service-paket eller mappsökväg har angetts"?

I YAML-pipelines kan det uppstå ett matchningsfel mellan var det skapade webbpaketet sparas och var distributionsuppgiften letar efter det. AzureWebApp-standarduppgiften hämtar webbpaketet för distribution från $(System.DefaultWorkingDirectory)/**/*.zip. Om webbpaketet deponeras någon annanstans ändrar du värdet för parametern package .

Varför får jag meddelandet "Publicera med webdeploy-alternativ stöds endast när jag använder Windows-agenten"?

Det här felet uppstår i AzureRmWebAppDeployment-uppgiften när du konfigurerar uppgiften att distribuera med hjälp av Webbdistribution, men din agent kör inte Windows. Kontrollera att YAML-parametern vmImage anger Windows.

pool:
  vmImage: windows-latest

Varför fungerar inte webbdistribution när jag inaktiverar grundläggande autentisering?

Felsökningsinformation om hur du får Microsoft Entra-ID-autentisering att fungera med Azure App Service-distributionsuppgiften finns i Jag kan inte webbdistribuera till min Azure App Service med microsoft entra-ID-autentisering från min Windows-agent.