Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Azure DevOps Services | Azure DevOps Server 2020 | Azure DevOps Server 2019
Verwenden Sie Azure Pipelines, um Ihre Web-App bei jedem erfolgreichen Build automatisch in Azure App Service bereitzustellen. Mit Azure Pipelines können Sie mithilfe von Azure DevOps eine kontinuierliche Integration und kontinuierliche Bereitstellung (CI/CD) erstellen, testen und bereitstellen.
YAML-Pipelines werden mithilfe einer YAML-Datei in Ihrem Repository definiert. Ein Schritt ist der kleinste Baustein einer Pipeline und kann ein Skript oder ein Task (vorgefertigtes Skript) sein. Erfahren Sie mehr über die wichtigsten Konzepte und Komponenten einer Pipeline.
Sie verwenden die Azure-Web-App-Aufgabe (AzureWebApp
), um in Azure App Service in Ihrer Pipeline bereitzustellen. Für kompliziertere Szenarien, z. B. wenn Sie XML-Parameter in Ihrer Bereitstellung verwenden müssen, können Sie die Azure App Service-Bereitstellungsaufgabe AzureRmWebAppDeployment
verwenden.
Voraussetzungen:
- Ein Azure-Konto mit einem aktiven Abonnement. Sie können kostenlos ein Konto erstellen.
- Eine Azure DevOps-Organisation. Erstellen Sie ein kostenloses Konto.
- Möglichkeit zum Ausführen von Pipelines auf von Microsoft gehosteten Agents. Sie können einen Parallelauftrag erwerben oder einen kostenlosen Tarif anfordern.
- Eine funktionierende Azure App Service-App mit dem code, der auf GitHub oder Azure Repos gehostet wird.
1. Erstelle eine Pipeline für deinen Stack
In den Codebeispielen in diesem Abschnitt wird davon ausgegangen, dass Sie eine ASP.NET Web-App bereitstellen. Sie können die Anweisungen auf andere Frameworks anpassen.
Erfahren Sie mehr über die Unterstützung des Azure Pipelines-Ökosystems.
Melden Sie sich bei Ihrer Azure DevOps-Organisation an, und wechseln Sie zu Ihrem Projekt.
Wechseln Sie zu "Pipelines ", und wählen Sie "Neue Pipeline" aus.
Wenn Sie dazu aufgefordert werden, wählen Sie den Speicherort Ihres Quellcodes aus: entweder Azure Repos Git oder GitHub.
Möglicherweise werden Sie zu GitHub weitergeleitet, um sich anzumelden. Geben Sie in diesem Fall Ihre Anmeldeinformationen für GitHub ein.
Wenn die Liste der Repositorys angezeigt wird, wählen Sie Ihr Repository aus.
Sie werden möglicherweise zu GitHub weitergeleitet, um die Azure Pipelines-App zu installieren. Wählen Sie in diesem Fall Genehmigen & installieren aus.
Wählen Sie bei Anzeige der Registerkarte Konfigurieren die Option ASP.NET Core aus.
Wenn Ihre neue Pipeline angezeigt wird, sehen Sie sich den YAML-Code an, um herauszufinden, was er macht. Wenn Sie so weit sind, wählen Sie Speichern und ausführen aus.
2. Hinzufügen der Bereitstellungsaufgabe
Wählen Sie das Ende der YAML-Datei und dann den Assistenten anzeigen aus.
Verwenden Sie den Aufgaben-Assistenten , um die Azure Web App-Aufgabe hinzuzufügen.
Alternativ können Sie die Azure App Service-Bereitstellungsaufgabe
AzureRmWebAppDeployment
hinzufügen.Wählen Sie Ihr Azure-Abonnement aus. Wählen Sie "Autorisieren" aus, um Ihre Verbindung zu autorisieren. Die Autorisierung erstellt die erforderliche Dienstverbindung.
Wählen Sie App-Typ, App-Nameund Runtimestapel basierend auf Ihrer App Service-App aus. Die vollständige YAML-Datei sollte dem folgenden Code ähneln:
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
: Name der autorisierten Dienstverbindung mit Ihrem Azure-Abonnement. -
appName
: Name Ihrer vorhandenen App. -
package
: Dateipfad zum Paket oder einem Ordner, der Ihren App Service-Inhalt enthält. Platzhalter werden unterstützt.
-
Beispiel: Bereitstellen einer .NET-App
Um ein ZIP-Webpaket (z. B. von einer ASP.NET-Web-App) in einer Azure-Web-App bereitzustellen, verwenden Sie den folgenden Codeschnipsel, um den Build in einer App bereitzustellen:
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
: Ihr Azure-Abonnement. -
appType
: Ihr Web-App-Typ. -
appName
: Der Name Ihres vorhandenen App-Diensts. -
package
: Dateipfad zum Paket oder einem Ordner, der Ihren App Service-Inhalt enthält. Platzhalter werden unterstützt.
Beispiel: Bereitstellen in einer virtuellen Anwendung
Standardmäßig erfolgt Ihre Bereitstellung mit der Stammanwendung in der Azure Web App. Sie können eine bestimmte virtuelle Anwendung bereitstellen, indem Sie die VirtualApplication
Eigenschaft der Azure App Service-Bereitstellungsaufgabe AzureRmWebAppDeployment
verwenden:
- task: AzureRmWebAppDeployment@4
inputs:
VirtualApplication: '<name of virtual application>'
-
VirtualApplication
: Der Name der virtuellen Anwendung, die im Azure-Portal konfiguriert ist. Weitere Informationen finden Sie unter Konfigurieren einer App Service-App im Azure-Portal.
Beispiel: Bereitstellen in einem Slot
Das folgende Beispiel zeigt, wie in einem Stagingslot bereitgestellt und dann zu einem Produktionsslot gewechselt wird:
- 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
: Ihr Azure-Abonnement. -
appType
: (Optional) Verwenden SiewebAppLinux
zum Bereitstellen in einer Web-App unter Linux. -
appName
: Der Name Ihres vorhandenen App-Diensts. -
deployToSlotOrASE*
:Boolesch. Bereitstellen in einem vorhandenen Bereitstellungsslot oder in einer Azure App Service-Umgebung. -
resourceGroupName
: Name der Ressourcengruppe. Erforderlich, wenndeployToSlotOrASE
„true“ ist. -
slotName
: Name des Slots. Standardeinstellung istproduction
. Erforderlich, wenndeployToSlotOrASE
„true“ ist. -
package
: Dateipfad zum Paket oder einem Ordner, der Ihren App Service-Inhalt enthält. Platzhalter werden unterstützt. -
SourceSlot
: Slot, der an die Produktion gesendet wird, wenn „true“ fürSwapWithProduction
angegeben ist. -
SwapWithProduction
:Boolesch. Den Datenverkehr des Quellslots gegen die Produktion tauschen.
Beispiel: Bereitstellen in mehreren Web-Apps
Sie können Aufträge in Ihrer YAML-Datei verwenden, um eine Pipeline aus Bereitstellungen einzurichten. Mithilfe von Aufträgen können Sie die Reihenfolge der Bereitstellung in mehreren Web-Apps steuern.
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'
Beispiel: Bedingte Bereitstellung
Zum bedingten Bereitstellen in YAML können Sie eine der folgenden Techniken verwenden:
- Isolieren der Bereitstellungsschritte in einen separaten Auftrag und Hinzufügen einer Bedingung zu diesem Auftrag.
- Hinzufügen einer Bedingung zum Schritt.
Im folgenden Beispiel wird gezeigt, wie Schrittbedingungen verwendet werden, um nur Builds bereitzustellen, die aus dem Mainbranch stammen:
- task: AzureWebApp@1
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
inputs:
azureSubscription: '<service-connection-name>'
appName: '<app-name>'
Weitere Informationen finden Sie unter Angeben von Bedingungen.
Beispiel: Bereitstellen mithilfe von Web Deploy
Die Azure App Service-Bereitstellungsaufgabe AzureRmWebAppDeployment
kann mithilfe von Web Deploy auf App Service bereitgestellt werden.
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'
Häufig gestellte Fragen
Was ist der Unterschied zwischen den Aufgaben AzureWebApp
und AzureRmWebAppDeployment
?
Die Azure Web App-AufgabeAzureWebApp
ist die einfachste Möglichkeit zum Bereitstellen in einer Azure Web App. Standardmäßig erfolgt Ihre Bereitstellung mit der Stammanwendung in der Azure Web App.
Die Azure App Service-Bereitstellungsaufgabe (AzureRmWebAppDeployment
) kann weitere benutzerdefinierte Szenarien verarbeiten, z. B.:
- Bereitstellen mit Web Deploy, wenn Sie in der Regel den Iis-Bereitstellungsprozess (Internet Information Services) verwenden.
- Bereitstellen in virtuellen Anwendungen
- Stellen Sie für andere App-Typen bereit, z. B. Container-Apps, Funktions-Apps, WebJobs oder API und mobile Apps.
Hinweis
Die separate Dateitransformationsaufgabe unterstützt sowohl Dateitransformationen als auch Variablen-Ersetzungen für die Verwendung in Azure Pipelines. Sie können die Dateitransformationsaufgabe verwenden, um Dateitransformationen und Variablenersetzungen auf alle Konfigurations- und Parameterdateien anzuwenden.
Warum erhalte ich die Meldung "Ungültiges App Service-Paket oder Ordnerpfad bereitgestellt"?
In YAML-Pipelines kann es je nach Ihrer Pipeline zu einer Diskrepanz zwischen dem Speicherort des erstellten Webpakets und dem Ort kommen, an dem die Bereitstellungsaufgabe danach sucht. Die Aufgabe AzureWebApp
übernimmt beispielsweise das Web-Paket zur Bereitstellung. Die Aufgabe AzureWebApp
sucht möglicherweise in $(System.DefaultWorkingDirectory)/**/*.zip
. Wenn sich das Webpaket an anderer Stelle befindet, ändern Sie den Wert von package
.
Warum erhalte ich die Meldung "Veröffentlichen mithilfe von Webdeploy-Optionen werden nur bei Verwendung des Windows-Agents unterstützt"?
Dieser Fehler tritt in der AzureRmWebAppDeployment
Aufgabe auf, wenn Sie die Aufgabe für die Bereitstellung mithilfe von Web Deploy konfigurieren, aber Ihr Agent führt Windows nicht aus. Vergewissern Sie sich, dass Ihr YAML einen ähnlichen Code wie den folgenden Code enthält:
pool:
vmImage: windows-latest
Warum funktioniert web Deploy nicht, wenn ich die Standardauthentifizierung deaktiviere?
Informationen zur Fehlerbehebung, damit die Microsoft Entra ID-Authentifizierung mit der Aufgabe AzureRmWebAppDeployment
funktioniert, finden Sie unter Ich kann keine Webbereitstellung in Azure App Service mithilfe der Microsoft Entra ID-Authentifizierung über meinen Windows-Agent ausführen..
Verwandte Inhalte
- Anpassen Ihrer Azure DevOps-Pipeline.