Teilen über


Bereitstellen in Azure App Service mithilfe von GitHub-Aktionen

Verwenden Sie GitHub-Aktionen , um Ihren Workflow zu automatisieren und über GitHub auf Azure App Service bereitzustellen.

Voraussetzungen

Einrichten der Bereitstellung von GitHub-Aktionen beim Erstellen einer App

Die Bereitstellung von GitHub Actions ist in den Standardprozess Web-App erstellen integriert. Stellen Sie fortlaufende Bereitstellung auf Aktiviert in der Bereitstellung-Registerkarte ein und konfigurieren Sie Ihre ausgewählte Organisation, das Repository und den Branch.

Screenshot, der zeigt, wie Sie die Bereitstellung von GitHub-Aktionen auf der Registerkarte

Wenn Sie eine kontinuierliche Bereitstellung aktivieren, wählt der Create Web App-Prozess automatisch die Authentifizierungsmethode basierend auf der Standardauthentifizierungsauswahl aus und konfiguriert Ihre App und Ihr GitHub-Repository entsprechend:

Auswahl der Standardauthentifizierung Authentifizierungsmethode
Disable Vom Benutzer zugewiesene Identität (OpenID Connect) (empfohlen)
Aktivieren Standardauthentifizierung

Hinweis

Wenn Sie eine App erstellen, erhalten Sie möglicherweise eine Fehlermeldung, die besagt, dass Ihr Azure-Konto nicht über bestimmte Berechtigungen verfügt. Ihr Konto benötigt möglicherweise die erforderlichen Berechtigungen zum Erstellen und Konfigurieren der benutzerseitig zugewiesenen Identität. Eine Alternative finden Sie im folgenden Abschnitt.

Einrichten der Bereitstellung von GitHub-Aktionen über das Bereitstellungscenter

Für eine vorhandene App können Sie schnell mit GitHub-Aktionen beginnen, indem Sie das Deployment Center in App Service verwenden. Diese turnkey-Methode generiert eine GitHub Actions-Workflowdatei basierend auf Ihrem Anwendungsstapel und führt einen Commit in Ihr GitHub-Repository durch.

Mithilfe des Bereitstellungscenters können Sie auch die sicherere OpenID Connect-Authentifizierung mit einer vom Benutzer zugewiesenen Identität problemlos konfigurieren. Weitere Informationen finden Sie im Abschnitt zur Option für die benutzerseitig zugewiesene Identität.

Wenn Ihr Azure-Konto über die erforderlichen Berechtigungen verfügt, können Sie eine benutzerseitig zugewiesene Identität erstellen. Andernfalls können Sie eine vorhandene, benutzerseitig zugewiesene verwaltete Identität im Dropdownmenü Identität auswählen. Sie können mit Ihrem Azure-Administrator eine benutzerseitig zugewiesene verwaltete Identität mit der Rolle Website-Mitwirkender erstellen.

Weitere Informationen finden Sie unter Continuous Deployment in Azure App Service.

Manuelles Einrichten eines GitHub-Aktionsworkflows

Sie können einen Workflow bereitstellen, ohne das Deployment Center zu verwenden. Führen Sie die folgenden drei Schritte aus:

  1. Generieren Sie Bereitstellungsanmeldeinformationen.
  2. Konfigurieren Sie den geheimen GitHub-Schlüssel.
  3. Fügen Sie die Workflowdatei zu Ihrem GitHub-Repository hinzu.

Generieren von Anmeldeinformationen für die Bereitstellung

Es wird empfohlen, OpenID Connect zum Authentifizieren mit Azure App Service für GitHub-Aktionen zu verwenden. Diese Authentifizierungsmethode verwendet kurzlebige Token. Einrichten von OpenID Connect mit GitHub Actions ist komplexer, bietet jedoch mehr Sicherheit.

Sie können sich auch mit einer benutzerseitig zugewiesenen verwalteten Identität, einem Dienstprinzipal oder einem Veröffentlichungsprofil authentifizieren.

Das folgende Verfahren beschreibt die Schritte zum Erstellen einer Microsoft Entra-Anwendung, eines Dienstprinzipals und von Verbundanmeldeinformationen mithilfe von Azure CLI-Anweisungen. Informationen zum Erstellen einer Microsoft Entra-Anwendung, eines Dienstprinzipals und von Verbundanmeldeinformationen über das Azure-Portal finden Sie unter Verbinden von GitHub und Azure.

  1. Wenn Sie keine bestehende Anwendung besitzen, registrieren Sie eine neue Microsoft Entra-Anwendung und einen neuen Dienstprinzipal, die auf Ressourcen zugreifen können. Erstellen Sie die Microsoft Entra-Anwendung.

    az ad app create --display-name myApp
    

    Dieser Befehl gibt eine JSON-Ausgabe mit einem appId-Wert zurück, der client-id entspricht. Speichern Sie den Wert, der später als AZURE_CLIENT_IDGitHub-Geheimnis verwendet werden soll.

    Sie verwenden den objectId-Wert beim Erstellen von Verbundanmeldeinformationen mit Graph-API und verweisen auf diese als APPLICATION-OBJECT-ID.

  2. Erstellen Sie einen Dienstprinzipal. Ersetzen Sie $appID durch appId aus Ihrer JSON-Ausgabe.

    Dieser Befehl generiert eine JSON-Ausgabe mit einer anderen objectId , die im nächsten Schritt verwendet werden kann. Der neue objectId ist der assignee-object-id.

    Kopieren Sie appOwnerTenantId zur späteren Verwendung als GitHub-Geheimnis für AZURE_TENANT_ID.

    az ad sp create --id $appId
    
  3. Erstellen Sie eine neue Rollenzuweisung nach Abonnement und Objekt. Standardmäßig ist die Rollenzuweisung an Ihr Standardabonnement gebunden. Ersetzen Sie $subscriptionId durch Ihre Abonnement-ID, $resourceGroupName durch Ihren Ressourcengruppennamen, $webappName durch Ihren Web-App-Namen und $assigneeObjectId durch die generierte id. Erfahren Sie, wie Sie Azure-Abonnements mit der Azure CLI verwalten.

    az role assignment create --role "Website Contributor" --subscription $subscriptionId --assignee-object-id  $assigneeObjectId --scope /subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Web/sites/$webappName --assignee-principal-type ServicePrincipal
    
  4. Führen Sie den folgenden Befehl aus, um eine neue Verbundidentitäts-Anmeldeinformationen für Ihre Microsoft Entra-App zu erstellen.

    • Ersetzen Sie den Wert APPLICATION-OBJECT-ID mit dem Wert appId, den Sie während der App-Erstellung für Ihre Active Directory-Anwendung generiert haben.

    • Legen Sie einen Wert für CREDENTIAL-NAME fest, um später auf ihn zu verweisen.

    • Legen Sie die subject fest. GitHub legt den Wert in Abhängigkeit von Ihrem Workflow fest:

      • Verwenden Sie für Aufträge in Ihrer GitHub-Aktionsumgebung Folgendes: repo:< Organization/Repository >:environment:< Name >
      • Bei Aufträgen, die nicht an eine Umgebung gebunden sind, fügen Sie den Referenzpfad für den Branch/Tag auf der Grundlage des für die Auslösung des Workflows verwendeten Referenzpfads ein: repo:< Organization/Repository >:ref:< ref path>. Zum Beispiel: repo:n-username/ node_express:ref:refs/heads/my-branch oder repo:n-username/ node_express:ref:refs/tags/my-tag.
      • Verwenden Sie für Workflows, die durch ein Pullanforderungsereignis ausgelöst werden: repo:< Organization/Repository >:pull_request.
    az ad app federated-credential create --id <APPLICATION-OBJECT-ID> --parameters credential.json
    ("credential.json" contains the following content)
    {
        "name": "<CREDENTIAL-NAME>",
        "issuer": "https://token.actions.githubusercontent.com",
        "subject": "repo:organization/repository:ref:refs/heads/main",
        "description": "Testing",
        "audiences": [
            "api://AzureADTokenExchange"
        ]
    }     
    

Konfigurieren des GitHub-Geheimnisses

Sie müssen die Client-ID, Mandanten-ID und Abonnement-ID Ihrer Anwendung für die Azure/login Aktion angeben. Diese Werte können entweder direkt im Workflow bereitgestellt werden oder in GitHub-Geheimnissen gespeichert und darauf in Ihrem Workflow verwiesen werden. Das Speichern der Werte als GitHub-Geheimnisse ist die sicherere Option.

  1. Öffnen Sie Ihr GitHub-Repository, und wechseln Sie zu Einstellungen>Sicherheit>Geheimnisse und Variablen>Aktionen>Neues Repositorygeheimnis.

  2. Erstellen Sie Geheimnisse für AZURE_CLIENT_ID, AZURE_TENANT_ID und AZURE_SUBSCRIPTION_ID. Verwenden Sie diese Werte aus Ihrer Active Directory-Anwendung für Ihre GitHub-Geheimnisse:

    GitHub-Geheimnis Active Directory-Anwendung
    AZURE_CLIENT_ID Anwendungs-ID (Client)
    AZURE_TENANT_ID Verzeichnis-ID (Mandant)
    AZURE_SUBSCRIPTION_ID Abonnement-ID
  3. Wählen Sie "Geheimer Schlüssel hinzufügen" aus, um jeden geheimen Schlüssel zu speichern.

Hinzufügen der Workflowdatei zum GitHub-Repository

Ein Workflow wird durch eine YAML-Datei (.yml) in dem /.github/workflows/-Pfad in Ihrem GitHub-Repository definiert. Diese Definition enthält die verschiedenen Schritte und Parameter, die den Workflow bilden.

Die Workflowdatei weist mindestens die folgenden unterschiedlichen Schritte auf:

  1. Authentifizieren mit App Service mithilfe des von Ihnen erstellten GitHub-Schlüssels.
  2. Erstellen der Web-App.
  3. Bereitstellen der Web-App.

Verwenden Sie die azure/webapps-deploy@v3 Aktion, um Ihren Code in einer App Service-App bereitzustellen. Die Aktion erfordert den Namen Ihrer Web-App in app-name und, je nach Sprachstapel, den Pfad eines *.zip, *.war, *.jar, oder Ordners, der in package bereitgestellt werden soll. Eine vollständige Liste der möglichen Eingaben für die Aktion azure/webapps-deploy@v3 finden Sie in action.yml.

Die folgenden Beispiele zeigen den Teil des Workflows, in dem die Web-App in den verschiedenen unterstützten Sprachen erstellt wird.

Um mit der von Ihnen konfigurierten verwalteten Identität OpenID Connect bereitzustellen, verwenden Sie die Aktion azure/login@v2 mit den Schlüsseln client-id, tenant-id und subscription-id. Verweisen Sie auf die zuvor erstellten GitHub-Geheimnisse.

name: .NET Core

on: [push]

permissions:
      id-token: write
      contents: read

env:
  AZURE_WEBAPP_NAME: my-app    # Set this to your application's name
  AZURE_WEBAPP_PACKAGE_PATH: '.'      # Set this to the path to your web app project, defaults to the repository root
  DOTNET_VERSION: '6.0.x'           # Set this to the dot net version to use

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      # Check out the repo
      - uses: actions/checkout@main
      - uses: azure/login@v2
        with:
          client-id: ${{ secrets.AZURE_CLIENT_ID }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID }}
          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}

      
      # Setup .NET Core SDK
      - name: Setup .NET Core
        uses: actions/setup-dotnet@v3
        with:
          dotnet-version: ${{ env.DOTNET_VERSION }} 
      
      # Run dotnet build and publish
      - name: dotnet build and publish
        run: |
          dotnet restore
          dotnet build --configuration Release
          dotnet publish -c Release --property:PublishDir='${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/myapp' 
          
      # Deploy to Azure Web apps
      - name: 'Run Azure webapp deploy action using publish profile credentials'
        uses: azure/webapps-deploy@v3
        with: 
          app-name: ${{ env.AZURE_WEBAPP_NAME }} # Replace with your app name
          package: '${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/myapp'
      
      - name: logout
        run: |
          az logout

Häufig gestellte Fragen

Wie kann ich eine WAR-Datei über das Maven-Plug-In bereitstellen?

Wenn Sie Ihr Java Tomcat-Projekt mit dem Maven-Plug-In konfiguriert haben, können Sie es auch über dieses Plug-In für Azure App Service bereitstellen. Wenn Sie die GitHub-Aktion der Azure CLI verwenden, werden Ihre Azure-Anmeldeinformationen verwendet.

    - name: Azure CLI script file
      uses: azure/cli@v2
      with:
        inlineScript: |
          mvn package azure-webapp:deploy

Weitere Informationen zur Verwendung und Konfiguration des Maven-Plug-Ins finden Sie im Maven-Plug-In-Wiki für Azure App Service.

Wie kann ich eine WAR-Datei über die Azure CLI bereitstellen?

Wenn Sie die Azure CLI für die Bereitstellung in App Service verwenden möchten, können Sie die GitHub-Aktion für die Azure CLI verwenden.

- name: Azure CLI script
  uses: azure/cli@v2
  with:
    inlineScript: |
      az webapp deploy --src-path '${{ github.workspace }}/target/yourpackage.war' --name ${{ env.AZURE_WEBAPP_NAME }} --resource-group ${{ env.RESOURCE_GROUP }}  --async true --type war

Weitere Informationen zur Verwendung und Konfiguration der GitHub-Aktion für die Azure CLI finden Sie in der Azure CLI-GitHub-Aktion.

Weitere Informationen zum az webapp deploy Befehl, einschließlich der Verwendung des Befehls und der Parameterdetails, finden Sie in az webapp deploy der Dokumentation.

Wie stelle ich eine Startdatei bereit?

Verwenden Sie die GitHub-Aktion für die Azure CLI. Zum Beispiel:

- name: Deploy startup script
  uses: azure/cli@v2
  with:
    inlineScript: |
      az webapp deploy --src-path ${{ github.workspace }}/src/main/azure/createPasswordlessDataSource.sh --name ${{ env.AZURE_WEBAPP_NAME }} --resource-group ${{ env.RESOURCE_GROUP }} --type startup --track-status false

Wie kann ich auf einen Container deployen?

Mit der Azure Web Deploy-Aktion können Sie Ihren Workflow automatisieren, um benutzerdefinierte Container mithilfe von GitHub-Aktionen in App Service bereitzustellen. Weitere Informationen finden Sie unter Bereitstellung in einem Container.

Wie stelle ich einen Slot für die Bereitstellung bereit?

Sie können einen Bereitstellungsslot anstelle des Produktionsslots bereitstellen, indem Sie den Parameter slot-name in der azure/webapps-deploy@v3Aktion verwenden. Um einen Slot bereitzustellen, fügen Sie den Parameter slot-name zum Bereitstellungsschritt in Ihrem Workflow hinzu:

- name: Deploy to Azure Web App
  uses: azure/webapps-deploy@v3
  with:
    app-name: 'my-app-name'
    slot-name: 'staging'  # Deploy to the 'staging' slot instead of production
    package: './output'

Hinweis

Wenn Sie OpenID Connect oder eine Dienstprinzipal-Authentifizierung verwenden, stellen Sie sicher, dass die Identität sowohl für die App als auch für den Bereitstellungs-Slot die Rolle Mitwirkender hat. Für die Profilauthentifizierung, laden Sie das Veröffentlichungsprofil für den spezifischen Slot aus dem Azure-Portal herunter (Bereitstellung>Bereitstellungsplätze> Slot auswählen >Veröffentlichungsprofil herunterladen).

Wie aktualisiere ich die Tomcat-Konfiguration nach der Bereitstellung?

Wenn Sie eine Ihrer Web-Apps-Einstellungen nach der Bereitstellung aktualisieren möchten, können Sie die App Service-Einstellungsaktion verwenden.

    - uses: azure/appservice-settings@v1
      with:
        app-name: 'my-app'
        slot-name: 'staging'  # Optional and needed only if the settings have to be configured on the specific deployment slot
        app-settings-json: '[{ "name": "CATALINA_OPTS", "value": "-Dfoo=bar" }]' 
        connection-strings-json: '${{ secrets.CONNECTION_STRINGS }}'
        general-settings-json: '{"alwaysOn": "false", "webSocketsEnabled": "true"}' #'General configuration settings as Key Value pairs'
      id: settings

Weitere Informationen zur Verwendung und Konfiguration dieser Aktion finden Sie im App Service-Einstellungsrepository .

Sehen Sie sich die folgenden Verweise auf Azure GitHub-Aktionen und -Workflows an: