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. Wählen Sie die Seite Übersicht der Funktions-App aus, und wählen Sie dann Veröffentlichungsprofil abrufen aus.

    Herunterladen des Veröffentlichungsprofils

  2. 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 AnbieterGitHub 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

Die folgenden Parameter werden am häufigsten für diese Aktion verwendet:

Parameter Erklärung
app-name (Erforderlich) Der Name Ihrer Funktions-App.
slot-name (Optional) Der Name eines bestimmten Bereitstellungsslots, in dem die Bereitstellung erfolgen soll. Der Slot muss in ihrer Funktions-App bereits vorhanden sein. Wenn er nicht angegeben wird, wird der Code im aktiven Slot bereitgestellt.
publish-profile (Optional) Der Name des GitHub-Geheimnisses, das Ihr Veröffentlichungsprofil enthält.

Die folgenden Parameter werden ebenfalls unterstützt, aber nur in bestimmten Fällen verwendet:

Parameter Erklärung
package (Optional) Legt einen Unterpfad in Ihrem Repository fest, aus dem die Veröffentlichung erfolgen soll. Standardmäßig ist dieser Wert auf . festgelegt, was bedeutet, dass alle Dateien und Ordner im GitHub-Repository bereitgestellt werden.
respect-pom-xml (Optional) 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 (Optional) 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.
scm-do-build-during-deployment (Optional) Gibt an, ob die App Service-Bereitstellungswebsite (Kudu) Vorgänge vor der Bereitstellung ausführt. Die Bereitstellungswebsite für Ihre Funktions-App finden Sie unter https://<APP_NAME>.scm.azurewebsites.net/. Ändern Sie diese Einstellung in true, wenn Sie die Bereitstellungen in Kudu steuern müssen, anstatt die Abhängigkeiten im GitHub Actions-Workflow aufzulösen. Der Standardwert ist false. Weitere Informationen finden Sie in der Einstellung SCM_DO_BUILD_DURING_DEPLOYMENT.
enable-oryx-build (Optional) Gibt an, ob die Kudu-Bereitstellungswebsite Ihre Projektabhängigkeiten mithilfe von Oryx auflöst. Legen Sie den Wert auf true fest, wenn Sie Oryx verwenden möchten, um Ihre Projektabhängigkeiten mithilfe eines Remotebuilds anstelle des GitHub Actions-Workflows aufzulösen. Wenn der Wert true ist, sollten Sie auch scm-do-build-during-deployment auf true festlegen. Der Standardwert ist false.

Überlegungen

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

  • Wenn Sie GitHub Actions verwenden, wird der Code für Ihre Funktions-App mithilfe der Zip-Bereitstellung für Azure Functions bereitgestellt.

  • 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