Del via


Udrul Power BI-projekter (PBIP) ved hjælp af fabric-cicd

Vigtig

Power BI Desktop-projekter er i øjeblikket en prøveversion.

fabric-cicd er et Python-bibliotek udviklet af Microsoft, som giver en kode-først metode for Fabric-udviklere til at deployere Fabric-elementer fra versionskontrol til arbejdsområder ved hjælp af deres kodedefinitionsformat, såsom semantiske modeller og rapporter med PBIP-filformatet.

I denne artikel lærer du, hvordan du:

  • Udrul PBIP-filer manuelt fra din lokale maskine
  • Parametriser PBIP-filer til miljøspecifikke konfigurationer
  • Automatiser udrulninger med branch-baseret workspace-targeting ved brug af Azure DevOps eller GitHub Actions

Lær mere om PBIP-formatet i Power BI Desktop-projekter (PBIP) og oversigt over Fabric Git-integration.

Hvorfor fabric-cicd til PBIP-implementering?

fabric-cicd er specifikt designet til at implementere kildekodekontrollerede Fabric-artefakter og tilbyder flere fordele:

  • Bruger Fabric native REST API'er - Bygget på officielle Microsoft Fabric API'er, hvilket sikrer kompatibilitet og langvarig understøttelse
  • Python-native - Sømløs integration med moderne Python-baserede DevOps-arbejdsgange
  • Parameterisering: Indbygget understøttelse af miljøspecifikke konfigurationer (arbejdsområde-ID'er, datakilder, forbindelsesstrenge)
  • Udviklervenlige: Simple Python-scripts, der kan køre lokalt eller i CI/CD-pipelines
  • Fleksibel implementeringskontrol: Udrul kun specifikke elementtyper (f.eks. semantiske modeller uden rapporter eller semantiske modeller med eller uden datacache) og sørg for konsistente konfigurationer som standardsider eller parametre uden manuel indgriben
  • Orphan cleanup: Fjerner automatisk elementer fra arbejdsområdet, som ikke længere eksisterer i versionskontrollen
  • Pålidelig autentificering: Bruger Azure Identity SDK med flere autentificeringsmuligheder

Notat

For komplet dokumentation, se fabric-cicd-dokumentationen.

Forudsætninger

Før du begynder, skal du sikre dig, at du har:

  • Python (version 3.9 til 3.12)
  • Et Power BI Desktop-projekt gemt i PBIP-format
  • Adgang til et Microsoft Fabric-arbejdsområde med bidragyderrolle

For automatiserede udrulninger skal du også bruge:

  • En serviceprincipal med mindst bidragyderrollen på mål-Fabric-arbejdsområder
  • Access to Azure DevOps eller GitHub Actions
  • Dine PBIP-filer i versionskontrol (Git, Azure DevOps eller GitHub)

Hurtig start

Denne hurtigstart viser dig, hvordan du deployer et PBIP-projekt fra din lokale maskine til et Fabric-arbejdsområde.

1. Installer fabric-cicd

Åbn din terminal og installer fabric-cicd:

pip install fabric-cicd

2. Forbered dit PBIP-projekt

Sørg for, at dit PBIP-projekt indeholder de nødvendige filer. En typisk PBIP-projektstruktur:

my-powerbi-project/
├── SalesAnalytics.Report/
│   ├── definition.pbir
│   └── definition/
│       └── pages/
├── SalesAnalytics.SemanticModel/
│   ├── definition.pbism
│   └── definition/
│       ├── model.tmdl
│       ├── tables/
│       └── ...
└── SalesAnalytics.pbip

For detaljeret information om nødvendige filer og formater, se Power BI Desktop projektrapportmappen og Power BI Desktop-projektens semantiske modelmappe.

Tips

For at oprette et PBIP-projekt, åbn din PBIX-fil i Power BI Desktop og gem den med > File Save As > Power BI Project (.pbip). Se Power BI Desktop-projekter for flere detaljer.

3. Opret deployment-script

Opret en deploy.py fil i din projektmappe:

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. Udsend

Kør deployment-scriptet med dit workspace-ID:

python deploy.py --workspace_id "11111111-1111-1111-1111-111111111111"

Din browser åbner for autentificering. Efter login deployerer fabric-cicd dine PBIP-filer til målarbejdsområdet. Du ser fremskridtsbeskeder som:

[info] Publishing SemanticModel 'SalesAnalytics'
       Operation in progress. Checking again in 1 second (Attempt 1)...
       Published

[info] Publishing Report 'SalesAnalytics'
       Published

Udrulningen tager typisk 20-30 sekunder afhængigt af størrelsen på din semantiske model.

Notat

Første gang du deployer en semantisk model med datakilder, skal du manuelt konfigurere datakilde-credentials i Fabric-portalen. Gå til workspace > semantic model > Settings > Data source credentials. Efterfølgende udrulninger genbruger de gemte legitimationsoplysninger.

Miljøspecifik parameterisering

En af fabric-cicds mest kraftfulde funktioner er muligheden for at parametrisere dine PBIP-filer til forskellige miljøer. Dette er essentielt, når dine semantiske modeller refererer til miljøspecifikke ressourcer som workspace ID'er, lakehouse-ID'er eller forbindelsesstrenge.

Eksempel: Parametriser arbejdsområde- og lakehouse-ID'er

Opret en parameter.yml fil i din projektrod for at definere miljøspecifikke værdier:

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

Når du kører python deploy.py --workspace_id "11111111-1111-1111-1111-111111111111" --environment dev, fabric-cicd automatisk:

  1. Læser parameter.yml filen
  2. Finder alle instanser af find_value i dine PBIP-definitionsfiler
  3. Erstatter dem med det tilsvarende miljøspecifikke replace_value
  4. Udruler de modificerede definitioner til målarbejdsområdet

Automatiser udrulning

Du kan automatisere PBIP-udrulninger, så de kører, når kode er flettet ind i specifikke branchs i dit repository. Automatiseringen følger denne logik:

  1. En pipeline eller arbejdsgang udløses, når kode sendes til en konfigureret gren (f.eks. dev eller main)
  2. Grennavnet bestemmer målmiljøet og arbejdsområdets ID
  3. Deployeringsscriptet kører automatisk med de relevante parametre
  4. Dine PBIP-artefakter deployeres til det korrekte arbejdsområde for det miljø

Dette afsnit dækker opsætningstrin, der er fælles for både Azure DevOps og GitHub Actions, efterfulgt af platformspecifikke konfigurationsinstruktioner.

Opsæt

Før du konfigurerer din CI/CD-platform, skal du gennemføre disse almindelige opsætningstrin:

1. Opret en serviceprincip

Opret en serviceprincipal i Azure AD med bidragyder eller administratorrolle på dine Fabric-arbejdsområder.

2. Tilføj service principal til Fabric-arbejdsområder

  1. Åbn Fabric-portalen og naviger til hvert målarbejdsområde (udvikler, produktion)
  2. Gå til Workspace Settings > Administrer adgang
  3. Tilføj tjenesteprincipalen med rollen som bidragyder eller administrator

Notat

Service principals skal være aktiveret på lejerniveau for at kunne bruge Fabric API'er. For mere information, se Service principals can call Fabric public APIs.

3. Konfigurér grene i dit repository

Opret de branches, du vil bruge til automatisering. For eksemplerne i denne artikel:

  1. Opret en dev gren til implementering af udviklingsmiljøer
  2. Opret en main gren til udrulninger af produktionsmiljøer

Du kan tilpasse grennavne og tilføje flere miljøer ved at ændre arbejdsområdemappingerne i YAML-filerne.

Azure DevOps

Automatiser PBIP-udrulninger med Azure Pipelines. Når kode sendes til konfigurerede grene, deployeres pipelinen automatisk til det tilsvarende arbejdsområde.

Opret azure-pipelines.yml roden i dit 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
                }

Configure Azure DevOps

  1. Opret en Azure service connection i Azure DevOps projektindstillinger:
    • Gå til Projektindstillinger > Serviceforbindelser
    • Opret en ny Azure Resource Manager-serviceforbindelse ved hjælp af dine service principal-legitimationsoplysninger
    • For detaljerede instruktioner, se Connect to Microsoft Azure
    • Opdater værdien azureSubscription i YAML, så den matcher dit serviceforbindelsesnavn
  2. Opdater workspace-ID'erne i YAML:
    • Rediger variablen workspace_ids i azure-pipelines.yml
    • Sæt dine dev- og prod workspace-ID'er
    • Commit og skub ændringerne til dit repository
  3. Skab pipelinen:
    • Gå til Pipelines > Ny pipeline
    • Vælg dit repository og vælg "Existing Azure Pipelines YAML file"
    • Vælg azure-pipelines.yml
    • For detaljerede instruktioner, se Opret din første pipeline
    • Gem og kør pipelinen for at deploye din PBIP til Fabric

GitHub-handlinger

Automatiser PBIP-udrulninger med GitHub Actions. Når kode sendes til konfigurerede branches, deployeres workflowet automatisk til det tilsvarende arbejdsområde.

Opret .github/workflows/deploy.yml i dit 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
          }

Konfigurér GitHub-handlinger

  1. Opret Azure credentials secret:

    • Få dine servicechef-credentials i JSON-format:
      {
        "clientId": "<service-principal-client-id>",
        "clientSecret": "<service-principal-secret>",
        "subscriptionId": "<azure-subscription-id>",
        "tenantId": "<azure-tenant-id>"
      }
      
    • Gå til GitHub-repository Indstillinger > Hemmeligheder og variabler Handlinger >
    • Tilføj AZURE_CREDENTIALS med JSON'en ovenfor
  2. Opdater arbejdsområde-ID'erne i workflowet:

    • Rediger workspace_ids hashtabellen i trinnet "Sæt workspace-variable" i .github/workflows/deploy.yml
    • Sæt dine dev- og prod workspace-ID'er
    • Commit og push workflow-YAML til dit repository