Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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
maine 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.
- Nel portale Azure registrare una nuova applicazione in Microsoft Entra ID>Registrazioni app.
- Registrare l'ID applicazione (client) e l'ID directory (tenant).
- 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.
- 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 sumain. -
on.workflow_dispatch: aggiunge un pulsante Run workflow nell'interfaccia utente GitHub Actions con una casella di controllo force. L'abilitazione di force passa--forcearayfin upin 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 duerayfin upprocessi 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 cherayfinsia nel PATH. -
Login to Fabric with service principal: esegue l'autenticazione usando le variabili di ambiente*. -
Deploy to Fabric: eseguerayfin upsul tenant e sull'area di lavoro configurati.--yesaccetta richieste non distruttive;--forceviene 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.groupincludegithub.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 uprifiuta 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.