Delen via


Implementeren in Azure App Service met behulp van Azure Pipelines

Azure DevOps Services | Azure DevOps Server 2020 | Azure DevOps Server 2019

Gebruik Azure Pipelines om uw web-app automatisch te implementeren in Azure-app Service bij elke geslaagde build. Met Azure Pipelines kunt u met behulp van Azure DevOps bouwen, testen en implementeren met continue integratie en continue levering (CI/CD).

YAML-pijplijnen worden gedefinieerd met behulp van een YAML-bestand in uw opslagplaats. Een stap is de kleinste bouwsteen van een pijplijn en kan een script of taak (vooraf verpakt script) zijn. Meer informatie over de belangrijkste concepten en onderdelen waaruit een pijplijn bestaat.

U gebruikt de Azure Web App-taak (AzureWebApp) om naar Azure App Service te deployen binnen uw pipeline. Voor complexere scenario's, zoals wanneer u XML-parameters in uw implementatie moet gebruiken, kunt u de Azure App Service-implementatietaak AzureRmWebAppDeploymentgebruiken.

Voorwaarden:

1. Een pijplijn voor uw stack maken

In de codevoorbeelden in deze sectie wordt ervan uitgegaan dat u een ASP.NET-web-app implementeert. U kunt de instructies voor andere frameworks aanpassen.

Meer informatie over azure Pipelines-ecosysteemondersteuning.

  1. Meld u aan bij uw Azure DevOps-organisatie en ga naar uw project.

  2. Ga naar Pijplijnen en selecteer Nieuwe pijplijn.

  3. Wanneer u hierom wordt gevraagd, selecteert u de locatie van uw broncode: Azure Repos Git of GitHub.

    U wordt mogelijk omgeleid naar GitHub om u aan te melden. Voer in dat geval uw GitHub-referenties in.

  4. Wanneer de lijst met opslagplaatsen wordt weergegeven, selecteert u uw opslagplaats.

  5. U wordt mogelijk omgeleid naar GitHub om de Azure Pipelines-app te installeren. Als dat het zo is, selecteert u Goedkeuren en installeren.

  6. Wanneer het tabblad Configureren wordt weergegeven, selecteert u ASP.NET Core.

  7. Wanneer uw nieuwe pijplijn wordt weergegeven, bekijkt u de YAML om te zien wat deze doet. Wanneer u klaar bent, selecteert u Opslaan en uitvoeren.

2. De implementatietaak toevoegen

  1. Selecteer het einde van het YAML-bestand en selecteer vervolgens Assistent tonen.

  2. Gebruik de Taakassistent om de taak van de Azure-web-app toe te voegen.

    U kunt ook de Azure App Service-implementatietaak AzureRmWebAppDeployment toevoegen.

  3. Kies uw Azure-abonnement. Zorg ervoor dat u Autoriseren selecteert om uw verbinding te autoriseren. De autorisatie creëert de vereiste serviceverbinding.

  4. Selecteer het app-type, de app-naam en de runtimestack op basis van uw App Service-app. Uw volledige YAML moet er ongeveer uitzien als de volgende code.

    variables:
      buildConfiguration: 'Release'
    
    steps:
    - task: DotNetCoreCLI@2
      inputs:
        command: 'publish'
        publishWebProjects: true
    - task: AzureWebApp@1
      inputs:
        azureSubscription: '<service-connection-name>'
        appType: 'webAppLinux'
        appName: '<app-name>'
        package: '$(System.DefaultWorkingDirectory)/**/*.zip'
    
    • azureSubscription: Naam van de geautoriseerde serviceverbinding met uw Azure-abonnement.
    • appName: Naam van uw bestaande app.
    • package: Bestandspad naar het pakket of een map met uw App Service-inhoud. Wildcards worden ondersteund.

Voorbeeld: Een .NET-app implementeren

Als u een .zip-webpakket (bijvoorbeeld van een ASP.NET-web-app) naar een Azure-web-app wilt implementeren, gebruikt u het volgende codefragment om de build te implementeren in een app.

variables:
  buildConfiguration: 'Release'

steps:
- task: DotNetCoreCLI@2
  inputs:
    command: 'publish'
    publishWebProjects: true
- task: AzureWebApp@1
  inputs:
    azureSubscription: '<service-connection-name>'
    appType: 'webAppLinux'
    appName: '<app-name>'
    package: '$(System.DefaultWorkingDirectory)/**/*.zip'
  • azureSubscription: uw Azure-abonnement.
  • appType: uw webapp-type.
  • appName: De naam van uw bestaande app-service.
  • package: Bestandspad naar het pakket of een map met uw App Service-inhoud. Wildcards worden ondersteund.

Voorbeeld: Implementeren in een virtuele toepassing

Uw implementatie gebeurt standaard met de hoofdtoepassing in de Azure-web-app. U kunt implementeren in een specifieke virtuele toepassing met behulp van de VirtualApplication eigenschap van de Azure App Service-implementatietaak AzureRmWebAppDeployment:

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

Voorbeeld: Implementeren in een slot

In het volgende voorbeeld ziet u hoe u implementeert in een staging-slot en vervolgens wisselt naar een productie-slot.

- 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>'
    appType: webAppLinux
    WebAppName: '<app-name>'
    ResourceGroupName: '<name of resource group>'
    SourceSlot: staging
    SwapWithProduction: true
  • azureSubscription: uw Azure-abonnement.
  • appType: (Optioneel) Gebruiken webAppLinux om te implementeren in een web-app in Linux.
  • appName: De naam van uw bestaande app-service.
  • deployToSlotOrASE*:Booleaans. Implementeer naar een bestaand implementatieslot of Azure App Service Environment.
  • resourceGroupName: Naam van de resourcegroep. Vereist als deployToSlotOrASE waar is.
  • slotName: Naam van de slot, dat standaard production is. Vereist als deployToSlotOrASE waar is.
  • package: Bestandspad naar het pakket of een map met uw App Service-inhoud. Wildcards worden ondersteund.
  • SourceSlot: Slot naar productie verzonden wanneer SwapWithProduction waar is.
  • SwapWithProduction:Booleaans. Het verkeer van de bronplaats wisselen met de productieplaats.

Voorbeeld: Implementeren in meerdere web-apps

U kunt taken in uw YAML-bestand gebruiken om een pijplijn met implementaties in te stellen. Met behulp van taken kunt u de volgorde van implementatie in meerdere web-apps beheren.

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'

Voorbeeld: Voorwaardelijk implementeren

Als u voorwaardelijk wilt implementeren in YAML, kunt u een van de volgende technieken gebruiken:

  • Isoleer de implementatiestappen in een afzonderlijke taak en voeg een voorwaarde toe aan die taak.
  • Voeg een voorwaarde toe aan de stap.

In het volgende voorbeeld ziet u hoe u stapvoorwaarden gebruikt om alleen builds te implementeren die afkomstig zijn van de hoofdbranch:

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

Voor meer informatie over voorwaarden, zie Voorwaarden specificeren.

Voorbeeld: Implementeren met behulp van Web Deploy

De Azure App Service-implementatietaak AzureRmWebAppDeployment kan worden geïmplementeerd in App Service met behulp van Web Deploy.

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@4
  inputs:
    ConnectionType: 'AzureRM'
    azureSubscription: '<service-connection-name>'
    appType: 'webApp'
    WebAppName: '<app-name>'
    packageForLinux: '$(System.DefaultWorkingDirectory)/**/*.zip'
    enableCustomDeployment: true
    DeploymentType: 'webDeploy'

Veelgestelde vragen

Wat is het verschil tussen de AzureWebApp-taken en AzureRmWebAppDeployment-taken?

De Azure-web-app-taakAzureWebApp is de eenvoudigste manier om te implementeren in een Azure-web-app. Uw implementatie gebeurt standaard met de hoofdtoepassing in de Azure-web-app.

De Azure-app Service Deploy-taak (AzureRmWebAppDeployment) kan meer aangepaste scenario's verwerken, zoals:

Notitie

De afzonderlijke taak Bestandstransformatie ondersteunt ook bestandstransformaties en het vervangen van variabelen voor gebruik in Azure Pipelines. U kunt de taak Bestandstransformatie gebruiken om bestandstransformaties en variabele vervangingen toe te passen op configuratie- en parameterbestanden.

Waarom krijg ik het bericht 'Ongeldig App Service-pakket of mappad opgegeven'?

Afhankelijk van uw pijplijn komen er in YAML-pijplijnen mogelijk niet overeen tussen waar uw ingebouwde webpakket wordt opgeslagen en waar de implementatietaak ernaar op zoek is. De AzureWebApp taak pakt bijvoorbeeld het webpakket op voor implementatie. De AzureWebApp taak kan er uitzien in $(System.DefaultWorkingDirectory)/**/*.zip. Als het webpakket ergens anders wordt neergezet, wijzigt u de waarde van package.

Waarom krijg ik het bericht 'Publiceren met webdeploy-opties worden alleen ondersteund bij het gebruik van windows-agent'?

Deze fout treedt op in de AzureRmWebAppDeployment taak wanneer u de taak configureert om te implementeren met Web Deploy, maar uw agent draait niet op Windows. Controleer of uw YAML iets bevat dat lijkt op de volgende code:

pool:
  vmImage: windows-latest

Waarom werkt Web Deploy niet wanneer ik basisverificatie uitschakelt?

Zie voor informatie over het oplossen van problemen bij het verkrijgen van Microsoft Entra ID-verificatie die werkt met de AzureRmWebAppDeployment taak, Ik kan mijn Azure App Service niet via Web Deploy gebruiken met Microsoft Entra ID-verificatie vanaf mijn Windows-agent.