Share via


Implementeren in Azure App Service met behulp van Azure Pipelines

Azure DevOps Services | Azure DevOps Server 2022

In dit artikel wordt uitgelegd hoe u Azure Pipelines gebruikt om uw web-app automatisch te bouwen, testen en implementeren in Azure App Service. U kunt een CI/CD-pijplijn (continue integratie en continue levering) instellen die wordt uitgevoerd wanneer u een codewijziging incheckt in een aangewezen vertakking van uw opslagplaats.

Pijplijnen bestaan uit fasen, taken en stappen. Een stap is de kleinste bouwsteen van een pijplijn en kan een script of een taak zijn. Dit is een vooraf verpakt script. Zie Belangrijke Concepten van Azure Pipelines voor meer informatie over de belangrijkste concepten en onderdelen waaruit een pijplijn bestaat.

U kunt de Azure-web-app-taak in uw pijplijn gebruiken om te implementeren in App Service. Voor complexere scenario's, zoals het gebruik van XML-parameters in implementaties, kunt u de Azure App Service-implementatietaak gebruiken.

Vereiste voorwaarden

Belangrijk

Tijdens gitHub-procedures wordt u mogelijk gevraagd om een GitHub-serviceverbinding te maken of om te worden omgeleid naar GitHub om u aan te melden, de GitHub-app Azure Pipelines te installeren, Azure Pipelines te autoriseren of te verifiëren bij GitHub-organisaties. Volg de instructies op het scherm om de benodigde processen te voltooien. Zie Toegang tot GitHub-opslagplaatsen voor meer informatie.

Een pijplijn maken

De codevoorbeelden in deze sectie zijn voor een ASP.NET Core-web-app. U kunt de instructies voor andere frameworks aanpassen. Zie voorbeelden van het Azure Pipelines-ecosysteem voor meer informatie over de ondersteuning van het Azure Pipelines-ecosysteem.

Definieer een pijplijn door een AZURE-PIPELINES.YML YAML-bestand te maken in uw codeopslagplaats.

  1. Selecteer Pijplijnen in het linkernavigatiemenu voor uw Azure DevOps-project.
  2. Selecteer op de pagina Pijplijnende optie Nieuwe pijplijn of Pijplijn maken als deze pijplijn de eerste is in het project.
  3. Selecteer in het scherm Waar is uw code de locatie van uw broncode, Ofwel Azure Repos Git of GitHub. Meld u indien nodig aan bij GitHub.
  4. Selecteer uw codeopslagplaats in het scherm Een opslagplaats selecteren.
  5. Selecteer Starter-pijplijn in het scherm Uw pijplijn configureren.

Voeg de taak .NET Core (DotNetCoreCLI@2) toe aan de pijplijn en bouw en publiceer uw app.

  1. Verwijder in het scherm Uw pijplijn YAML controleren alle code na de steps: regel.
  2. Selecteer het einde van het bestand en selecteer vervolgens Assistent weergeven aan de rechterkant.
  3. Selecteer onder Taken.NET Core.
  4. Selecteer in het scherm .NET Core-configuratie onder Azure Resource Manager-verbinding uw Azure-abonnement en selecteer autoriseren om de vereiste serviceverbinding te maken.
  5. Selecteer onder Opdrachtpubliceren.
  6. Zorg ervoor dat de selectievakjes Webprojecten publiceren en Gepubliceerde zip-projecten zijn ingeschakeld en selecteer vervolgens Toevoegen.
  7. De taak wordt weergegeven in uw YAML-pijplijn. Controleer de YAML-code om te zien wat deze doet. Wanneer u klaar bent, selecteert u Opslaan en uitvoeren en selecteert u Opslaan en opnieuw uitvoeren .
  8. Selecteer in het scherm Samenvatting samenstellen onder Taken de koppeling Machtigingen die nodig is . Selecteer In het scherm Controlesde optie Toestaan en selecteer Vervolgens opnieuw Toestaan . Als u hier toestemming verleent, wordt het gebruik van de serviceverbinding die u hebt geautoriseerd voor alle uitvoeringen van deze pijplijn toegestaan.

De pijplijn publiceert het ZIP-implementatiebestand als een Azure-artefact voor de implementatietaak die in de volgende stap moet worden gebruikt.

De implementatietaak toevoegen

Nadat de pijplijn is uitgevoerd, voegt u de implementatietaak toe.

  1. Selecteer in het scherm Samenvatting van pijplijnuitvoering het pictogram Meer acties in de rechterbovenhoek en selecteer vervolgens Pijplijn bewerken.
  2. Selecteer het einde van het YAML-bestand en selecteer Assistent weergevenals de takenlijst niet wordt weergegeven.
  3. Zoek en selecteer de Azure Web App-taak in de lijst Taken. U kunt ook de Azure App Service-implementatietaak gebruiken.
  4. Selecteer in het scherm configuratie van De Azure-web-app onder Azure-abonnement dezelfde serviceverbinding die u voor de vorige stap hebt ingesteld. U hoeft deze verbinding niet opnieuw te autoriseren.
  5. Voor app-type selecteert u Azure Web App in Linux of Azure Web App in Windows, afhankelijk van uw code.
  6. Selecteer of voer uw App Service-app-naam in als app-naam.
  7. Selecteer Toevoegen.
  8. Selecteer Valideren en opslaan en selecteer Vervolgens Opslaan.
  9. Selecteer Uitvoeren en selecteer vervolgens Opnieuw uitvoeren .

De volledige YAML-pijplijn moet eruitzien als de volgende code:

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: Naam van de geautoriseerde serviceverbinding met uw Azure-abonnement.
  • appName: Naam van uw bestaande app.
  • package: bestandspad naar het pakket of de map met uw App Service-inhoud. Wildcards worden ondersteund.

Voorbeelden

In de volgende secties wordt beschreven hoe u verschillende soorten build- en release-pijplijnen maakt.

Implementeren in een virtuele toepassing

De Azure-web-app-taak wordt geïmplementeerd in 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 .

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

VirtualApplication is de naam van de virtuele toepassing die is geconfigureerd in Azure Portal. Zie Een App Service-app configureren in Azure Portal voor meer informatie.

Implementeren in een site

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>'
    WebAppName: '<app-name>'
    ResourceGroupName: '<name of resource group>'
    SourceSlot: staging
    SwapWithProduction: true
  • azureSubscription: uw Azure-serviceverbinding.
  • appType: Optioneel app-type, zoals webAppLinux implementeren in een web-app in Linux.
  • appName: De naam van uw bestaande app.
  • deployToSlotOrASE:Booleaans. Of u nu implementeert in een bestaande implementatiesite of App Service-omgeving.
  • resourceGroupName: Naam van de resourcegroep die moet worden geïmplementeerd, vereist als deployToSlotOrASE waar is.
  • slotName: Naam van de site die moet worden geïmplementeerd, vereist indien deployToSlotOrASE waar. Standaardwaarde is production.
  • package: Bestandspad naar het pakket of de map met de inhoud van uw app. Wildcards worden ondersteund.
  • SourceSlot: Slot naar productie verzonden wanneer SwapWithProduction waar is.
  • SwapWithProduction:Booleaans. Of het verkeer van de bronsite moet worden gewisseld met productie.

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'

Voorwaardelijk implementeren

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

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

In het volgende voorbeeld ziet u hoe u stapvoorwaarden gebruikt om alleen geslaagde 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>'

Zie Voorwaarden opgeven voor meer informatie over voorwaarden.

Implementeren met behulp van Web Deploy

De Azure App Service-implementatietaak 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@5
  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 taken AzureWebApp en AzureRmWebAppDeployment?

De Azure-web-app-taak is de eenvoudigste manier om te implementeren in een Azure-web-app. Standaard implementeert u de hoofdtoepassing in de Azure-web-app.

De Azure App Service-implementatietaak 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'?

In YAML-pijplijnen kan er een verschil zijn tussen waar uw ingebouwde webpakket wordt opgeslagen en waar de implementatietaak ernaar op zoek is. Met de standaardtaak AzureWebApp wordt het webpakket opgehaald voor implementatie vanuit $(System.DefaultWorkingDirectory)/**/*.zip. Als het webpakket ergens anders wordt opgeslagen, wijzigt u de waarde van de package parameter.

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 voor implementatie met webimplementatie, maar uw agent wordt niet uitgevoerd op Windows. Controleer of de YAML-parameter vmImage Windows opgeeft.

pool:
  vmImage: windows-latest

Waarom werkt Web Deploy niet wanneer ik basisverificatie uitschakelt?

Zie voor informatie over het oplossen van problemen met het verkrijgen van Microsoft Entra ID-verificatie om te werken met de azure App Service-implementatietaak , zie ik geen webimplementatie in mijn Azure App Service met behulp van Microsoft Entra ID-verificatie van mijn Windows-agent.