Freigeben über


Continuous Delivery mit GitHub Actions

Sie können einen GitHub Actions-Workflow verwenden, um einen Workflow zum automatischen Erstellen und Bereitstellen von Code in Ihrer Funktions-App in Azure Functions zu definieren.

Eine YAML-Datei, die die Workflowkonfiguration definiert, wird im Pfad /.github/workflows/ in Ihrem Repository beibehalten. Diese Definition enthält die Aktionen und Parameter, aus denen der Workflow besteht. Dies ist für die Entwicklungssprache Ihrer Funktionen spezifisch. Ein GitHub Actions Workflow für Functions führt die folgenden Aufgaben aus, unabhängig von der Sprache:

  1. Einrichten der Umgebung.
  2. Erstellen Sie das Codeprojekt.
  3. Bereitstellen des Pakets in einer Funktions-App in Azure.

Die Azure Functions-Aktion übernimmt die Bereitstellung in einer vorhandenen Funktions-App in Azure.

Sie können eine Workflowkonfigurationsdatei für Ihre Bereitstellung manuell erstellen. Sie können die Datei auch aus einer Reihe sprachspezifischer Vorlagen auf eine der folgenden Arten generieren:

  • Im Azure-Portal
  • Verwenden der Azure CLI
  • Aus Ihrem GitHub-Repository

Wenn Sie Ihre YAML-Datei nicht manuell erstellen möchten, wählen Sie oben im Artikel eine andere Methode aus.

Voraussetzungen

  • Ein Azure-Konto mit einem aktiven Abonnement. Sie können kostenlos ein Konto erstellen.

  • Ein GitHub-Konto. Falls Sie noch nicht über ein Konto verfügen, können Sie sich kostenlos registrieren.

  • Aus einer funktionierenden Funktions-App, die in Azure mit einem GitHub-Repository gehostet wird.

  • Azure CLI bei lokaler Entwicklung. Sie können die Azure CLI auch in Azure Cloud Shell verwenden.

Generieren von Anmeldeinformationen für die Bereitstellung

Da GitHub Actions Ihr Veröffentlichungsprofil verwendet, um während der Bereitstellung auf Ihre Funktions-App zuzugreifen, müssen Sie zuerst Ihr Veröffentlichungsprofil abrufen und es sicher als GitHub-Geheimnis speichern.

Wichtig

Das Veröffentlichungsprofil ist eine wertvolle Anmeldeinformation, die den Zugriff auf Azure-Ressourcen ermöglicht. Stellen Sie sicher, dass Sie sie immer sicher transportieren und speichern. In GitHub darf das Veröffentlichungsprofil nur in GitHub-Geheimnissen gespeichert werden.

Herunterladen des Veröffentlichungsprofils

So laden Sie das Veröffentlichungs Profil Ihrer Funktions-App herunter:

  1. Suchen Sie im Azure-Portal die Seite für Ihre Funktions-App, und erweitern Sie Einstellungen>Konfiguration in der linken Spalte.

  2. Wählen Sie auf der Seite Konfiguration die Registerkarte Allgemeine Einstellungen aus, und stellen Sie sicher, dass die Option Veröffentlichungsanmeldeinformationen für die SCM-Standardauthentifizierung auf Ein eingestellt ist. Wenn diese Einstellung auf Aus eingestellt ist, können Sie keine Veröffentlichungsprofile verwenden. Wählen Sie daher Ein und dann Speichern aus.

  3. Kehren Sie zur Seite Übersicht der Funktions-App zurück, und wählen Sie dann Veröffentlichungsprofil abrufen aus.

    Herunterladen des Veröffentlichungsprofils

  4. Speichern und kopieren Sie den Inhalt der Datei.

Hinzufügen des GitHub-Geheimnisses

  1. Wechseln Sie in GitHub zu Ihrem Repository.

  2. Wechseln Sie zu Einstellungen.

  3. Wählen Sie Secrets and variables > Actions (Geheimnisse und Variablen > Aktionen) aus.

  4. Wählen Sie New repository secret (Neues Repositorygeheimnis) aus.

  5. Fügen Sie ein neues Geheimnis mit dem Namen AZURE_FUNCTIONAPP_PUBLISH_PROFILE hinzu, dessen Wert auf den Inhalt der Veröffentlichungsprofildatei festgelegt ist.

  6. Klicken Sie auf Add secret (Geheimnis hinzufügen).

GitHub kann sich jetzt bei ihrer Funktions-App in Azure authentifizieren.

Erstellen des Workflows anhand einer Vorlage

Die beste Möglichkeit zum manuellen Erstellen einer Workflowkonfiguration besteht darin, mit der offiziell unterstützten Vorlage zu beginnen.

  1. Wählen Sie Windows oder Linux aus, um sicherzustellen, dass Sie die Vorlage für das richtige Betriebssystem erhalten.

    Bereitstellungen für Windows verwenden runs-on: windows-latest.

  2. Kopieren Sie die sprachspezifische Vorlage aus dem Repository für Azure Functions-Aktionen mithilfe des folgenden Links:

  3. Aktualisieren Sie den env.AZURE_FUNCTIONAPP_NAME-Parameter mit dem Namen Ihrer Funktions-App-Ressource in Azure. Möglicherweise müssen Sie optional den Parameter aktualisieren, der die von Ihrer App verwendete Sprachversion festlegt, z. B. DOTNET_VERSION für C#.

  4. Fügen Sie diese neue YAML-Datei im Pfad /.github/workflows/ in Ihrem Repository hinzu.

Erstellen der Workflowkonfiguration im Portal

Wenn Sie das Portal verwenden, um GitHub Actions zu aktivieren, erstellt Functions eine Workflowdatei basierend auf Ihrem Anwendungsstapel und committet sie in Ihr GitHub-Repository im richtigen Verzeichnis.

Das Portal ruft ihr Veröffentlichungsprofil automatisch ab und fügt es den GitHub-Geheimnissen für Ihr Repository hinzu.

Während der Erstellung von Funktions-Apps

Sie können schnell mit GitHub Actions über die Registerkarte „Deployment“ (Bereitstellung) beginnen, wenn Sie eine Funktion im Azure-Portal erstellen. So fügen Sie beim Erstellen einer neuen Funktions-App einen GitHub Actions-Workflow hinzu:

  1. Wählen Sie im Azure-Portal im Flow Funktions-App erstellen die Option Bereitstellung aus.

    Screenshot: Bereitstellungsoption im Functions-Menü.

  2. Aktivieren Sie Continuous Deployment, wenn jedes Codeupdate einen Codepush an das Azure-Portal auslösen soll.

  3. Geben Sie Ihre GitHub-Organisation, Ihr Repository und Ihren Branch ein.

    Screenshot: Details des GitHub-Benutzerkontos.

  4. Schließen Sie die Konfiguration Ihrer Funktions-App ab. Ihr GitHub-Repository enthält jetzt eine neue Workflowdatei in /.github/workflows/.

Für eine vorhandene Funktions-App

So fügen Sie einer vorhandenen Funktions-App einen GitHub Actions-Workflow hinzu:

  1. Navigieren Sie im Azure-Portal zu ihrer Funktions-App, und wählen Sie die Option Bereitstellungscenter aus.

  2. Wählen Sie unter Quelle die Option GitHub aus. Wenn die Standardmeldung Erstellen mit GitHub Actions nicht angezeigt wird, wählen Sie Anbieter GitHub Actions ändern und dann OK aus.

  3. Wenn Sie noch keinen GitHub-Zugriff autorisiert haben, wählen Sie Autorisieren aus. Geben Sie Ihre GitHub-Anmeldeinformationen an, und wählen Sie Anmelden aus. Um ein anderes GitHub-Konto zu autorisieren, wählen Sie Konto ändern aus, und melden Sie sich mit einem anderen Konto an.

  4. Geben Sie Ihre GitHub-Organisation, Ihr Repository und Ihren Branch ein. Zum Bereitstellen mit GitHub Actions benötigen Sie Schreibzugriff auf dieses Repository.

  5. Wählen Sie in den Authentifizierungseinstellungen aus, ob GitHub Actions mit einer benutzerseitig zugewiesenen Identität authentifiziert oder Anmeldeinformationen für die Standardauthentifizierung verwendet werden sollen. Für die Standardauthentifizierung werden die aktuellen Anmeldeinformationen verwendet.

  6. Wählen Sie Vorschau der Datei anzeigen aus, um die Workflowdatei anzuzeigen, die Ihrem GitHub-Repository in github/workflows/ hinzugefügt wird.

  7. Wählen Sie Speichern aus, um die Workflowdatei Ihrem Repository hinzuzufügen.

Hinzufügen der Workflowkonfiguration zu Ihrem Repository

Sie können den Befehl az functionapp deployment github-actions add verwenden, um eine Workflowkonfigurationsdatei aus der richtigen Vorlage für Ihre Funktions-App zu generieren. Die neue YAML-Datei wird dann am richtigen Speicherort (/.github/workflows/) im von Ihnen bereitgestellten GitHub-Repository gespeichert, während die Veröffentlichungsprofildatei für Ihre App den GitHub-Geheimnissen im selben Repository hinzugefügt wird.

  1. Führen Sie diesen Befehl az functionapp aus, und ersetzen Sie die Werte githubUser/githubRepo, MyResourceGroup und MyFunctionapp:

    az functionapp deployment github-actions add --repo "githubUser/githubRepo" -g MyResourceGroup -n MyFunctionapp --login-with-github
    

    Dieser Befehl verwendet eine interaktive Methode, um ein persönliches Zugriffstoken für Ihr GitHub-Konto abzurufen.

  2. In Ihrem Terminal-Fenster sollte in etwa die folgende Meldung angezeigt werden:

    Please navigate to https://github.com/login/device and enter the user code XXXX-XXXX to activate and retrieve your GitHub personal access token.
    
  3. Kopieren Sie den eindeutigen XXXX-XXXX-Code, navigieren Sie zu https://github.com/login/device, und geben Sie den kopierten Code ein. Nachdem Sie Ihren Code eingegeben haben, sollte etwas wie die folgende Meldung angezeigt werden:

    Verified GitHub repo and branch
    Getting workflow template using runtime: java
    Filling workflow template with name: func-app-123, branch: main, version: 8, slot: production, build_path: .
    Adding publish profile to GitHub
    Fetching publish profile with secrets for the app 'func-app-123'
    Creating new workflow file: .github/workflows/master_func-app-123.yml
    
  4. Navigieren Sie zu Ihrem GitHub-Repository, und wählen Sie Aktionen aus. Vergewissern Sie sich, dass Ihr Workflow ausgeführt wurde.

Erstellen der Workflowkonfigurationsdatei

Sie können die GitHub Actions-Workflowkonfigurationsdatei aus den Azure Functions-Vorlagen direkt aus Ihrem GitHub-Repository erstellen.

  1. Wechseln Sie in GitHub zu Ihrem Repository.

  2. Wählen Sie Actions (Aktionen) und New Workflow (Neuer Workflow) aus.

  3. Suchen Sie nach Funktionen.

    Screenshot: Suchen nach GitHub Actions-Funktionsvorlagen.

  4. Suchen Sie in den angezeigten Funktions-App-Workflows, die von Microsoft Azure erstellt wurden, nach dem Workflow, der Ihrer Codesprache entspricht, und wählen Sie Konfigurieren aus.

  5. Aktualisieren Sie in der neu erstellten YAML-Datei den env.AZURE_FUNCTIONAPP_NAME-Parameter mit dem Namen Ihrer Funktions-App-Ressource in Azure. Möglicherweise müssen Sie optional den Parameter aktualisieren, der die von Ihrer App verwendete Sprachversion festlegt, z. B. DOTNET_VERSION für C#.

  6. Vergewissern Sie sich, dass die neue Workflowdatei in /.github/workflows/ gespeichert wird, und wählen Sie Commit changes... (Änderungen committen) aus.

Aktualisieren einer Workflowkonfiguration

Wenn Sie aus irgendeinem Grund eine vorhandene Workflowkonfiguration aktualisieren oder ändern müssen, navigieren Sie einfach zum Speicherort /.github/workflows/ in Ihrem Repository, öffnen die entsprechende YAML-Datei, nehmen alle erforderlichen Änderungen vor und committen dann die Aktualisierungen im Repository.

Beispiel: Workflowkonfigurationsdatei

Im folgenden Vorlagenbeispiel wird Version 1 von functions-action und ein publish profile für die Authentifizierung verwendet. Die Vorlage hängt von der gewählten Sprache und dem Betriebssystem ab, unter dem Ihre Funktions-App bereitgestellt wird:

Wenn Ihre Funktions-App unter Linux ausgeführt wird, wählen Sie Linux aus.

name: Deploy DotNet project to Azure Function App

on:
  [push]

env:
  AZURE_FUNCTIONAPP_NAME: 'your-app-name'   # set this to your function app name on Azure
  AZURE_FUNCTIONAPP_PACKAGE_PATH: '.'       # set this to the path to your function app project, defaults to the repository root
  DOTNET_VERSION: '6.0.x'                   # set this to the dotnet version to use (e.g. '2.1.x', '3.1.x', '5.0.x')

jobs:
  build-and-deploy:
    runs-on: windows-latest
    environment: dev
    steps:
    - name: 'Checkout GitHub Action'
      uses: actions/checkout@v3

    - name: Setup DotNet ${{ env.DOTNET_VERSION }} Environment
      uses: actions/setup-dotnet@v3
      with:
        dotnet-version: ${{ env.DOTNET_VERSION }}

    - name: 'Resolve Project Dependencies Using Dotnet'
      shell: pwsh
      run: |
        pushd './${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}'
        dotnet build --configuration Release --output ./output
        popd

    - name: 'Run Azure Functions Action'
      uses: Azure/functions-action@v1
      id: fa
      with:
        app-name: ${{ env.AZURE_FUNCTIONAPP_NAME }}
        package: '${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}/output'
        publish-profile: ${{ secrets.AZURE_FUNCTIONAPP_PUBLISH_PROFILE }}

Azure Functions-Aktion

Die Azure Functions-Aktion (Azure/azure-functions) definiert, wie Ihr Code für eine vorhandene Funktions-App in Azure oder in einem bestimmten Slot in Ihrer App veröffentlicht wird.

Parameter

Für alle Funktions-App-Pläne sind die folgenden Parameter erforderlich:

Parameter Erklärung
app-name Der Name Ihrer Funktions-App.
package Dies ist der Speicherort in Ihrem Projekt, der veröffentlicht werden soll. Standardmäßig ist dieser Wert auf . festgelegt, was bedeutet, dass alle Dateien und Ordner im GitHub-Repository bereitgestellt werden.

Für den Flex-Verbrauchsplan sind die folgenden Parameter erforderlich:

Parameter Erklärung
sku Legen Sie diesen Parameter beim Authentifizieren mit publish-profile auf flexconsumption fest. Wenn Sie RBAC-Anmeldeinformationen verwenden oder in einem Nicht-Flex-Verbrauchsplan bereitstellen, kann die Aktion den Wert auflösen, sodass der Parameter nicht einbezogen werden muss.
remote-build Legen Sie diesen Parameter auf true fest, um eine Buildaktion aus Kudu zu aktivieren, wenn das Paket in einer Flex-Verbrauchs-App bereitgestellt wird. Der Oryx-Build wird immer während eines Remote-Builds beim Flex-Verbrauch durchgeführt; legen Sie scm-do-build-during-deployment oder enable-oryx-build nicht fest. Dieser Parameter ist standardmäßig auf false festgelegt.

Die folgenden Parameter gelten speziell für die Pläne „Verbrauch“, „Elastic Premium“ und „App Service“ (Dediziert):

Parameter Erklärung
scm-do-build-during-deployment (Optional) Lassen Sie zu, dass die Kudu-Website (z. B. https://<APP_NAME>.scm.azurewebsites.net/) Vorgänge vor der Bereitstellung ausführt, z. B. Remotebuilds. Sie ist standardmäßig auf false festgelegt. Legen Sie diesen Parameter auf true fest, wenn Sie das Bereitstellungsverhalten mithilfe von Kudu steuern möchten, anstatt Abhängigkeiten in Ihrem GitHub-Workflow aufzulösen. Weitere Informationen finden Sie in der Einstellung SCM_DO_BUILD_DURING_DEPLOYMENT.
enable-oryx-build (Optional) Lassen Sie zu, dass die Kudu-Website Ihre Projektabhängigkeiten mit Oryx auflösen kann. Sie ist standardmäßig auf false festgelegt. Wenn Sie Oryx anstelle des GitHub-Workflows für das Auflösen Ihrer Abhängigkeiten verwenden möchten, legen Sie scm-do-build-during-deployment und enable-oryx-build auf true fest.

Optionale Parameter für alle Funktions-App-Pläne:

Parameter Erklärung
slot-name Dies ist der Name des Bereitstellungsslots, für den bereitgestellt werden soll. Dieser Wert ist standardmäßig leer, was bedeutet, dass die GitHub-Aktion für Ihren Produktionsstandort bereitgestellt wird. Wenn diese Einstellung auf einen Nicht-Produktionsslot verweist, stellen Sie sicher, dass der Parameter publish-profile die Anmeldeinformationen für den Slot anstelle des Produktionsstandorts enthält. Wird derzeit nicht für den Flex-Verbrauch unterstützt..
publish-profile Der Name des GitHub-Geheimnisses, das Ihr Veröffentlichungsprofil enthält.
respect-pom-xml Wird nur für Java-Funktionen verwendet. Gibt an, ob es erforderlich ist, dass das Bereitstellungsartefakt Ihrer App aus der Datei „pom.xml“ abgeleitet wird. Beim Bereitstellen von Java-Funktions-Apps sollten Sie diesen Parameter auf true und package auf . festlegen. Standardmäßig ist dieser Parameter auf false festgelegt, was bedeutet, dass der package-Parameter auf den Artefaktspeicherort Ihrer App verweisen muss, z. B. auf ./target/azure-functions/.
respect-funcignore Gibt an, ob GitHub Actions Ihre FUNCIGNORE-Datei berücksichtigt, um darin definierte Dateien und Ordner auszuschließen. Legen Sie diesen Wert auf true fest, wenn Ihr Repository über eine .funcignore-Datei verfügt und Sie diese verwenden möchten, um Pfade und Dateien auszuschließen, z. B. Text-Editor-Konfigurationen, .vscode/ oder eine virtuelle Python-Umgebung (.venv/). Die Standardeinstellung ist false.

Überlegungen

Beachten Sie die folgenden Überlegungen, wenn Sie die Azure Functions-Aktion verwenden:

  • Bei Verwendung von GitHub Actions wird der Code mit OneDeploy für Apps im Flex-Verbrauchsplan und mit der ZIP-Bereitstellung für Apps in den Plänen Verbrauch, Elastic Premium und Dedicated (App Service) bereitgestellt. Eine Ausnahme stellt „Linux-Verbrauch“ dar, bei dem eine externe Paket-URL verwendet wird.

  • Die Anmeldeinformationen, die GitHub für die Verbindung mit Azure für die Bereitstellung benötigt, werden als Geheimnisse in Ihrem GitHub-Repository gespeichert und in der Bereitstellung als secrets.<SECRET_NAME> aufgerufen.

  • Die einfachste Möglichkeit für GitHub Actions, sich bei Azure Functions für die Bereitstellung zu authentifizieren, ist die Verwendung eines Veröffentlichungsprofils. Sie können sich auch mit einem Dienstprinzipal authentifizieren. Weitere Informationen finden Sie in diesem GitHub Actions-Repository.

  • Die Aktionen zum Einrichten der Umgebung und Ausführen eines Builds werden aus den Vorlagen generiert und sind sprachspezifisch.

  • Die Vorlagen verwenden env-Elemente, um Einstellungen zu definieren, die für Ihren Build und Ihre Bereitstellung eindeutig sind.

Nächste Schritte