Anmerkung
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 2022
In diesem Artikel wird erläutert, wie Sie Azure Pipelines verwenden, um Ihre Web-App automatisch zu erstellen, zu testen und in Azure App Service bereitzustellen. Sie können eine CI/CD-Pipeline (Continuous Integration und Continuous Delivery) einrichten, die ausgeführt wird, wenn Sie eine Codeänderung in einen bestimmten Branch Ihres Repositorys einchecken.
Pipelines bestehen aus Phasen, Aufträgen und Schritten. Ein Schritt ist der kleinste Baustein einer Pipeline und kann ein Skript oder ein Task (also ein vorgefertigtes Skript) sein. Weitere Informationen zu den wichtigsten Konzepten und Komponenten, aus denen eine Pipeline besteht, finden Sie unter Wichtige Konzepte für Azure Pipelines.
Sie können den Task Azure Web App in Ihrer Pipeline für die Bereitstellung in App Service verwenden. Für komplexere Szenarien, z. B. die Verwendung von XML-Parametern in Bereitstellungen, können Sie den Task Azure App Service deploy verwenden.
Voraussetzungen
Eine funktionierende Azure App Service-App mit Code, der auf GitHub oder Azure Repos gehostet wird. Sie können einen der folgenden Schnellstartartikel verwenden, um eine Beispiel-App zu erstellen:
Eine Azure DevOps-Organisation, die die Möglichkeit hat, Pipelines auf von Microsoft gehosteten Agents auszuführen. Sie müssen einen Free-Tarif für parallele Aufträge anfordern oder parallele Aufträge erwerben. Weitere Informationen finden Sie unter Konfigurieren und Bezahlen für parallele Aufträge.
Ein in der Azure DevOps-Organisation erstelltes Projekt, in der Sie über die Berechtigung zum Erstellen und Autorisieren von Pipelines und Azure-Dienstverbindungen verfügen. Erstellen eines Projekts in Azure DevOps.
Von Bedeutung
Während GitHub-Verfahren werden Sie möglicherweise aufgefordert, eine GitHub-Dienstverbindung zu erstellen, oder werden zu GitHub umgeleitet, um sich anzumelden, die GitHub-App für Azure Pipelines zu installieren, Azure Pipelines zu autorisieren oder sich bei GitHub-Organisationen zu authentifizieren. Folgen Sie den Anweisungen auf dem Bildschirm, um die erforderlichen Prozesse abzuschließen. Weitere Informationen finden Sie unter Zugriff auf GitHub-Repositorys.
Erstellen einer Pipeline
Die Codebeispiele in diesem Abschnitt beziehen sich auf eine ASP.NET Core-Web-App. Sie können die Anweisungen auf andere Frameworks anpassen. Weitere Informationen zur Unterstützung des Azure Pipelines-Ökosystems finden Sie unter Beispiele für das Azure Pipelines-Ökosystem.
Definieren Sie eine Pipeline, indem Sie die YAML-Datei azure-pipelines.yml in Ihrem Coderepository erstellen.
- Wählen Sie für Ihr Azure DevOps-Projekt im linken Navigationsbereich Pipelines aus.
- Wählen Sie auf der Seite Pipelines die Option Neue Pipeline oder Pipeline erstellen aus, wenn diese Pipeline die erste im Projekt ist.
- Wählen Sie auf dem Bildschirm Wo befindet sich Ihr Code? den Speicherort Ihres Quellcodes aus, entweder Azure Repos Git oder GitHub. Melden Sie sich bei Bedarf bei GitHub an.
- Wählen Sie auf dem Bildschirm Repository auswählen Ihr Coderepository aus.
- Wählen Sie auf dem Bildschirm "Pipeline konfigurieren" die Option "Startpipeline" aus.
Fügen Sie der Pipeline den Task .NET Core (DotNetCoreCLI@2) hinzu, und erstellen und veröffentlichen Sie Ihre App.
- Löschen Sie auf dem Bildschirm Pipeline-YAML überprüfen den gesamten Code nach der Zeile
steps:. - Wählen Sie das Ende der Datei und dann rechts Assistent anzeigen aus.
- Wählen Sie unter Tasks die Option .NET Core aus.
- Wählen Sie auf dem .NET Core-Konfigurationsbildschirm unter Azure Resource Manager-Verbindung Ihr Azure-Abonnement und dann Autorisieren aus, um die erforderliche Dienstverbindung zu erstellen.
- Wählen Sie unter Befehl die Option Veröffentlichen aus.
- Stellen Sie sicher, dass die Kontrollkästchen Webprojekte veröffentlichen und Veröffentlichte Projekte komprimieren aktiviert sind, und wählen Sie dann Hinzufügen aus.
- Der Task wird in Ihrer YAML-Pipeline angezeigt. Überprüfen Sie den YAML-Code, um zu sehen, was er tut. Wenn Sie fertig sind, wählen Sie Speichern und ausführen aus. Wählen Sie dann erneut Speichern und ausführen aus.
- Wählen Sie auf dem Bildschirm Zusammenfassung für den Build unter Aufträge den Link Genehmigung erforderlich aus. Wählen Sie auf dem Bildschirm Überprüfungen die Option Zulassenund dann erneut Zulassen aus. Durch das Gewähren der Berechtigung hier wird die Verwendung der Dienstverbindung erlaubt, die Sie für alle Ausführung dieser Pipeline autorisiert haben.
Die Pipeline veröffentlicht die ZIP-Bereitstellungsdatei als Azure-Artefakt für die Bereitstellungsaufgabe zur Verwendung im nächsten Schritt.
Hinzufügen der Bereitstellungsaufgabe
Nachdem die Pipeline erfolgreich ausgeführt wurde, fügen Sie die Bereitstellungsaufgabe hinzu.
- Wählen Sie auf dem Bildschirm Zusammenfassung der Pipelineausführung oben rechts das Symbol Weitere Aktionen und anschließend Pipeline bearbeiten aus.
- Wählen Sie das Ende der YAML-Datei und dann Assistent anzeigen aus, wenn die Liste Tasks nicht angezeigt wird.
- Suchen Sie in der Liste Tasks nach dem Task Azure Web App, und wählen Sie ihn aus. Alternativ können Sie den Task Azure App Service deploy verwenden.
- Wählen Sie auf dem Konfigurationsbildschirm für die Azure-Web-App unter Azure-Abonnement die gleiche Dienstverbindung aus, die Sie für den vorherigen Schritt eingerichtet haben. Sie müssen diese Verbindung nicht erneut autorisieren.
- Wählen Sie für App-Typ abhängig von Ihrem Code Azure-Web-App unter Linux oder Azure-Web.App unter Windows aus.
- Wählen Sie unter App-Name Ihren App Service-App-Namen aus, oder geben Sie ihn ein.
- Wählen Sie Hinzufügen aus.
- Wählen Sie Überprüfen und speichern und dann Speichern aus.
- Wählen Sie Ausführen und dann erneut Ausführen aus.
Die vollständige YAML-Pipeline sollte wie der folgende Code aussehen:
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: Name der autorisierten Dienstverbindung mit Ihrem Azure-Abonnement. -
appName: Name Ihrer vorhandenen App. -
package: Dateipfad zum Paket oder Ordner, das bzw. der die App Service-Inhalte enthält. Platzhalter werden unterstützt.
Examples
In den folgenden Abschnitten wird die Erstellung verschiedener Build- und Releasepipelines erläutert.
Bereitstellen in einer virtuellen Anwendung
Der Task Azure Web App wird in der Stammanwendung in der Azure-Web-App bereitgestellt. Sie können mithilfe der Eigenschaft VirtualApplication des Tasks Azure App Service deploy in einer bestimmten virtuellen Anwendung bereitstellen.
- task: AzureRmWebAppDeployment@5
inputs:
VirtualApplication: '<name of virtual application>'
VirtualApplication ist der Name der virtuellen Anwendung, die im Azure-Portal konfiguriert ist. Weitere Informationen finden Sie unter Konfigurieren einer App Service-App im Azure-Portal.
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>'
WebAppName: '<app-name>'
ResourceGroupName: '<name of resource group>'
SourceSlot: staging
SwapWithProduction: true
-
azureSubscription: Ihre Azure-Dienstverbindung. -
appType: Optionaler App-Typ, etwawebAppLinux, zum Bereitstellen in einer Web-App unter Linux. -
appName: Der Name Ihrer vorhandenen App. -
deployToSlotOrASE:Boolesch. Gibt an, ob die Bereitstellung in einem vorhandenen Bereitstellungsslot oder in einer App Service-Umgebung erfolgt. -
resourceGroupName: Name der Ressourcengruppe, in der die Bereitstellung erfolgen soll, erforderlich, wenndeployToSlotOrASEauf „true“ festgelegt ist. -
slotName: Name des Slots für die Bereitstellung, erforderlich, wenndeployToSlotOrASEauf „true“ festgelegt ist. Wird standardmäßig aufproductionfestgelegt. -
package: Dateipfad zum Paket oder Ordner, das bzw. der Ihre App-Inhalte enthält. Platzhalter werden unterstützt. -
SourceSlot: Slot, der an die Produktion gesendet wird, wenn „true“ fürSwapWithProductionangegeben ist. -
SwapWithProduction:Boolesch. Gibt an, ob der Datenverkehr des Quellslots mit der Produktion ausgetauscht werden soll.
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'
Bedingte Bereitstellung
Verwenden Sie zum bedingten Bereitstellen in YAML eine der folgenden Techniken:
- Hinzufügen einer Bedingung zum Schritt.
- Isolieren der Bereitstellungsschritte in einen separaten Auftrag und Hinzufügen einer Bedingung zu diesem Auftrag.
Im folgenden Beispiel wird gezeigt, wie Schrittbedingungen verwendet werden, um nur erfolgreiche 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 zu Bedingungen finden Sie unter Angeben von Bedingungen.
Bereitstellen mithilfe von Web Deploy
Der Task Azure App Service deploy kann mithilfe von Web Deploy in 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@5
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 Tasks „AzureWebApp“ und „AzureRmWebAppDeployment“?
Der Task Azure Web App ist die einfachste Möglichkeit zum Bereitstellen in einer Azure-Web-App. Standardmäßig stellen Sie die Stammanwendung in der Azure-Web-App bereit.
Der Task Azure App Service deploy 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
Der separate Task File Transform unterstützt auch Dateitransformationen und das Ersetzen von Variablen zur 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 gibt es möglicherweise einen Konflikt zwischen dem Speicherort des erstellten Webpakets und dem Ort, an dem der Bereitstellungstask danach sucht. Der Standardtask AzureWebApp nimmt das Webpaket für die Bereitstellung aus $(System.DefaultWorkingDirectory)/**/*.zip. Wenn sich das Webpaket an anderer Stelle befindet, ändern Sie den Wert des package-Parameters.
Warum erhalte ich die Meldung "Veröffentlichen mithilfe von Webdeploy-Optionen werden nur bei Verwendung des Windows-Agents unterstützt"?
Dieser Fehler tritt im Task AzureRmWebAppDeployment auf, wenn Sie den Task für die Bereitstellung mithilfe von Web Deploy konfigurieren, Ihr Agent jedoch Windows nicht ausführt. Stellen Sie sicher, dass Ihr YAML-Parameter vmImage Windows angibt.
pool:
vmImage: windows-latest
Warum funktioniert web Deploy nicht, wenn ich die Standardauthentifizierung deaktiviere?
Informationen zur Fehlerbehebung, damit die Microsoft Entra ID-Authentifizierung mit dem Task Azure App Service deploy funktioniert, finden Sie unter Ich kann keine Webbereitstellung in Azure App Service mithilfe der Microsoft Entra ID-Authentifizierung über meinen Windows-Agent ausführen..