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.
Importante
I progetti di Power BI Desktop sono attualmente in anteprima.
fabric-cicd è una libreria Python sviluppata da Microsoft che fornisce un metodo code-first per gli sviluppatori di Fabric per distribuire elementi di Fabric dal controllo del codice alle aree di lavoro usando il formato di definizione del codice, ad esempio modelli semantici e report usando il formato di file PBIP.
In questo articolo vengono illustrate le operazioni seguenti:
- Distribuire manualmente i file PBIP dal computer locale
- Parametrizzare i file PBIP per configurazioni specifiche dell'ambiente
- Automatizzare le distribuzioni mirando a workspace basati su branch utilizzando Azure DevOps o GitHub Actions
Altre informazioni sul formato PBIP nei progetti Power BI Desktop (PBIP) e panoramica dell'integrazione git di Fabric.
Perché fabric-cicd per la distribuzione PBIP?
fabric-cicd è progettato specificamente per il deployment di artefatti di Fabric gestiti tramite controllo del codice sorgente e offre diversi vantaggi:
- Usa le API REST native di Fabric : basate sulle API ufficiali di Microsoft Fabric, garantendo la compatibilità e il supporto a lungo termine
- Python-native - Integrazione facile con flussi di lavoro DevOps moderni basati su Python
- Parametrizzazione: supporto predefinito per configurazioni specifiche dell'ambiente (ID area di lavoro, origini dati, stringhe di connessione)
- Facile da sviluppatore: semplici script Python che possono essere eseguiti in locale o in pipeline CI/CD
- Controllo di distribuzione flessibile: distribuire solo tipi di elementi specifici (ad esempio, modelli semantici senza report o modelli semantici con o senza cache dei dati) e garantire configurazioni coerenti come pagine o parametri predefiniti senza intervento manuale
- Pulizia degli orfani: rimuove automaticamente gli elementi dallo spazio di lavoro che non esistono più nel controllo del codice sorgente
- Autenticazione affidabile: usa Azure Identity SDK con più opzioni di autenticazione
Annotazioni
Per la documentazione completa, vedere la documentazione di fabric-cicd.
Prerequisiti
Prima di iniziare, assicurarsi di disporre di:
- Python (da 3.9 a 3.12)
- Un progetto di Power BI Desktop salvato in formato PBIP
- Accesso a un'area di lavoro di Microsoft Fabric con ruolo Collaboratore
Per le distribuzioni automatizzate, è anche necessario:
- Un'entità del servizio con almeno il ruolo di collaboratore negli spazi di lavoro Fabric di destinazione
- Accesso ad Azure DevOps o GitHub Actions
- I tuoi file PBIP nel sistema di controllo del codice sorgente (Git, Azure DevOps o GitHub)
Avvio rapido
Questa guida introduttiva illustra come distribuire un progetto PBIP dal computer locale a uno spazio di lavoro Fabric.
1. Installare fabric-cicd
Aprire il terminale e installare fabric-cicd:
pip install fabric-cicd
2. Preparare il progetto PBIP
Assicurarsi che il progetto PBIP includa i file necessari. Struttura di progetto PBIP tipica:
my-powerbi-project/
├── SalesAnalytics.Report/
│ ├── definition.pbir
│ └── definition/
│ └── pages/
├── SalesAnalytics.SemanticModel/
│ ├── definition.pbism
│ └── definition/
│ ├── model.tmdl
│ ├── tables/
│ └── ...
└── SalesAnalytics.pbip
Per informazioni dettagliate sui file e i formati necessari, vedere Cartella del report del progetto di Power BI Desktop e cartella del modello semantico del progetto di Power BI Desktop.
Suggerimento
Per creare un progetto PBIP, aprire il file PBIX in Power BI Desktop e salvarlo usando File >, Salva con nome > Power BI Project (.pbip). Per altri dettagli, vedere Progetti di Power BI Desktop .
3. Creare uno script di distribuzione
Creare un deploy.py file nella directory del progetto:
import argparse
import sys
from azure.identity import InteractiveBrowserCredential, AzureCliCredential
from fabric_cicd import FabricWorkspace, publish_all_items
parser = argparse.ArgumentParser(description="Deploy PBIP to Fabric")
parser.add_argument("--workspace_id", type=str, required=True, help="Target workspace ID")
parser.add_argument("--environment", type=str, default="dev", help="Environment name")
args = parser.parse_args()
# Use AzureCliCredential in CI/CD, fall back to InteractiveBrowserCredential for local
try:
credential = AzureCliCredential()
except Exception:
credential = InteractiveBrowserCredential()
workspace_params = {
"workspace_id": args.workspace_id,
"environment": args.environment,
"repository_directory": ".",
"item_type_in_scope": ["SemanticModel", "Report"],
"token_credential": credential,
}
target_workspace = FabricWorkspace(**workspace_params)
publish_all_items(target_workspace)
4. Dispiegazione
Eseguire lo script di distribuzione con l'ID dell'area di lavoro:
python deploy.py --workspace_id "11111111-1111-1111-1111-111111111111"
Viene aperto il browser per l'autenticazione. Dopo l'accesso, fabric-cicd distribuisce i file PBIP nell'area di lavoro di destinazione. Vengono visualizzati messaggi di stato come:
[info] Publishing SemanticModel 'SalesAnalytics'
Operation in progress. Checking again in 1 second (Attempt 1)...
Published
[info] Publishing Report 'SalesAnalytics'
Published
La distribuzione richiede in genere 20-30 secondi a seconda delle dimensioni del modello semantico.
Annotazioni
La prima volta che si distribuisce un modello semantico con origini dati, è necessario configurare manualmente le credenziali dell'origine dati nel portale di Fabric. Recarsi a Impostazioni dell'area di lavoro > modello semantico > Credenziali origine dati >. Le distribuzioni successive riutilizzano le credenziali salvate.
Parametrizzazione specifica dell'ambiente
Una delle funzionalità più potenti di fabric-cicd è la possibilità di parametrizzare i file PBIP per ambienti diversi. Questo è essenziale quando i modelli semantici fanno riferimento a risorse specifiche dell'ambiente, ad esempio ID area di lavoro, ID lakehouse o stringhe di connessione.
Esempio: Parametrizzare l'area di lavoro e gli ID lakehouse
Creare un parameter.yml file nella radice del progetto per definire valori specifici dell'ambiente:
find_replace:
# Replace workspace ID for DirectLake connection
- find_value: "11111111-1111-1111-1111-111111111111"
replace_value:
dev: "11111111-1111-1111-1111-111111111111" # Dev workspace
prod: "22222222-2222-2222-2222-222222222222" # Prod workspace
# Replace lakehouse ID for DirectLake semantic model
- find_value: "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
replace_value:
dev: "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" # Dev lakehouse
prod: "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb" # Prod lakehouse
Quando si esegue python deploy.py --workspace_id "11111111-1111-1111-1111-111111111111" --environment dev, fabric-cicd lo fa automaticamente:
- Legge il file parameter.yml
- Trova tutte le istanze di
find_valuenei file di definizione PBIP. - Li sostituisce con i corrispondenti specifici per l'ambiente
replace_value - Distribuisce le definizioni modificate nell'area di lavoro di destinazione
Automatizzare la distribuzione
È possibile automatizzare l'esecuzione delle distribuzioni PBIP ogni volta che il codice viene unito in rami specifici nel repository. L'automazione segue questa logica:
- Una pipeline o un flusso di lavoro si attiva quando viene eseguito il push del codice in un ramo configurato (ad esempio,
devomain) - Il nome del ramo determina l'ambiente di destinazione e l'ID dell'area di lavoro
- Lo script di distribuzione viene eseguito automaticamente con i parametri appropriati
- Gli artefatti PBIP vengono distribuiti nell'area di lavoro corretta per tale ambiente
Questa sezione illustra i passaggi di configurazione comuni sia per Azure DevOps che per GitHub Actions, seguiti da istruzioni di configurazione specifiche della piattaforma.
Configurazione
Prima di configurare la piattaforma CI/CD, completare questi passaggi di configurazione comuni:
1. Creare un'entità servizio
Creare un'entità servizio in Azure AD con ruolo di Contributor o di Administrator sulle aree di lavoro di Fabric.
2. Aggiungere un'entità servizio alle aree di lavoro di Fabric
- Aprire il portale di Fabric e passare a ogni area di lavoro di destinazione (sviluppo, produzione)
- Vai a Impostazioni dell'area di lavoro > Gestione accesso
- Aggiungere il principale del servizio con il ruolo di Collaboratore o Amministratore
Annotazioni
Le entità servizio devono essere abilitate a livello di tenant per usare le Fabric API. Per ulteriori informazioni, vedere I principali di servizio possono chiamare le API pubbliche di Fabric.
3. Configurare i branch nel tuo repository
Creare i rami che verranno usati per l'automazione. Per gli esempi in questo articolo:
- Creare un branch
devper le distribuzioni nell'ambiente di sviluppo - Creare un
mainramo per le distribuzioni dell'ambiente di produzione
È possibile personalizzare i nomi dei rami e aggiungere altri ambienti modificando i mapping delle aree di lavoro nei file YAML.
Azure DevOps
Automatizzare le distribuzioni PBIP con Azure Pipelines. Quando viene eseguito il push del codice in rami configurati, la pipeline viene distribuita automaticamente nell'area di lavoro corrispondente.
Crea azure-pipelines.yml nella radice del repository:
trigger:
branches:
include:
- dev
- main
variables:
- name: workspace_ids
value: |
{
"dev": "11111111-1111-1111-1111-111111111111",
"main": "22222222-2222-2222-2222-222222222222"
}
- name: environments
value: |
{
"dev": "dev",
"main": "prod"
}
stages:
- stage: Deploy
jobs:
- job: DeployPBIP
pool:
vmImage: 'windows-latest'
steps:
- checkout: self
- task: UsePythonVersion@0
inputs:
versionSpec: '3.12'
addToPath: true
- task: AzureCLI@2
displayName: 'Deploy PBIP to Fabric'
inputs:
azureSubscription: 'your-azure-service-connection'
scriptType: 'ps'
scriptLocation: 'inlineScript'
inlineScript: |
cd "$(Build.SourcesDirectory)"
pip install fabric-cicd
$branch_ref = $env:BUILD_SOURCEBRANCH
$branch_name = $branch_ref -replace '^refs/heads/', ''
$workspace_ids = '$(workspace_ids)' | ConvertFrom-Json
$environments = '$(environments)' | ConvertFrom-Json
$workspace_id = $workspace_ids.$branch_name
$environment = $environments.$branch_name
python -u deploy.py --workspace_id "$workspace_id" --environment "$environment"
if ($LASTEXITCODE -ne 0) {
Write-Error "Deployment failed with exit code: $LASTEXITCODE"
exit $LASTEXITCODE
}
Configurare Azure DevOps
-
Creare una connessione al servizio di Azure nelle impostazioni del progetto Azure DevOps:
- Vai a Impostazioni progetto > Connessioni al servizio
- Creare una nuova connessione al servizio Azure Resource Manager usando le credenziali dell'entità servizio
- Per istruzioni dettagliate, vedere Connettersi a Microsoft Azure
- Aggiornare il
azureSubscriptionvalore in YAML in modo che corrisponda al nome della connessione al servizio
-
Aggiornare gli ID dell'area di lavoro in YAML:
- Modificare la variabile
workspace_idsin azure-pipelines.yml - Imposta gli ID dell'area di lavoro di sviluppo e produzione
- Effettuare il commit e il push delle modifiche sul repository
- Modificare la variabile
-
Creare la pipeline:
- Passare a Pipeline > nuova pipeline
- Seleziona il tuo repository e scegli "File YAML esistente di Azure Pipelines"
- Seleziona azure-pipelines.yml
- Per istruzioni dettagliate, vedere Creare la prima pipeline
- Salva ed esegui la pipeline per distribuire il PBIP su Fabric
GitHub Actions
Automatizzare le distribuzioni PBIP con GitHub Actions. Quando viene eseguito il push del codice in rami configurati, il flusso di lavoro viene distribuito automaticamente nell'area di lavoro corrispondente.
Crea .github/workflows/deploy.yml nel repository:
name: Deploy PBIP to Fabric
on:
push:
branches: [dev, main]
workflow_dispatch:
jobs:
deploy:
runs-on: windows-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: '3.12'
- name: Set workspace variables
id: workspace
shell: pwsh
run: |
$branch_name = "${{ github.ref_name }}"
$workspace_ids = @{
"dev" = "11111111-1111-1111-1111-111111111111"
"main" = "22222222-2222-2222-2222-222222222222"
}
$environments = @{
"dev" = "dev"
"main" = "prod"
}
$workspace_id = $workspace_ids[$branch_name]
$environment = $environments[$branch_name]
echo "workspace_id=$workspace_id" >> $env:GITHUB_OUTPUT
echo "environment=$environment" >> $env:GITHUB_OUTPUT
- name: Azure Login
uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: Deploy PBIP to Fabric
shell: pwsh
run: |
pip install fabric-cicd
python -u deploy.py --workspace_id "${{ steps.workspace.outputs.workspace_id }}" --environment "${{ steps.workspace.outputs.environment }}"
if ($LASTEXITCODE -ne 0) {
Write-Error "Deployment failed with exit code: $LASTEXITCODE"
exit $LASTEXITCODE
}
Configurare GitHub Actions
Creare il segreto delle credenziali di Azure:
- Ottieni le credenziali del principale del servizio in formato JSON:
{ "clientId": "<service-principal-client-id>", "clientSecret": "<service-principal-secret>", "subscriptionId": "<azure-subscription-id>", "tenantId": "<azure-tenant-id>" } - Passare al repository GitHub Impostazioni > segreti e variabili > Azioni
- Aggiungere
AZURE_CREDENTIALScon il JSON sopra menzionato
- Ottieni le credenziali del principale del servizio in formato JSON:
Aggiornare gli ID dell'area di lavoro nel flusso di lavoro:
- Modificare la
workspace_idstabella hash nella fase "Imposta le variabili dell'area di lavoro" in.github/workflows/deploy.yml - Imposta gli ID dell'area di lavoro di sviluppo e produzione
- Eseguire il commit e il push del flusso di lavoro YAML nel repository
- Modificare la