Bereitstellen einer Fabric-App mit GitHub Actions

Automatisieren Sie Bereitstellungen einer Fabric-App aus einem GitHub Repository in einem Fabric Arbeitsbereich mithilfe eines GitHub Actions-Workflows. Der Workflow meldet sich mit einem Dienstprinzipal bei Fabric an, installiert die Rayfin CLI und führt rayfin up aus, um Ihren Code, das Datenbankschema und statische Inhalte auf den Zielarbeitsbereich anzuwenden. Dieser Artikel zeigt Ihnen, wie das geht:

  • Bereiten Sie einen Serviceprinzipal und einen Fabric-Arbeitsbereich für automatisierte Bereitstellungen vor.
  • Konfigurieren Sie die Geheimnisse des GitHub-Repositorys, die der Workflow benötigt.
  • Fügen Sie die Bereitstellungsworkflowdatei zu Ihrem Repository hinzu.
  • Starten Sie Bereitstellungen automatisch auf main und manuell mit optionaler Unterstützung für destruktive Änderungen.
  • Verwenden Sie denselben Workflow für Featureverzweigungen und umgebungsspezifische Bereitstellungen.

Voraussetzungen

  • Ein Fabric App-Projekt in einem GitHub Repository. Wenn Sie noch kein Projekt haben, lesen Sie Create your first Fabric Apps project, und übertragen Sie Ihren Anwendungscode in das Repository.
  • Ein Fabric-Arbeitsbereich, in dem der Dienstprinzipal bereitstellen kann. Informationen zur Trennung von Umgebungen finden Sie unter Verwalten von Entwicklungs- und Prod-Umgebungen.
  • Ein Microsoft Entra ID-Dienstprinzipal (App-Registrierung) mit einem Clientgeheimnis.
  • Berechtigung zum Hinzufügen von secrets zum GitHub Repository.

Schritt 1: Erstellen eines Dienstprinzipals für Bereitstellungen

Der Workflow meldet sich nicht interaktiv an, sodass er anstelle eines interaktiven Benutzerkontos einen Dienstprinzipal verwendet.

  1. Registrieren Sie im portal Azure eine neue Anwendung unter Microsoft Entra ID>App-Registrierungen.
  2. Notieren Sie die Anwendungs-ID (Client) und die Verzeichnis-ID (Mandant).
  3. Erstellen Sie unter "Zertifikate und Geheime Schlüssel" einen neuen geheimen Clientschlüssel , und kopieren Sie den Wert. Speichern Sie sie sicher: Sie können sie später nicht mehr anzeigen.
  4. Erteilen Sie dem Dienstprinzipal die Berechtigung Contributor oder höher für den Ziel-Fabric-Arbeitsbereich, damit er das Fabric-App-Element erstellen und aktualisieren kann.

Important

Dienstprinzipalbereitstellungen erfordern Fabric Mandanteneinstellungen, mit denen Dienstprinzipale Fabric APIs verwenden können. Bestätigen Sie mit Ihrem Fabric Administrator, dass dies aktiviert ist.

Schritt 2: Hinzufügen geheimer Repositoryschlüssel

Wechseln Sie in Ihrem GitHub-Repository zu Settings>Secrets and variables>Actions und fügen Sie die folgenden Repositoryschlüssel hinzu:

Geheimer Name Value
CLIENT_ID Die Anwendungs-ID (Client-ID) des Dienstprinzipals.
TENANT_ID Die Verzeichnis-ID (Mandant).
CLIENT_SECRET Der Wert des Clientgeheimnisses.
FABRIC_WORKSPACE_NAME Der Name des Zielarbeitsbereichs Fabric (z. B. my-app-prod).

Schritt 3: Hinzufügen der Workflowdatei

Erstellen Sie in Ihrem Repository die Datei .github/workflows/deploy-to-fabric.yml mit dem folgenden Inhalt:

name: Deploy to Fabric

on:
  push:
    branches: [main]
  workflow_dispatch:
    inputs:
      force:
        description: 'Allow destructive schema changes that may result in data loss'
        required: false
        default: false
        type: boolean

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

permissions:
  contents: read

jobs:
  deploy:
    name: Deploy to Fabric
    runs-on: ubuntu-latest
    env:
      CLIENT_ID: ${{ secrets.CLIENT_ID }}
      TENANT_ID: ${{ secrets.TENANT_ID }}
      CLIENT_SECRET: ${{ secrets.CLIENT_SECRET }}
      FABRIC_WORKSPACE_NAME: ${{ secrets.FABRIC_WORKSPACE_NAME }}

    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20'

      - name: Install Rayfin CLI
        run: npm install -g @microsoft/rayfin-cli

      - name: Login to Rayfin with service principal
        run: |
          rayfin login \
            --service-principal \
            -t $TENANT_ID
            -u $CLIENT_ID
            -p CLIENT_SECRET

      - name: Deploy to Fabric
        run: |
          EXTRA_ARGS=""

          if [[ "${{ inputs.force }}" == "true" ]]; then
            EXTRA_ARGS="$EXTRA_ARGS --force"
          fi

          rayfin up \
            --workspace "$FABRIC_WORKSPACE_NAME" \
            --yes \
            $EXTRA_ARGS

Funktionsweise der einzelnen Abschnitte

  • on.push: Führt den Workflow bei jedem Push auf main automatisch aus.
  • on.workflow_dispatch: Fügt eine Schaltfläche Run workflow in der benutzeroberfläche GitHub Actions mit einem Kontrollkästchen force hinzu. Das Aktivieren von force übergibt --force an rayfin up, sodass destruktive Schemaänderungen (z. B. das Löschen von Spalten oder Tabellen) zulässig sind. Lassen Sie das Kontrollkästchen nicht aktiviert für sichere, nicht-destruktive Bereitstellungen.
  • concurrency: Stellt sicher, dass pro Branch jeweils nur eine Bereitstellung gleichzeitig ausgeführt wird. Wenn ein neuer Push eingeht, während ein vorheriges Deployment noch läuft, wird der ältere Lauf zugunsten des neueren Commits abgebrochen. Diese Einstellung verhindert, dass zwei rayfin up Aufträge im selben Arbeitsbereich ausgeführt werden.
  • env: Übergibt die Anmeldeinformationen des Dienstprinzipals und den Namen des Zielarbeitsbereichs an den Job.
  • Install Rayfin CLI: Installiert die CLI global, sodass rayfin im PATH ist.
  • Login to Fabric with service principal: Authentifiziert sich mithilfe der Umgebungsvariablen *.
  • Deploy to Fabric: Führt rayfin up für den konfigurierten Mandanten und Arbeitsbereich aus. --yes akzeptiert nicht destruktive Eingabeaufforderungen; --force wird nur hinzugefügt, wenn die manuelle Ausführung angefordert wurde.

Schritt 4: Auslösen einer Bereitstellung

Sie können den Workflow auf zwei Arten auslösen:

  • Automatisch: Einen Commit in den main Branch pushen oder mergen.
  • Manually: Wechseln Sie in GitHub zu Actions>Deploy to Fabric>Run workflow. Wählen Sie die zu bereitstellende Verzweigung aus, und überprüfen Sie optional die Option "Destruktive Schemaänderungen zulassen", die zu Datenverlusten führen können, bevor Sie die Ausführung starten.

Nach Abschluss des Workflows gibt der Schritt Deploy to Fabric schritt im Ausführungsprotokoll die Fabric App-URL und die Bereitstellungs-ID aus.

Überlegungen und Einschränkungen

  • Die Nebenläufigkeit gilt je Branch. concurrency.group enthält github.ref, sodass sich Bereitstellungen in verschiedenen Branches nicht gegenseitig abbrechen. Dieses Verhalten ist beabsichtigt, wenn Sie Branches verschiedenen Arbeitsbereichen zuordnen.
  • Destruktive Änderungen werden standardmäßig blockiert. rayfin up lehnt Schema-Operationen ab, die zu Datenverlust führen können, es sei denn, --force wird übergeben. Aktivieren Sie force nur bei einem manuellen Lauf, nachdem Sie die geplanten Vorgänge überprüft haben.
  • Arbeitsbereiche müssen vorhanden sein. Der Workflow erstellt keine Fabric-Arbeitsbereiche. Erstellen Sie diese im Fabric-Portal und gewähren Sie dem Dienstprinzipal zunächst Zugriff.