Een Fabric-app implementeren met GitHub Actions

Automatiseer implementaties van een Fabric-app vanuit een GitHub opslagplaats naar een Fabric werkruimte met behulp van een GitHub Actions werkstroom. De workflow meldt zich bij Fabric aan met een service-principalaccount, installeert de Rayfin CLI en voert rayfin up uit om uw code, databaseschema en statische inhoud toe te passen op de doelwerkruimte. In dit artikel leest u hoe u het volgende kunt doen:

  • Bereid een service-principal en een Fabric werkruimte voor voor geautomatiseerde implementaties.
  • Configureer de GitHub-repositorygeheimen die de workflow nodig heeft.
  • Voeg het werkstroombestand voor de implementatie toe aan uw opslagplaats.
  • Start implementaties automatisch via main en handmatig met optionele ondersteuning voor destructieve wijzigingen.
  • Gebruik dezelfde werkstroom voor functievertakkingen en omgevingsspecifieke implementaties.

Prerequisites

  • Een Fabric-app-project in een GitHub opslagplaats. Als u er nog geen hebt, raadpleegt u Uw eerste Fabric Apps-project maken en uw toepassingscode naar de opslagplaats pushen.
  • Een Fabric-werkruimte waarin de service-principal kan implementeren. Zie Ontwikkel- en prod-omgevingen beheren voor omgevingsscheiding.
  • Een Microsoft Entra ID service-principal (app-registratie) met een clientgeheim.
  • Machtiging voor het toevoegen van secrets aan de GitHub opslagplaats.

Stap 1: Een service-principal maken voor implementaties

De workflow meldt zich aan zonder gebruikersinteractie, dus wordt er een service-principal gebruikt in plaats van een gebruikersaccount voor interactieve aanmelding.

  1. Registreer in de Azure portal een nieuwe toepassing onder Microsoft Entra ID>App-registraties.
  2. Noteer de Applicatie-ID (client) en de Directory-ID (tenant).
  3. Maak onder Certificaten en geheimen een nieuw clientgeheim en kopieer de waarde. Sla het veilig op: u kunt het later niet meer weergeven.
  4. Verleen de service-principal de machtiging Contributor of hoger voor de doel-Fabric-werkruimte, zodat deze het Fabric-app-item kan maken en bijwerken.

Important

Voor implementaties van service-principals zijn Fabric tenantinstellingen vereist waarmee service-principals Fabric API's kunnen gebruiken. Bevestig bij uw Fabric-beheerder dat dit is ingeschakeld.

Stap 2: opslagplaatsgeheimen toevoegen

Ga in uw GitHub opslagplaats naar Settings>Secrets and variables>Actions en voeg de volgende opslagplaatsgeheimen toe:

Geheime naam Value
CLIENT_ID De toepassings-id (client-id) van de service-principal.
TENANT_ID De id van de Directory (tenant).
CLIENT_SECRET De waarde van het clientgeheim.
FABRIC_WORKSPACE_NAME De naam van de doelwerkruimte Fabric (bijvoorbeeld my-app-prod).

Stap 3: Het werkstroombestand toevoegen

Maak in uw opslagplaats het bestand .github/workflows/deploy-to-fabric.yml met de volgende inhoud:

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

Wat elke sectie doet

  • on.push: Voert de werkstroom automatisch uit bij elke push naar main.
  • on.workflow_dispatch: Hiermee voegt u een knop Run-werkstroom toe aan de gebruikersinterface van GitHub Actions met een selectievakje force. Door force in te schakelen wordt --force doorgegeven aan rayfin up, zodat destructieve schemawijzigingen (zoals het verwijderen van kolommen of tabellen) zijn toegestaan. Laat het uitgeschakeld voor veilige, niet-destructieve implementaties.
  • concurrency: Zorgt ervoor dat er per branch slechts één deployment tegelijk wordt uitgevoerd. Als een nieuwe push landt terwijl een vorige implementatie nog steeds wordt uitgevoerd, wordt de oudere uitvoering geannuleerd ten gunste van de nieuwere doorvoer. Met deze instelling voorkomt u dat twee rayfin up taken tegelijk op dezelfde werkruimte worden uitgevoerd.
  • env: geeft de referenties van de service-principal en de naam van de doelwerkruimte door aan de taak.
  • Install Rayfin CLI: installeert de CLI globaal, zodat rayfin op het PATH staat.
  • Login to Fabric with service principal: verifieert met behulp van de omgevingsvariabelen *.
  • Deploy to Fabric: voert rayfin up uit op de geconfigureerde tenant en werkruimte. --yes accepteert niet-destructieve prompts; --force wordt alleen toegevoegd wanneer de handmatige uitvoering dit aanvraagt.

Stap 4: Een implementatie activeren

U kunt de werkstroom op twee manieren activeren:

  • Automatisch: Een commit pushen naar of samenvoegen in de main branch.
  • Manually: Ga in GitHub naar Actions>Deploy to Fabric>Run workflow. Selecteer de branch die u wilt deployen en vink desgewenst Destructieve schemawijzigingen toestaan die kunnen leiden tot gegevensverlies aan voordat de uitvoering begint.

Nadat de werkstroom is voltooid, worden in de stap Deploy naar Fabric stap in het uitvoeringslogboek de URL van de Fabric app en de implementatie-id afgedrukt.

Overwegingen en beperkingen

  • Gelijktijdigheid is per vertakking. De concurrency.group bevat github.ref, zodat implementaties naar verschillende branches elkaar niet annuleren. Dit gedrag is bewust wanneer u branches toewijst aan verschillende werkruimtes.
  • Destructieve wijzigingen worden standaard geblokkeerd. rayfin up weigert schemabewerkingen die gegevens kunnen verliezen, tenzij --force deze worden doorgegeven. Schakel force alleen in voor een handmatige uitvoering wanneer u de geplande bewerkingen hebt beoordeeld.
  • Werkruimten moeten bestaan. De workflow maakt geen Fabric-werkruimten aan. Maak ze in de Fabric-portal en geef de service-principal eerst toegang.