Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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
Een werkende Azure App Service-app met code die wordt gehost op GitHub of Azure-opslagplaatsen. U kunt een van de volgende quickstart-artikelen gebruiken om een voorbeeld-app te maken:
- ASP.NET Core: een ASP.NET Core-web-app maken in Azure
- ASP.NET: Een ASP.NET Framework-web-app maken in Azure
- JavaScript: een Node.js-web-app maken in Azure App Service
- Java: Een Java-app maken in Azure App Service
- Python: Een Python-app maken in Azure App Service
Een Azure DevOps-organisatie die pijplijnen kan uitvoeren op door Microsoft gehoste agents. U moet een gratis laag met parallelle taken aanvragen of parallelle taken aanschaffen. Zie Configureren en betalen voor parallelle taken voor meer informatie.
Een project dat is gemaakt in de Azure DevOps-organisatie waar u gemachtigd bent om pijplijnen en Azure-serviceverbindingen te maken en autoriseren. Een project maken in Azure DevOps.
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.
- Selecteer Pijplijnen in het linkernavigatiemenu voor uw Azure DevOps-project.
- Selecteer op de pagina Pijplijnende optie Nieuwe pijplijn of Pijplijn maken als deze pijplijn de eerste is in het project.
- 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.
- Selecteer uw codeopslagplaats in het scherm Een opslagplaats selecteren.
- 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.
- Verwijder in het scherm Uw pijplijn YAML controleren alle code na de
steps:regel. - Selecteer het einde van het bestand en selecteer vervolgens Assistent weergeven aan de rechterkant.
- Selecteer onder Taken.NET Core.
- Selecteer in het scherm .NET Core-configuratie onder Azure Resource Manager-verbinding uw Azure-abonnement en selecteer autoriseren om de vereiste serviceverbinding te maken.
- Selecteer onder Opdrachtpubliceren.
- Zorg ervoor dat de selectievakjes Webprojecten publiceren en Gepubliceerde zip-projecten zijn ingeschakeld en selecteer vervolgens Toevoegen.
- 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 .
- 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.
- Selecteer in het scherm Samenvatting van pijplijnuitvoering het pictogram Meer acties in de rechterbovenhoek en selecteer vervolgens Pijplijn bewerken.
- Selecteer het einde van het YAML-bestand en selecteer Assistent weergevenals de takenlijst niet wordt weergegeven.
- Zoek en selecteer de Azure Web App-taak in de lijst Taken. U kunt ook de Azure App Service-implementatietaak gebruiken.
- 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.
- Voor app-type selecteert u Azure Web App in Linux of Azure Web App in Windows, afhankelijk van uw code.
- Selecteer of voer uw App Service-app-naam in als app-naam.
- Selecteer Toevoegen.
- Selecteer Valideren en opslaan en selecteer Vervolgens Opslaan.
- 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, zoalswebAppLinuximplementeren 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 alsdeployToSlotOrASEwaar is. -
slotName: Naam van de site die moet worden geïmplementeerd, vereist indiendeployToSlotOrASEwaar. Standaardwaarde isproduction. -
package: Bestandspad naar het pakket of de map met de inhoud van uw app. Wildcards worden ondersteund. -
SourceSlot: Slot naar productie verzonden wanneerSwapWithProductionwaar 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:
- Implementeren met Web Deploy, als u meestal het IIS-implementatieproces (Internet Information Services) gebruikt.
- Implementeren in virtuele toepassingen.
- Implementeren naar andere app-typen, zoals container-apps, functie-apps, WebJobs of API en mobiele apps.
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.