Udrul en Fabric-app med GitHub Actions

Automatiser udrulninger af en Fabric-app fra et GitHub-repository til et Fabric-arbejdsområde ved at bruge en GitHub Actions-arbejdsgang. Workflowet logger ind på Fabric med en serviceprincipal, installerer Rayfin CLI og kører rayfin up for at anvende din kode, databaseskema og statiske indhold på det ønskede arbejdsområde. I denne artikel lærer du, hvordan du kan:

  • Forbered en serviceprincip og et Fabric-arbejdsområde til automatiserede udrulninger.
  • Konfigurer GitHub-repositoriets hemmeligheder, som arbejdsgangen har brug for.
  • Tilføj deploy-workflowfilen til dit repository.
  • Udløs udrulninger automatisk og manuelt main med valgfri understøttelse af destruktive ændringer.
  • Genanvend den samme arbejdsgang til feature branchs og miljøspecifikke deployments.

Forudsætninger

  • Et Fabric-appprojekt i et GitHub-repository. Hvis du ikke har et endnu, så se Create your first Fabric Apps project og skub din applikationskode til repository.
  • Et Fabric-arbejdsområde, som service-principalen kan deploye til. For miljøadskillelse, se Administrer udviklings- og produktionsmiljøer.
  • En Microsoft Entra ID service principal (app-registrering) med en klienthemmelighed.
  • Tilladelse til at tilføje secrets til GitHub-arkivet.

Trin 1: Opret en serviceprincipal til udrulninger

Arbejdsgangen logger ind ikke-interaktivt, så den bruger en serviceprincip i stedet for en interaktiv brugerkonto.

  1. I Azure-portalen registreres en ny ansøgning under Microsoft Entra ID>App registrations.
  2. Indskriv applikations-ID-et (klient-)ID og Directory-(lejer-)ID'et.
  3. Under Certifikater & hemmeligheder oprettes en ny klienthemmelighed og værdien kopieres. Opbevar den sikkert: du kan ikke se den igen senere.
  4. Giv tjenesteprincipalen Contributor eller højere tilladelse til mål-Fabric arbejdsområde, så den kan oprette og opdatere Fabric-app-elementet.

Vigtig

Service principal-udrulninger kræver Fabric-lejerindstillinger, der tillader service principals at bruge Fabric API'er. Bekræft med din Fabric-administrator, at dette er aktiveret.

Trin 2: Tilføj repository-hemmeligheder

I dit GitHub repository går du til Settings>Secrets and variables>Actions og tilføjer følgende repository-hemmeligheder:

Hemmeligt navn Værdi
CLIENT_ID Applikations-ID'et (klient-)ID'et for tjenesteprincipalen.
TENANT_ID Directory (lejer) ID'et.
CLIENT_SECRET Kundens hemmelige værdi.
FABRIC_WORKSPACE_NAME Navnet på målet Fabric arbejdsområde (for eksempel my-app-prod).

Trin 3: Tilføj workflow-filen

Opret filen .github/workflows/deploy-to-fabric.yml med følgende indhold i dit repository:

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

Hvad hver sektion gør

  • on.push: Kører arbejdsgangen automatisk ved hvert push til main.
  • on.workflow_dispatch: Tilføjer en Run workflow-knap i GitHub Actions UI med en force afkrydsningsboks. Muliggøring af force passes --force til rayfin up , så destruktive skemaændringer (såsom at fjerne kolonner eller tabeller) er tilladt. Lad det være ukontrolleret for sikre, ikke-destruktive udsendelser.
  • concurrency: Sikrer kun én udrulning pr. gren ad gangen. Hvis et nyt push lander, mens en tidligere deploy stadig kører, bliver det ældre run annulleret til fordel for det nyere commit. Denne indstilling forhindrer to rayfin up jobs i at køre om hovedet på samme arbejdsplads.
  • env: Sender service principal-legitimationsoplysninger og målarbejdsområdenavn ind i jobbet.
  • Install Rayfin CLI: Installerer CLI globalt, så rayfin den er på PATH.
  • Login to Fabric with service principal: Autentificerer ved hjælp af miljøvariablerne *.
  • Deploy to Fabric: Kører rayfin up mod den konfigurerede lejer og arbejdsområde. --yes accepterer ikke-destruktive prompts; --force tilføjes kun, når den manuelle kørsel kræver det.

Trin 4: Udløs en udrulning

Du kan udløse arbejdsgangen på to måder:

  • Automatisk: Skub eller merge en commit til branchen main .
  • Manuelt: I GitHub gå til Actions>Deploy to Fabric>Kør workflow. Vælg den gren, der skal deployes, og vælg eventuelt Tillad destruktive skemaændringer, der kan resultere i datatab, før du starter kørselen.

Når arbejdsgangen er færdig, udskriver trin Deploy to Fabric i kør-loggen Fabric-appens URL og deployment-ID'et.

Overvejelser og begrænsninger

  • Samtidighed er pr. filial. Det concurrency.group inkluderer github.ref, så udsendelser til forskellige grene ikke annullerer hinanden. Denne adfærd er bevidst, når du mapper grene til forskellige arbejdsområder.
  • Destruktive ændringer blokeres som standard. rayfin up nægter skemaoperationer, der kan miste data, medmindre --force de bliver godkendt. Aktiver kun magtanvendelse ved manuel kørsel, når du har gennemgået de planlagte operationer.
  • Arbejdsområder skal eksistere. Arbejdsgangen skaber ikke Fabric-arbejdsområder. Opret dem i Fabric-portalen og giv service principal adgang først.