แชร์ผ่าน


ปรับใช้โครงการ Power BI (PBIP) โดยใช้ Fabric-cicd

สําคัญ

ขณะนี้โครงการ Power BI Desktop อยู่ในตัวอย่าง

fabric-cicd เป็นไลบรารี Python ที่พัฒนาโดย Microsoft ซึ่งมีวิธีการใช้โค้ดเป็นอันดับแรกสําหรับนักพัฒนา Fabric เพื่อปรับใช้รายการ Fabric จากตัวควบคุมต้นทางไปยังพื้นที่ทํางานโดยใช้รูปแบบคําจํากัดความของโค้ด เช่น แบบจําลองความหมายและรายงานโดยใช้รูปแบบไฟล์ PBIP

ในบทความนี้ คุณจะได้เรียนรู้วิธีการ:

  • ปรับใช้ไฟล์ PBIP ด้วยตนเองจากเครื่องภายในเครื่องของคุณ
  • กําหนดพารามิเตอร์ไฟล์ PBIP สําหรับการกําหนดค่าเฉพาะสภาพแวดล้อม
  • ปรับใช้โดยอัตโนมัติด้วยการกําหนดเป้าหมายพื้นที่ทํางานตามสาขาโดยใช้ Azure DevOps หรือ GitHub Actions

เรียนรู้เพิ่มเติมเกี่ยวกับรูปแบบ PBIP ในโครงการ Power BI Desktop (PBIP) และภาพรวมการรวม Fabric Git

ทําไมต้อง fabric-cicd สําหรับการปรับใช้ PBIP

fabric-cicd ได้รับการออกแบบมาโดยเฉพาะสําหรับการปรับใช้สิ่งประดิษฐ์ Fabric ที่ควบคุมแหล่งที่มาและมีข้อดีหลายประการ:

  • ใช้ REST API ดั้งเดิมของ Fabric - สร้างขึ้นบน Microsoft Fabric API อย่างเป็นทางการ เพื่อให้มั่นใจถึงความเข้ากันได้และการสนับสนุนในระยะยาว
  • Python-native - การผสานรวมกับเวิร์กโฟลว์ DevOps ที่ใช้ Python ที่ทันสมัยได้อย่างราบรื่น
  • การกําหนดพารามิเตอร์: การสนับสนุนในตัวสําหรับการกําหนดค่าเฉพาะสภาพแวดล้อม (รหัสพื้นที่ทํางาน แหล่งข้อมูล สตริงการเชื่อมต่อ)
  • เป็นมิตรกับนักพัฒนา: สคริปต์ Python อย่างง่ายที่สามารถทํางานในเครื่องหรือในไปป์ไลน์ CI/CD
  • การควบคุมการปรับใช้ที่ยืดหยุ่น: ปรับใช้เฉพาะประเภทรายการเฉพาะ (เช่น โมเดลความหมายที่ไม่มีรายงาน หรือโมเดลความหมายที่มีหรือไม่มีแคชข้อมูล) และตรวจสอบการกําหนดค่าที่สอดคล้องกัน เช่น หน้าหรือพารามิเตอร์เริ่มต้นโดยไม่ต้องมีการแทรกแซงด้วยตนเอง
  • การล้างข้อมูลแบบ Orphan: ลบรายการออกจากพื้นที่ทํางานที่ไม่มีอยู่ในตัวควบคุมแหล่งที่มาโดยอัตโนมัติ
  • การรับรองความถูกต้องที่เชื่อถือได้: ใช้ Azure Identity SDK พร้อมตัวเลือกการรับรองความถูกต้องหลายแบบ

Note

สําหรับเอกสารฉบับสมบูรณ์ โปรดดูเอกสารประกอบ fabric-cicd

ข้อกําหนดเบื้องต้น

ก่อนที่คุณจะเริ่มต้น ให้แน่ใจว่าคุณมี:

  • Python (เวอร์ชัน 3.9 ถึง 3.12)
  • โครงการ Power BI Desktop ที่บันทึกในรูปแบบ PBIP
  • การเข้าถึงพื้นที่ทํางาน Microsoft Fabric ที่มีบทบาทผู้สนับสนุน

สําหรับการปรับใช้อัตโนมัติ คุณยังต้องมี:

  • บริการหลักที่มีบทบาทผู้สนับสนุนเป็นอย่างน้อยในพื้นที่ทํางาน Fabric เป้าหมาย
  • การเข้าถึง Azure DevOps หรือ GitHub Actions
  • ไฟล์ PBIP ของคุณในการควบคุมแหล่งที่มา (Git, Azure DevOps หรือ GitHub)

เริ่มต้นใช้งานด่วน

การเริ่มต้นฉบับย่อนี้แสดงวิธีปรับใช้โครงการ PBIP จากเครื่องภายในเครื่องของคุณไปยังพื้นที่ทํางาน Fabric

1. ติดตั้ง fabric-cicd

เปิดเทอร์มินัลของคุณและติดตั้ง fabric-cicd:

pip install fabric-cicd

2. เตรียมโครงการ PBIP ของคุณ

ตรวจสอบให้แน่ใจว่าโครงการ PBIP ของคุณมีไฟล์ที่จําเป็น โครงสร้างโครงการ PBIP ทั่วไป:

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

สําหรับข้อมูลโดยละเอียดเกี่ยวกับไฟล์และรูปแบบที่จําเป็น โปรดดู โฟลเดอร์รายงานโครงการ Power BI Desktop และโฟลเดอร์แบบจําลองความหมายของโครงการ Power BI Desktop

เคล็ดลับ

เมื่อต้องการสร้างโครงการ PBIP ให้เปิดไฟล์ PBIX ของคุณใน Power BI Desktop และบันทึกโดยใช้ไฟล์>บันทึกเป็น>โครงการ Power BI (.pbip) ดู โครงการ Power BI Desktop สําหรับรายละเอียดเพิ่มเติม

3. สร้างสคริปต์การปรับใช้

สร้าง deploy.py ไฟล์ในไดเรกทอรีโปรเจ็กต์ของคุณ:

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. ปรับใช้

เรียกใช้สคริปต์การปรับใช้ด้วยรหัสพื้นที่ทํางานของคุณ:

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

เบราว์เซอร์ของคุณจะเปิดขึ้นเพื่อตรวจสอบสิทธิ์ หลังจากลงชื่อเข้าใช้ fabric-cicd จะปรับใช้ไฟล์ PBIP ของคุณไปยังพื้นที่ทํางานเป้าหมาย คุณจะเห็นข้อความความคืบหน้า เช่น

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

[info] Publishing Report 'SalesAnalytics'
       Published

โดยทั่วไปการปรับใช้จะใช้เวลา 20-30 วินาที ขึ้นอยู่กับขนาดของโมเดลความหมายของคุณ

Note

ครั้งแรกที่คุณปรับใช้แบบจําลองความหมายกับแหล่งข้อมูล คุณจําเป็นต้องกําหนดค่าข้อมูลประจําตัวของแหล่งข้อมูลด้วยตนเองในพอร์ทัล Fabric ไปที่ การตั้งค่า>แบบจําลอง>ความหมายของพื้นที่>ทํางาน ข้อมูลประจําตัวของแหล่งข้อมูล การปรับใช้ครั้งต่อๆ ไปจะใช้ข้อมูลประจําตัวที่บันทึกไว้ซ้ํา

การกําหนดพารามิเตอร์เฉพาะสภาพแวดล้อม

หนึ่งในคุณสมบัติที่ทรงพลังที่สุดของ fabric-cicd คือความสามารถในการกําหนดพารามิเตอร์ไฟล์ PBIP ของคุณสําหรับสภาพแวดล้อมที่แตกต่างกัน นี่เป็นสิ่งสําคัญเมื่อโมเดลความหมายของคุณอ้างอิงทรัพยากรเฉพาะสภาพแวดล้อม เช่น รหัสพื้นที่ทํางาน รหัสเลคเฮาส์ หรือสตริงการเชื่อมต่อ

ตัวอย่าง: กําหนดพารามิเตอร์รหัสพื้นที่ทํางานและเลคเฮาส์

สร้าง parameter.yml ไฟล์ในรากโปรเจ็กต์ของคุณเพื่อกําหนดค่าเฉพาะสภาพแวดล้อม:

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

เมื่อคุณเรียกใช้ python deploy.py --workspace_id "11111111-1111-1111-1111-111111111111" --environment devfabric-cicd โดยอัตโนมัติ:

  1. อ่านไฟล์ parameter.yml
  2. ค้นหาอินสแตนซ์ find_value ทั้งหมดในไฟล์คําจํากัดความ PBIP ของคุณ
  3. แทนที่ด้วยสภาพแวดล้อมเฉพาะที่สอดคล้องกัน replace_value
  4. ปรับใช้คําจํากัดความที่แก้ไขไปยังพื้นที่ทํางานเป้าหมาย

ปรับใช้โดยอัตโนมัติ

คุณสามารถปรับใช้ PBIP โดยอัตโนมัติเพื่อเรียกใช้เมื่อใดก็ตามที่มีการรวมโค้ดเข้ากับสาขาเฉพาะในที่เก็บของคุณ ระบบอัตโนมัติเป็นไปตามตรรกะนี้:

  1. ไปป์ไลน์หรือเวิร์กโฟลว์จะทริกเกอร์เมื่อโค้ดถูกส่งไปยังสาขาที่กําหนดค่าไว้ (เช่น dev หรือ main)
  2. ชื่อสาขากําหนดสภาพแวดล้อมเป้าหมายและรหัสพื้นที่ทํางาน
  3. สคริปต์การปรับใช้จะทํางานโดยอัตโนมัติด้วยพารามิเตอร์ที่เหมาะสม
  4. สิ่งประดิษฐ์ PBIP ของคุณปรับใช้กับพื้นที่ทํางานที่ถูกต้องสําหรับสภาพแวดล้อมนั้น

ส่วนนี้ครอบคลุมขั้นตอนการตั้งค่าทั่วไปสําหรับทั้ง Azure DevOps และ GitHub Actions ตามด้วยคําแนะนําการกําหนดค่าเฉพาะแพลตฟอร์ม

ตั้งค่า

ก่อนกําหนดค่าแพลตฟอร์ม CI/CD ให้ทําตามขั้นตอนการตั้งค่าทั่วไปเหล่านี้:

1. สร้างบริการหลัก

สร้างบริการหลักใน Azure AD ด้วยบทบาทผู้สนับสนุนหรือผู้ดูแลระบบในพื้นที่ทํางาน Fabric ของคุณ

2. เพิ่มบริการหลักไปยังพื้นที่ทํางาน Fabric

  1. เปิดพอร์ทัล Fabric และนําทางไปยังพื้นที่ทํางานเป้าหมายแต่ละแห่ง (dev, prod)
  2. ไปที่การตั้งค่า > พื้นที่ทํางานจัดการการเข้าถึง
  3. เพิ่มบริการหลักด้วยบทบาทผู้สนับสนุนหรือผู้ดูแลระบบ

Note

ต้องเปิดใช้งานบริการหลักที่ระดับผู้เช่าเพื่อใช้ Fabric API สําหรับข้อมูลเพิ่มเติม โปรดดู บริการ หลักสามารถเรียกใช้ API สาธารณะของ Fabric ได้

3. กําหนดค่าสาขาในที่เก็บของคุณ

สร้างสาขาที่คุณจะใช้สําหรับระบบอัตโนมัติ สําหรับตัวอย่างในบทความนี้:

  1. สร้าง dev สาขาสําหรับการปรับใช้สภาพแวดล้อมการพัฒนา
  2. สร้าง main สาขาสําหรับการปรับใช้สภาพแวดล้อมการใช้งานจริง

คุณสามารถกําหนดชื่อสาขาเองและเพิ่มสภาพแวดล้อมเพิ่มเติมได้โดยการแก้ไขการแม็ปพื้นที่ทํางานในไฟล์ YAML

Azure DevOps

ปรับใช้ PBIP โดยอัตโนมัติด้วย Azure Pipelines เมื่อโค้ดถูกส่งไปยังสาขาที่กําหนดค่าไว้ ไปป์ไลน์จะปรับใช้กับพื้นที่ทํางานที่เกี่ยวข้องโดยอัตโนมัติ

สร้าง azure-pipelines.yml ในรูทที่เก็บของคุณ:

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
                }

กําหนดค่า Azure DevOps

  1. สร้างการเชื่อมต่อบริการ Azure ในการตั้งค่าโครงการ Azure DevOps:
    • ไปที่ การเชื่อมต่อบริการการตั้งค่า > โครงการ
    • สร้างการเชื่อมต่อบริการ Azure Resource Manager ใหม่โดยใช้ข้อมูลประจําตัวของบริการหลักของคุณ
    • สําหรับคําแนะนําโดยละเอียด โปรดดู เชื่อมต่อกับ Microsoft Azure
    • อัปเดต azureSubscription ค่าใน YAML ให้ตรงกับชื่อการเชื่อมต่อบริการของคุณ
  2. อัปเดตรหัสพื้นที่ทํางานใน YAML:
    • แก้ไขตัวแปร workspace_ids ใน azure-pipelines.yml
    • ตั้งค่ารหัสพื้นที่ทํางาน dev และ prod ของคุณ
    • ยอมรับและผลักดันการเปลี่ยนแปลงไปยังที่เก็บของคุณ
  3. สร้างไปป์ไลน์:
    • ไปที่ไปป์ไลน์ > ไปป์ไลน์ใหม่
    • เลือกที่เก็บของคุณและเลือก "ไฟล์ YAML Azure Pipelines ที่มีอยู่"
    • เลือก azure-pipelines.yml
    • สําหรับคําแนะนําโดยละเอียด โปรดดู สร้างไปป์ไลน์แรกของคุณ
    • บันทึกและเรียกใช้ไปป์ไลน์เพื่อปรับใช้ PBIP ของคุณกับ Fabric

การดําเนินการ GitHub

ปรับใช้ PBIP โดยอัตโนมัติด้วย GitHub Actions เมื่อโค้ดถูกส่งไปยังสาขาที่กําหนดค่าไว้ เวิร์กโฟลว์จะปรับใช้กับพื้นที่ทํางานที่เกี่ยวข้องโดยอัตโนมัติ

สร้าง .github/workflows/deploy.yml ในที่เก็บของคุณ:

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
          }

กําหนดค่าการดําเนินการ GitHub

  1. สร้างข้อมูลลับของข้อมูลประจําตัว Azure:

    • รับข้อมูลประจําตัวบริการหลักของคุณในรูปแบบ JSON:
      {
        "clientId": "<service-principal-client-id>",
        "clientSecret": "<service-principal-secret>",
        "subscriptionId": "<azure-subscription-id>",
        "tenantId": "<azure-tenant-id>"
      }
      
    • ไปที่ GitHub repository Settings > Secrets and variables > Actions
    • เพิ่ม AZURE_CREDENTIALS ด้วย JSON ด้านบน
  2. อัปเดตรหัสพื้นที่ทํางานในเวิร์กโฟลว์:

    • แก้ไข workspace_ids แฮชเทเบิลในขั้นตอน "ตั้งค่าตัวแปรพื้นที่ทํางาน" ใน .github/workflows/deploy.yml
    • ตั้งค่ารหัสพื้นที่ทํางาน dev และ prod ของคุณ
    • คอมมิตและส่ง YAML เวิร์กโฟลว์ไปยังที่เก็บของคุณ