IT Admin BI Developer Platform Owner โ This section covers CI/CD deployment patterns, Git integration, and step-by-step migration strategies from Synapse, ADF, Power BI Premium, and on-premises systems.
Deployment Patterns
CI/CD, Git integration, and lifecycle management for Fabric artifacts.
For comprehensive CI/CD guidance โ including Git setup, branching strategies, deployment pipeline configuration, automation with REST APIs, and GitHub Actions examples โ see the dedicated CI/CD & Git Integration page.
Development Lifecycle
A well-structured deployment strategy ensures reliability and consistency across environments. Microsoft Fabric supports a full Dev โ Test โ Prod lifecycle with built-in tools.
The Two Building Blocks
Fabric provides two complementary tools for lifecycle management. Understanding each one is key to choosing the right deployment pattern.
๐ Git Integration
Connect your workspace to Azure DevOps or GitHub. Artifacts are serialized into JSON/PBIR definitions in the repo, enabling version control, branching, code review, and collaboration.
- Feature branches for isolated development
- Pull requests for code review
- Auto-sync between workspace โ repo
- Full audit trail of every change
๐ Deployment Pipelines
Fabric's built-in tool for promoting artifacts between stages (up to 10 stages). Compare differences, deploy selectively, and configure rules to parameterize connections per environment.
- Visual diff comparison between stages
- Selective or full deployment
- Deployment rules for environment config
- Backward deployment (rollback support)
Deployment Patterns
How you combine Git and Deployment Pipelines defines your CI/CD pattern. Microsoft documents three primary approaches โ choose based on your branching strategy, team maturity, and governance needs.
Pattern 1: Git-Based Deployments (Gitflow)
All deployments originate from the Git repository. Each stage has a dedicated primary branch (e.g., dev, test, prod) that feeds its workspace. Promotion happens via Pull Requests between branches.
Each stage triggers a Build pipeline (unit tests) and a Release pipeline (syncs content using Fabric Git APIs). Post-deployment APIs handle environment-specific configuration (connections, data ingestion).
Pattern 2: Git + Build Environments (Trunk-Based)
All deployments originate from a single main branch. Each stage has its own build pipeline that uses a build environment to transform configuration (connection IDs, lakehouse IDs, parameters) before deploying to each workspace.
fabric-cicd โ Python library for code-first CI/CD automations (see detailed section below).
Bulk Import Item Definitions API โ Creates and updates items with built-in dependency handling for correct deployment order.
Pattern 3: Fabric Deployment Pipelines
Git is connected only to the Dev workspace. Promotion from Dev โ Test โ Prod happens through Fabric's native deployment pipelines, which can be orchestrated via APIs from Azure DevOps or GitHub Actions.
Even with this approach, you can fully automate using Deployment Pipelines APIs from Azure DevOps or GitHub Actions โ adding automated tests, approval gates, and audit trails.
ISV / Multi-Tenant Pattern
For ISVs building SaaS on Fabric, a variant of Pattern 2 exists where Dev and Test are centralized, but Prod fans out to per-customer workspaces (potentially thousands). Each customer release runs in parallel with unique parameters. See the full ISV pattern โ
Which Pattern Should You Choose?
There's no one-size-fits-all โ many organizations use hybrid approaches. Use these scenarios to guide your decision:
Use Pattern 3 (Deployment Pipelines). Connect Git to your Dev workspace for version control, then use Fabric's built-in pipelines to promote to Test and Prod. Minimal setup, visual diff view, no custom scripts needed.
Use Pattern 2 (Build Environments). A single main branch with build pipelines that transform config per stage gives you full control and repeatability. Implement with fabric-cicd or the Bulk Import API.
Use Pattern 1 (Git-Based). Each environment maps to a branch โ promotion happens via PRs, which fits naturally into your existing review workflow. No Fabric deployment pipelines needed.
Combine Git integration (for development and version control) with Deployment Pipelines (for promotion and rollback). This is the most common hybrid โ use Git for PRs and code review, and Fabric pipelines for the actual stage-to-stage deployment with visual comparison.
| Pattern 1 (Gitflow) | Pattern 2 (Build Envs) | Pattern 3 (Pipelines) | |
|---|---|---|---|
| Source of truth | Git (all stages) | Git (single branch) | Git (dev) + Fabric (promotion) |
| Branching | Multi-branch (Gitflow) | Trunk-based | Single branch typical |
| Config per env | Post-deploy API calls | Build-time scripts transform values | Deployment rules + autobinding |
| Setup effort | Medium | High | Low |
| Fabric UI features | โ No diff view / history | โ No diff view / history | โ Full diff, history, selective deploy |
| Rollback | Git revert + re-deploy | Git revert + re-deploy | Backward deployment in UI |
Implementation: fabric-cicd Python SDK
The fabric-cicd library is Microsoft's open-source Python SDK for automating Fabric workspace deployments. It provides deterministic, code-first deployments that integrate seamlessly with GitHub Actions and Azure DevOps pipelines. Best suited for Pattern 2 but works with any Git-based approach.
Installation
pip install fabric-cicd
Key Capabilities
- Deterministic deployments: Full, predictable workspace deployments every time โ no manual workspace operations needed
- Source-control integration: Deploy directly from Git repository directories (GitHub, Azure DevOps) into target workspaces
- Environment parameterization: Use
parameter.ymlfiles to manage environment-specific values (connection strings, workspace IDs, lakehouse names) - Flexible authentication: Supports all Azure
TokenCredentialmethods โ user identity, service principal, and managed identity - Supported item types: Notebooks, Data Pipelines, Semantic Models, Reports, Lakehouses, Environments, and more
Deployment Example
from fabric_cicd import FabricWorkspace, publish_all_items
from azure.identity import ClientSecretCredential
# Authenticate with service principal
credential = ClientSecretCredential(
tenant_id="your-tenant-id",
client_id="your-client-id",
client_secret="your-client-secret"
)
# Define the target workspace
workspace = FabricWorkspace(
workspace_id="your-workspace-id",
environment="PROD", # Maps to parameter.yml values
repository_directory="./fabric-items", # Local repo directory with item definitions
item_type_in_scope=["Notebook", "DataPipeline", "SemanticModel", "Report"],
credential=credential
)
# Deploy all items
publish_all_items(workspace)
GitHub Actions Integration
name: Deploy to Fabric
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install fabric-cicd
run: pip install fabric-cicd
- name: Deploy to Production
env:
AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }}
AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }}
run: python scripts/deploy.py --env PROD
Environment Parameterization
find_replace:
- find: "your-dev-lakehouse-id"
replace_with:
DEV: "dev-lakehouse-id"
TEST: "test-lakehouse-id"
PROD: "prod-lakehouse-id"
- find: "your-dev-connection"
replace_with:
DEV: "dev-connection-string"
TEST: "test-connection-string"
PROD: "prod-connection-string"
CI/CD Best Practices
- Use separate workspaces per environment (ws-dev, ws-test, ws-prod)
- Use separate capacities for production vs. non-production workloads
- Use service principals (not user accounts) for CI/CD automation โ create a dedicated app registration in Entra ID, grant workspace Contributor access, store credentials as CI/CD secrets
- Apply deployment rules to swap connection strings per environment
- Restrict production workspace access to service principals or limited admins
- Use
parameter.ymlto parameterize environment-specific values so the same codebase deploys to Dev, Test, and Prod - Make small, frequent commits โ easier to merge and less likely to conflict
- Connect different stages to different databases โ never overload production with dev/test queries
Migration Strategies
Moving from existing platforms to Microsoft Fabric with minimal risk.
For a comprehensive guide on migrating from Azure Synapse Analytics โ including the evolution story, Migration Assistant tools, Spark migration phases, data type mapping, and decision frameworks โ see the dedicated Synapse to Fabric Migration page.
Migration Decision Framework
Migration is not one-size-fits-all. Use a phased approach to reduce risk and ensure continuity:
๐ Interactive Migration Path Recommender
Select your current platform to see a step-by-step tailored migration path to Fabric.
Migration Paths
From Azure Synapse Analytics
- Dedicated SQL Pools โ Fabric Warehouse: Migrate T-SQL scripts and stored procedures. Most T-SQL is compatible; review unsupported features (e.g., some system views)
- Serverless SQL Pools โ Fabric Lakehouse: Replace OPENROWSET queries with Lakehouse SQL endpoints
- Synapse Spark โ Fabric Notebooks: PySpark/Scala code largely compatible; update library references and session configs
- Use Shortcuts to connect Fabric to existing ADLS Gen2 storage during transition
From Azure Data Factory (ADF)
- Fabric Data Factory supports most ADF pipeline activities natively
- Use copy activity equivalents and Dataflows Gen2 for transformation
- Some connectors may differ โ validate your source/sink connectors
- Consider running ADF and Fabric in parallel during migration
From Power BI Premium
- Power BI workspaces can be reassigned to Fabric capacity (F64 or higher)
- Existing datasets, reports, and dashboards continue to work unchanged
- Migrate import-mode datasets to Direct Lake for better performance and cost savings
- Legacy P SKUs map to equivalent F SKUs (P1 โ F64, P2 โ F128, P3 โ F256, P4 โ F512, P5 โ F1024)
From On-Premises (SQL Server / SSIS)
- Use Data Factory pipelines with on-premises data gateway for initial data movement
- Migrate SSIS packages to Dataflows Gen2 or Fabric notebooks
- Use Fabric mirroring to replicate SQL Server databases to OneLake in near real-time
- Plan for a hybrid phase where on-prem and Fabric run in parallel
๐ ๏ธ Official Migration Tools & Resources
Select your source platform to see the official Microsoft tools, step-by-step guidance, and current migration support status.
Azure Synapse Analytics
Dedicated SQL pools, Spark pools, Synapse pipelines
Official Tools AvailableAzure Data Factory
ADF pipelines, linked services, data flows
Migration Assistant AvailablePower BI Premium / Fabric Capacity
Legacy P1โP5 (now F64โF2048) with reports, datasets, dashboards
Guided Migration PathOn-Premises SQL / SSIS
SQL Server databases, SSIS packages, SSRS reports
Partial ToolingDatabricks
Spark workspaces, Delta tables, MLflow experiments
Manual MigrationSnowflake
Snowflake warehouses, stages, stored procedures
Mirroring + Manual1. Doing a "big bang" migration โ always migrate incrementally. 2. Ignoring data quality issues in the source โ clean data before or during migration. 3. Not testing performance with production-scale data. 4. Forgetting to migrate security policies and access controls. 5. Underestimating change management โ train your team!
๐ Learn More
Plan First Deployment โCapacity planning, SKU selection, cost optimization, and TCO/ROI calculator have moved to the Capacity Planning page.