Bereitstellen einer Azure-Web-App

Azure Pipelines | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018 | TFS 2017

Hinweis

In Microsoft Team Foundation Server (TFS) 2018 und früheren Versionen werden Build- und Release-Pipelines als Definitionen bezeichnet, Ausführungen werden als Builds bezeichnet, Dienstverbindungen werden als Dienstendpunkte bezeichnet, Stages werden als Umgebungen bezeichnet und Aufträge werden als Phasen bezeichnet.

Sie können Ihre Web-App nach jedem erfolgreichen Build automatisch in einer Azure App Service-Web-App bereitstellen.

Hinweis

Diese Anleitung gilt für Team Foundation Server (TFS) Version 2017,3 und höher.

Erstellen Sie Ihre App

Befolgen Sie die Anweisungen unter Erstellen der ersten Pipeline , und verwenden Sie das dort angebotene .net Core-Beispiel, bevor Sie dieses Thema verwenden. Wenn Sie fertig sind, verfügen Sie über eine YAML-Pipeline, um die Quelle als Element zu erstellen, zu testen und zu veröffentlichen.

Wir empfehlen neuen Benutzern noch nicht, die Bereitstellung von YAML-Pipelines über Azure DevOps Server 2019 zu verwenden. Wenn Sie ein erfahrener Pipeline Benutzer sind und bereits über eine YAML-Pipeline verfügen, um Ihre .net Core-APP zu erstellen, können Sie die Beispiele unten nützlich finden.

YAML-Pipelines sind in TFS nicht verfügbar.

Nun sind Sie bereit, die restlichen Themen dieses Themas kennenzulernen, um einige der gängigeren Änderungen kennenzulernen, die Benutzer zum Anpassen einer Azure-Web-App-Bereitstellung vornehmen.

Azure Web-App-Bereitstellungs Task

Die einfachste Möglichkeit zum Bereitstellen für eine Azure-Web-App ist die Verwendung der Azure-Web-App -Bereitstellung ()- AzureWebApp Aufgabe.

Bereitstellen eines Web deploy Pakets (ASP.net)

Zum Bereitstellen eines ZIP-Web deploy Pakets (z. b. aus einer ASP.net-Web-App) in einer Azure-Web-App fügen Sie den folgenden Code Ausschnitt in Ihre Azure-Pipelines. yml-Datei ein:

- task: AzureWebApp@1
  inputs:
    azureSubscription: '<Azure service connection>'
    appName: '<Name of web app>'
    package: $(System.DefaultWorkingDirectory)/**/*.zip    
  • azureabonnement: Ihr Azure-Abonnement.
  • appname: der Name Ihres vorhandenen APP Service.
  • Package: der Dateipfad zum Paket oder ein Ordner, der Ihren app Service-Inhalt enthält. Platzhalter werden unterstützt.

Im Code Ausschnitt wird davon ausgegangen, dass die Buildschritte in der YAML-Datei das ZIP-Archiv in dem $(System.DefaultWorkingDirectory) Ordner auf Ihrem Agent erstellen.

Informationen zu Azure-Dienst Verbindungen finden Sie im folgenden Abschnitt.

Bereitstellen einer Java-App

Wenn Sie eine Java- Appentwickeln, verwenden Sie den folgenden Code Ausschnitt, um das Webarchiv (. war) für eine Linux-Web-App bereitzustellen:

- task: AzureWebApp@1
  inputs:
    azureSubscription: '<Azure service connection>'
    appType: webAppLinux
    appName: '<Name of web app>'
    package: '$(System.DefaultWorkingDirectory)/**/*.war'
  • azureabonnement: Ihr Azure-Abonnement.
  • apptype: Ihr Web-App-Typ.
  • appname: der Name Ihres vorhandenen APP Service.
  • Package: der Dateipfad zum Paket oder ein Ordner, der Ihren app Service-Inhalt enthält. Platzhalter werden unterstützt.

Im Code Ausschnitt wird davon ausgegangen, dass die Buildschritte in der YAML-Datei das. war-Archiv in einem der Ordner in der Struktur des Quell Code Ordners erstellen. beispielsweise unter <project root>/build/libs . Wenn Sie in den Buildschritten stattdessen die. war-Datei in kopieren $(System.DefaultWorkingDirectory) , ändern Sie die letzte Zeile im Code Ausschnitt in $(System.DefaultWorkingDirectory)/**/*.war .

Informationen zu Azure-Dienst Verbindungen finden Sie im folgenden Abschnitt.

Bereitstellen einer JavaScript-Node.js-App

Wenn Sie eine JavaScript- Node.js-Appentwickeln, veröffentlichen Sie den gesamten Inhalt Ihres Arbeitsverzeichnisses in der Web-App. In diesem Code Ausschnitt wird auch während der Bereitstellung eine Web.config Datei generiert, wenn die Anwendung nicht über eine Datei verfügt und den iisnode-Handler in der Azure-Web-App startet:

- task: AzureWebApp@1
  inputs:
    azureSubscription: '<Azure service connections>'
    appName: '<Name of web app>'
    package: '$(System.DefaultWorkingDirectory)'
    customWebConfig: '-Handler iisnode -NodeStartFile server.js -appType node'
  • azureabonnement: Ihr Azure-Abonnement.
  • appname: der Name Ihres vorhandenen APP Service.
  • Package: der Dateipfad zum Paket oder ein Ordner, der Ihren app Service-Inhalt enthält. Platzhalter werden unterstützt.
  • customwebconfig: generiert web.config Parameter für python-, Node.js-, go-und Java-apps. Eine Standard web.config Datei wird generiert und für die Azure App Service bereitgestellt, wenn die Anwendung nicht über eine verfügt.

Informationen zu Azure-Dienst Verbindungen finden Sie im folgenden Abschnitt.

YAML-Pipelines sind in TFS nicht verfügbar.

Azure-Dienst Verbindung

Alle integrierten Azure-Aufgaben erfordern eine Azure-Dienst Verbindung als Eingabe. Die Azure-Dienst Verbindung speichert die Anmelde Informationen zum Herstellen einer Verbindung von Azure Pipelines oder TFS mit Azure.

Sie müssen eine Azure-Dienst Verbindung mit der AzureWebApp Aufgabe angeben. Die Azure-Dienst Verbindung speichert die Anmelde Informationen zum Herstellen einer Verbindung von Azure Pipelines mit Azure. Weitere Informationen finden Sie unter Erstellen einer Azure-Dienst Verbindung.

YAML-Pipelines sind in TFS nicht verfügbar.

Bereitstellen für eine virtuelle Anwendung

Standardmäßig erfolgt die Bereitstellung mit der Stamm Anwendung in der Azure-Web-App. Sie können die Bereitstellung für eine bestimmte virtuelle Anwendung mithilfe der- VirtualApplication Eigenschaft des Tasks ausführen AzureRmWebAppDeployment :

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

YAML-Pipelines sind in TFS nicht verfügbar.

In einem Slot bereitstellen

Sie können die Azure-Web-App so konfigurieren, dass Sie über mehrere Slots verfügt. Mit Slots können Sie Ihre APP sicher bereitstellen und testen, bevor Sie Sie Ihren Kunden zur Verfügung stellen.

Im folgenden Beispiel wird gezeigt, wie Sie in einem stagingslot bereitstellen und dann in einen Produktions Slot wechseln:

- task: AzureWebApp@1
  inputs:
    azureSubscription: '<Azure service connection>'
    appName: '<name of web app>'
    slotName: staging

- task: AzureAppServiceManage@0
  inputs:
    azureSubscription: '<Azure service connection>'
    WebAppName: '<name of web app>'
    ResourceGroupName: '<name of resource group>'
    SourceSlot: staging

YAML-Pipelines sind in TFS nicht verfügbar.

Bereitstellen für mehrere Web-Apps

Sie können Aufträge in der YAML-Datei verwenden, um eine Pipeline von bereit Stellungen einzurichten. Durch die Verwendung von Aufträgen können Sie die Reihenfolge der Bereitstellung für mehrere Web-Apps steuern.

jobs:

- job: buildandtest
  pool:
    vmImage: 'ubuntu-16.04'
  steps:
  # publish an artifact called drop
  - task: PublishBuildArtifacts@1
    inputs:
      artifactName: drop

  # deploy to Azure Web App staging
  - task: AzureWebApp@1
    inputs:
      azureSubscription: '<test stage Azure service connection>'
      appName: '<name of test stage web app>'

- job: deploy
  pool:
    vmImage: 'ubuntu-16.04'
  dependsOn: buildandtest
  condition: succeeded()
  steps:

  # download the artifact drop from the previous job
  - task: DownloadBuildArtifacts@0
    inputs:
      artifactName: drop

  # deploy to Azure Web App production
  - task: AzureWebApp@1
    inputs:
      azureSubscription: '<prod Azure service connection>'
      appName: '<name of prod web app>'

YAML-Pipelines sind in TFS nicht verfügbar.

Konfigurationsänderungen

Bei den meisten sprach stapeln können App-Einstellungen und Verbindungs Zeichenfolgen zur Laufzeit als Umgebungsvariablen festgelegt werden. App-Einstellungen können auch über Key Vault mithilfe von Key Vault-Referenzen aufgelöst werden.

Für ASP.net-und ASP.net Core-Entwickler ist das Festlegen von App-Einstellungen in App Service das Festlegen der Einstellungen in Web.config. Möglicherweise möchten Sie eine bestimmte Konfiguration für das Web-App-Ziel anwenden, bevor Sie es bereitstellen. Dies ist hilfreich, wenn Sie den gleichen Build für mehrere Web-Apps in einer Pipeline bereitstellen. Wenn die Web.config Datei z. b. eine Verbindungs Zeichenfolge mit dem Namen enthält connectionString , können Sie Ihren Wert vor der Bereitstellung für jede Web-App ändern. Hierzu können Sie entweder eine Web.config Transformation anwenden oder Variablen in ihrer Web.config-Datei ersetzen.

Mit Azure App Service Bereitstellungs Aufgabe können Benutzer Konfigurationseinstellungen in Konfigurationsdateien (*. config-Dateien) in Webpaketen und XML-Parameterdateien (parameters.xml) basierend auf dem angegebenen Stufen Namen ändern.

Hinweis

Datei Transformationen und Variablen Ersetzung werden auch von der separaten Datei Transformations Aufgabe für die Verwendung in Azure Pipelines unterstützt. Mithilfe der Datei Transformations Aufgabe können Sie Datei Transformationen und Variablen Ersetzungen auf alle Konfigurations-und Parameterdateien anwenden.

Der folgende Code Ausschnitt zeigt ein Beispiel für eine Variablen Ersetzung:

jobs:
- job: test
  variables:
    connectionString: <test-stage connection string>
  steps:
  - task: AzureRmWebAppDeployment@4
    inputs:
      azureSubscription: '<Test stage Azure service connection>'
      WebAppName: '<name of test stage web app>'
      enableXmlVariableSubstitution: true

- job: prod
  dependsOn: test
  variables:
    connectionString: <prod-stage connection string>
  steps:
  - task: AzureRmWebAppDeployment@4
    inputs:
      azureSubscription: '<Prod stage Azure service connection>'
      WebAppName: '<name of prod stage web app>'
      enableXmlVariableSubstitution: true

YAML-Pipelines sind in TFS nicht verfügbar.

Bedingt Bereitstellung

Sie können auswählen, dass nur bestimmte Builds in ihrer Azure-Web-App bereitgestellt werden.

Um dies in YAML zu erreichen, können Sie eine der folgenden Methoden verwenden:

  • Isolieren Sie die Bereitstellungs Schritte in einem separaten Auftrag, und fügen Sie dem Auftrag eine Bedingung hinzu.
  • Fügen Sie dem-Schritt eine Bedingung hinzu.

Im folgenden Beispiel wird gezeigt, wie Schritt Bedingungen verwendet werden, um nur Builds bereitzustellen, die aus der Main-Verzweigung stammen:

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

Weitere Informationen zu Bedingungen finden Sie unter Angeben von Bedingungen.

YAML-Pipelines sind in TFS nicht verfügbar.

Bereitstellung in einer Azure Government Cloud oder in Azure Stack

Erstellen Sie eine passende Dienst Verbindung:

Bereitstellungs Mechanismen

Die vorherigen Beispiele basieren auf der integrierten Azure- Web-App-Aufgabe, die eine vereinfachte Integration in Azure ermöglicht.

Wenn Sie einen Windows-Agent verwenden, verwendet diese Aufgabe Web deploy-Technologie, um mit der Azure-Web-App zu interagieren. Web deploy bietet verschiedene praktische Bereitstellungs Optionen, z. b. das Umbenennen gesperrter Dateien und das Ausschließen von Dateien aus dem Ordner "App_Data"

Wenn Sie den Linux-Agent verwenden, stützt sich der Task auf die Kudu-Rest-APIs.

Ein Wert, der vor der Bereitstellung überprüft werden muss, ist die Liste der Azure App Service Zugriffs Einschränkungen Diese Liste kann IP-Adressen oder Azure-Virtual Network Subnetze enthalten. Wenn mindestens ein Eintrag vorhanden ist, enthält die Liste am Ende einen impliziten Eintrag vom Typ „Alle ablehnen“. Informationen zum Ändern der Zugriffs Einschränkungs Regeln für Ihre App finden Sie unter Hinzufügen und Bearbeiten von Zugriffs Einschränkungs Regeln in Azure-Portal. Sie können auch den Zugriff auf die Website zur Quell Code Verwaltung ändern bzw. einschränken.

Der Task "Azure App Service verwalten " ist eine weitere Aufgabe, die für die Bereitstellung nützlich ist. Sie können diese Aufgabe verwenden, um die Web-App vor oder nach der Bereitstellung zu starten, zu starten oder neu zu starten. Mit diesem Task können Sie auch Slots austauschen, Website Erweiterungen installieren oder die Überwachung der Web-App aktivieren.

Mithilfe der Datei Transformations Aufgabe können Sie Datei Transformationen und Variablen Ersetzungen auf alle Konfigurations-und Parameterdateien anwenden.

Wenn die integrierten Aufgaben Ihren Anforderungen nicht entsprechen, können Sie andere Methoden zum Erstellen eines Skripts für die Bereitstellung verwenden. Zeigen Sie die YAML-Code Ausschnitte in den folgenden Aufgaben für einige Beispiele an: