Distribuire un'app Fabric con GitHub Actions

Automatizzare le distribuzioni di un'app Fabric da un repository GitHub a un'area di lavoro Fabric usando un flusso di lavoro GitHub Actions. Il flusso di lavoro accede a Fabric con un'entità servizio, installa l'interfaccia della riga di comando di Rayfin ed esegue rayfin up per applicare il codice, lo schema del database e il contenuto statico all'area di lavoro di destinazione. Questo articolo illustra come:

  • Preparare un service principal e un'area di lavoro di Fabric per le distribuzioni automatizzate.
  • Configurare i segreti del repository GitHub necessari per il flusso di lavoro.
  • Aggiungere il file del flusso di lavoro di distribuzione al repository.
  • Attiva le distribuzioni automaticamente su main e manualmente con supporto facoltativo per le modifiche distruttive.
  • Riutilizzare lo stesso flusso di lavoro per i rami di funzionalità e le distribuzioni specifiche dell'ambiente.

Prerequisiti

  • Un progetto di app Fabric in un repository di GitHub. Se non ne hai ancora uno, vedi Crea il tuo primo progetto di Fabric Apps e carica il codice dell'applicazione nel repository.
  • Area di lavoro di Fabric in cui un service principal può eseguire la distribuzione. Per la separazione dell'ambiente, vedere Gestire gli ambienti di sviluppo e produzione.
  • Un service principal di Microsoft Entra ID (registrazione dell'app) con un segreto client.
  • Autorizzazione per aggiungere secrets al repository GitHub.

Passaggio 1: Creare un'entità servizio per le distribuzioni

Il flusso di lavoro accede in modo non interattivo, quindi utilizza un service principal anziché un account utente interattivo.

  1. Nel portale Azure registrare una nuova applicazione in Microsoft Entra ID>Registrazioni app.
  2. Registrare l'ID applicazione (client) e l'ID directory (tenant).
  3. In Certificati e segreti creare un nuovo segreto client e copiare il valore. Archiviarlo in modo sicuro: non è possibile visualizzarlo di nuovo in un secondo momento.
  4. Concedi all'entità servizio l'autorizzazione Contributor o superiore nell'area di lavoro Fabric di destinazione, in modo che possa creare e aggiornare l'elemento app di Fabric.

Importante

Le distribuzioni di entità servizio richiedono le impostazioni del tenant di Fabric che consentono alle entità servizio di usare le API di Fabric. Verificare con l'amministratore Fabric che questa opzione sia abilitata.

Passaggio 2: Aggiungere segreti del repository

Nel tuo repository GitHub, vai a Settings>Secrets and variables>Actions e aggiungi i seguenti segreti del repository:

Nome segreto Valore
CLIENT_ID L'ID applicazione (client) dell'entità servizio.
TENANT_ID L'ID della directory (tenant).
CLIENT_SECRET Il valore del segreto del client.
FABRIC_WORKSPACE_NAME Nome dell'area di lavoro Fabric di destinazione, ad esempio my-app-prod).

Passaggio 3: Aggiungere il file del flusso di lavoro

Nel repository creare il file .github/workflows/deploy-to-fabric.yml con il contenuto seguente:

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

Che cosa fa ogni sezione

  • on.push: Esegue automaticamente il flusso di lavoro a ogni push su main.
  • on.workflow_dispatch: aggiunge un pulsante Run workflow nell'interfaccia utente GitHub Actions con una casella di controllo force. L'abilitazione di force passa --force a rayfin up in modo da consentire modifiche distruttive dello schema, ad esempio l'eliminazione di colonne o tabelle. Lascia la casella di controllo non selezionata per distribuzioni sicure e non distruttive.
  • concurrency: garantisce l'esecuzione di una sola distribuzione per ogni ramo alla volta. Se arriva un nuovo push mentre una distribuzione precedente è ancora in esecuzione, la precedente esecuzione viene annullata a favore del commit più recente. Questa impostazione impedisce l'esecuzione di due rayfin up processi nella stessa area di lavoro.
  • env: Passa le credenziali dell'entità servizio e il nome dell'area di lavoro di destinazione nell'attività.
  • Install Rayfin CLI: Installa globalmente la CLI in modo che rayfin sia nel PATH.
  • Login to Fabric with service principal: esegue l'autenticazione usando le variabili di ambiente *.
  • Deploy to Fabric: esegue rayfin up sul tenant e sull'area di lavoro configurati. --yes accetta richieste non distruttive; --force viene aggiunto solo quando l'esecuzione manuale l'ha richiesta.

Passaggio 4: Attivare una distribuzione

È possibile attivare il flusso di lavoro in due modi:

  • Automaticamente: effettuare il push o il merge di un commit nel ramo main.
  • Manualmente: In GitHub, vai a Actions>Deploy to Fabric>Run workflow. Selezionare il ramo da distribuire e, facoltativamente, selezionare Consenti modifiche dello schema distruttive che potrebbero causare la perdita di dati prima di avviare l'esecuzione.

Al termine del flusso di lavoro, il passaggio Deploy in Fabric nel log di esecuzione stampa l'URL dell'app Fabric e l'ID distribuzione.

Considerazioni e limitazioni

  • La concorrenza è per ramo. Il concurrency.group include github.ref, quindi le distribuzioni su rami diversi non si annullano a vicenda. Questo comportamento è intenzionale quando si associano rami ad aree di lavoro diverse.
  • Le modifiche distruttive vengono bloccate per impostazione predefinita. rayfin up rifiuta le operazioni sullo schema che possono causare la perdita di dati, a meno che non venga passato --force. Abilita force per un'esecuzione manuale solo dopo aver esaminato le operazioni pianificate.
  • Le aree di lavoro devono esistere. Il flusso di lavoro non crea aree di lavoro Fabric. Creali nel portale di Fabric e concedi prima all'entità servizio l'accesso.