Muistiinpano
Tämän sivun käyttö edellyttää valtuutusta. Voit yrittää kirjautua sisään tai vaihtaa hakemistoa.
Tämän sivun käyttö edellyttää valtuutusta. Voit yrittää vaihtaa hakemistoa.
🚀 CI/CD Microsoft Fabricille Azure DevOpsin ja Python-paketin
Tässä opastuaalissa käytä fabric-cicd Python-kirjastoa edistääksesi muutettuja kohteita (kuten tiettyä muistikirjaa) dev-työtilasta testityötilaan ja lopulta prodiin.
1. Skenaarion yleiskatsaus
Tapaa Alex — kehittäjä, joka työskentelee Fabric:n kanssa.
Alexin tiimi rakentaa muistikirjoja, dataputkia, semanttisia malleja ja raportteja kehitystyötilassa Fabric -työtilassa. Kun ominaisuudet ovat valmiita, Alexin täytyy edistää muuttuneita kohteita (kuten tietty muistikirja) dev-työtilasta testityötilaan ja lopulta prodiin.
Haaste
Alexin muistikirjat käyttävät %%configure taikakomentoa kiinnittääkseen ne tiettyyn järvenmökkiin. Tämä komento tarkoittaa, että muistikirjan määrittelyt sisältävät kovakoodattuja GUID-tiedostoja — työtilan ID:t, Lakehouse-ID:t ja SQL-päätepisteiden ID:t — jotka vaihtelevat eri ympäristöissä.
Mitä Alex odottaa
| Vaatimus | Ratkaisu |
|---|---|
| Deploy, muutetut alat yhdistettiin haaraan |
fabric-cicd
publish_all_items() ottaa käyttöön kaikki laajuuden sisäiset tehtävätyypit |
| Eksplisiittinen kohdetyyppien laajuus | Pipeline-parametri items_in_scope — sinun täytyy määrittää, mitkä alkiotyypit otat käyttöön |
| Hyväksyntätyönkulku ennen käyttöönottoa testaukseen/tuotantoon | ADO Environments, jossa on hyväksyntäportit |
| Automaattinen GUID-korvaus (kehittäjä → testi/tuotanto) |
fabric-cicd parametritiedostot (parameter.yml) |
| Suojattu tunnistetietojen hallinta | Azure Key Vault + ADO Variable Groups |
| Automaattinen laukaisin , kun yhdistyminen haarautumiseen | ADO-putki haarautumistriggereillä |
Työkalut
| Työkalu | Tarkoitus |
|---|---|
| Azure DevOps (ADO) | CI/CD-orkestrointi, Git-hosting, hyväksynnät |
fabric-cicd Python-paketti |
Microsoftin avoimen lähdekoodin kirjasto Fabric-elementtien käyttöönottoon |
| Azure Key Vault | Tallentaa Service Principal -tunnistetiedot turvallisesti |
| Palvelurehtori (SPN) | Tunnistautuu Fabric REST API:lle |
2. Arkkitehtuurikaavio
Seuraava kaavio havainnollistaa tutoriaalin kulkua.
3. Ennakkovaatimukset
Ennen kuin aloitat, varmista, että sinulla on seuraavat asiat kunnossa:
| # | Edellytys | Yksityiskohdat |
|---|---|---|
| 1 | Azure DevOps organization and project | Projekti, jossa on repositio- ja putkistot käytössä |
| 2 | Työtilat Fabric-lehdessä | Kolme työtilaa – yksi kehitykselle, testaukselle ja tuotannolle |
| 3 | Palvelupäällikkö (SPN) | Entra ID -tunnus (Azure AD) -sovelluksen rekisteröinti asiakassalaisuudella |
| 4 | SPN-oikeudet Fabric-pelissä | Lisää SPN jäseneksi tai ylläpitäjäksi jokaiseen kohde-Fabric-työtilaan |
| 5 | Azure Key Vault | Avainholvi, jossa on kolme salaisuutta: Tenant ID, Client ID ja Client Secret |
| 6 | Git-integraatio Fabric:ssa | Yhdistä kehittäjätyötila dev ADO-repositosi haarakonttoriin |
| 7 | Python 3.12+ | Käytetään pipeline-agentissa käyttöönottoskriptin ajamiseen |
| 8 |
fabric-cicd Python-paketti |
Microsoftin avoimen lähdekoodin käyttöönottokirjasto (PyPI) |
| 9 | Fabric Admin -asetus SPN:lle | Fabric-ylläpitäjän on otettava käyttöön "Palvelupäämiehet voivat käyttää Fabric-rajapintoja" Fabric-ylläpitäjäportaalissa Tenant Settings -osiossa |
💡 Vinkki: Jotta Service Principal -pääsy voidaan ottaa käyttöön Fabricissa, Fabric-ylläpitäjän on otettava käyttöön "Service Principals can use Fabric-rajapintoja " Fabric Admin Portalissa Tenant Settings -kohdassa.
Lataa lähdetiedostot
- Forkkaa Fabric-sample-varasto GitHub-tilillesi.
- Kloonaa haarukkasi paikalliseen koneeseen:
git clone https://github.com/<your-account>/fabric-samples.git
cd fabric-samples
4. Alkuperäinen Azure DevOps -asetus
Tässä osiossa käydään läpi kaikki Azure DevOps -resurssit, jotka sinun täytyy konfiguroida ennen kuin putki voi käynnistyä.
4.1 Azure Key Vault Integration
Service Principal -tunnuksiasi (Tenant ID, Client ID ja Secret) ei koskaan tulisi tallentaa tavallisena tekstinä. Sen sijaan tallenna ne Azure Key Vaultiin.
Azure Key Vaultin perustamisen vaiheet
- Luo avainholvi Azure-portaalissa (tai käytä olemassa olevaa).
- Lisää kolme salaisuutta:
| Salainen nimi | Kuvaus | Esimerkkiarvo |
|---|---|---|
aztenantid |
Azure AD / Entra ID -tunnus Tenant ID | xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx |
azclientid |
Palvelupäämiehen sovellus (asiakas) ID | xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx |
azspnsecret |
Palvelupäämiehen asiakassalaisuusarvo | your-secret-value |
Apurahan saatavuus: ADO-palveluyhteydellä (tai ADO-projektin identiteetillä) täytyy olla Get ja List -oikeudet salaisuuksiin Key Vaultin pääsykäytännöissä (tai RBAC-roolissa
Key Vault Secrets User).
4.2 Muuttuva ryhmä: fabric_cicd_group_sensitive
Tämä muuttujaryhmä on linkitetty Azure Key Vaultiin, mikä tarkoittaa, että salaiset arvot haetaan ajonaikaisesti eivätkä koskaan paljastu ADO UI:ssa.
Luomisen vaiheet
- Siirry ADO-projektisi Pipelines → Libraryyn .
- Klikkaa + Muuttujaryhmä.
- Nimeä se:
fabric_cicd_group_sensitive - Kytke päälle Linkin salaisuudet Azure-avainholvista muuttujina.
- Valitse Azure-tilauksesi ja Key Vault.
- Klikkaa + Lisää ja valitse kolme salaisuutta:
aztenantidazclientidazspnsecret
- Valitse Tallenna.
| Muuttuja | Source | Herkkä? |
|---|---|---|
aztenantid |
Azure Key Vault | ✅ Kyllä |
azclientid |
Azure Key Vault | ✅ Kyllä |
azspnsecret |
Azure Key Vault | ✅ Kyllä |
Tärkeää
Koska nämä muuttujat on linkitetty Key Vaultiin, niitä käytetään putkistossa YAML:ssä muodossa $(aztenantid), $(azclientid), ja $(azspnsecret). Ne peitetään automaattisesti lokeihin.
4.3 Muuttujaryhmä: fabric_cicd_group_non_sensitive
Tämä muuttujaryhmä tallentaa ei-salaiset konfiguraatioarvot – erityisesti työtilan nimet ympäristökohtaisesti ja Git-hakemistopolun.
Luomisen vaiheet
- Siirry ADO-projektisi Pipelines → Libraryyn .
- Klikkaa + Muuttujaryhmä.
- Nimeä se:
fabric_cicd_group_non_sensitive - Lisää seuraavat muuttujat:
| Muuttujan nimi | Arvo | Kuvaus |
|---|---|---|
devWorkspaceName |
MyProject-Dev |
DEV Fabric -työtilan nimi |
testWorkspaceName |
MyProject-Test |
TEST Fabric -työtilan nimi |
prodWorkspaceName |
MyProject-Prod |
PROD-kankaan työtilan nimi |
gitDirectory |
fabric |
Kansio repositossasi, joka sisältää Fabric-tuotemääritelmät |
💡 Miten se toimii koodissa: Python-skripti lukee nämä arvot käyttäen
os.environ. Esimerkiksi, kun skripti otetaan käyttöön ,testse rakentaa muuttujan nimentestWorkspaceName, muuntaa sen isoksi (TESTWORKSPACENAME), ja lukee sen ympäristöstä – koska ADO injektoi automaattisesti ei-herkkiä muuttujaryhmäarvoja ympäristömuuttujina isolla kirjaimella.
4.4 ADO-ympäristöt ja hyväksyntäportit
ADO Environments mahdollistaa manuaalisten hyväksyntätarkistusten lisäämisen ennen käyttöönottoa. Tämä on ratkaisevaa markkinoinnissa test ja prod.
Ympäristöjen luomisen vaiheet
- Siirry ADO-projektissasi Pipelines → Environments -kohtaan.
- Luo kolme ympäristöä , joiden nimet vastaavat tarkasti haaranimiäsi:
| Ympäristön nimi | Tarvitaanko hyväksyntä? | Hyväksyjät |
|---|---|---|
dev |
❌ Ei (automaattinen laukaisu) | — |
test |
✅ Kyllä | Hallintotiimi / Vetäjä |
prod |
✅ Kyllä | Hallintotiimi / Vetäjä |
Ja
testprod, klikkaa ympäristöä → ⋮ (Lisää vaihtoehtoja) → Hyväksynnät ja tarkistukset → + Lisää, tarkista → Hyväksynnät.Lisää vaaditut hyväksyjät.
Esimerkkiympäristön tilanäkymä:
| Environment | Tilanne |
|---|---|
| Kehijä | ✅ #20260211.1 fabric_cicd_pipeline:ssa |
| testaa | ✅ #20260216.8 fabric_cicd_pipeline:ssa |
| tyrkätä | ✅ #20260131.12 on fabric_cicd_pipeline |
💡 Miksi ympäristöt? Pipeline YAML käyttää
deploymenttöitä, joissaenvironment: $(target_env)on . Kuntarget_envontesttaiprod, ADO pysäyttää putken ja odottaa konfiguroidun hyväksyjän hyväksyntää ennen etenemistä.
4.5 Git-haaran strategia
Haarautumisstrategia on keskeinen tässä CI/CD-järjestelmässä. Tarvitset kolme pitkäikäistä haaraa:
Keskeiset kohdat
| Branch | Yhdistettynä Fabric Workspaceen? | Tarkoitus |
|---|---|---|
dev |
✅ Kyllä – synkronoitu DEV-työtilan kanssa | Totuuden lähde. DEV-työtilassa tehdyt muutokset tehdään tässä. |
test |
❌ Ei | Saa ylennettyjä tuotteita PR-yhdistämisen kautta. Seuraa, mitä TESTissä on otettu käyttöön. |
prod |
❌ Ei | Saa ylennettyjä tuotteita PR-yhdistämisen kautta. Seuraa, mitä PRODiin on otettu käyttöön. |
Miksi vain dev on yhteydessä
- Fabricin Git Integration synkronoi työtilan alukset kaksisuuntaisesti Git-haaran kanssa.
- Ja-haarat
testprodeivät ole yhteydessä työtiloihin, koskafabric-cicdpaketti hoitaa käyttöönoton suoraan Fabric REST API:n kautta. - Nämä haarat toimivat tallenteena siitä, mitkä tuoteversiot on ylennetty kuhunkin ympäristöön.
4.6 ADO Pipeline Setup
Luo ADO:ssa putkisto, joka viittaa YAML-tiedostoon repositasi.
Vaiheet
- Siirry kohtaan Pipelines → Pipelines → New pipeline.
- Valitse Azure Repos Git ja valitse oma repositoriosi.
- Valitse Existing Azure Pipelines YAML -tiedosto.
- Osoita polkua:
Deploy-To-Fabric.yml(tai mihin ikinä olet sen sijoittanut). -
Nimeä putkisto:
fabric_cicd_pipeline. - Putkikäyttöoikeuksien kohdalla varmista, että sillä on pääsy seuraaviin:
- Molemmat muuttujaryhmät (
fabric_cicd_group_sensitivejafabric_cicd_group_non_sensitive) - Kaikki kolme ympäristöä (
dev,test,prod)
- Tallenna (älä vielä juokse).
⚠️ Käyttöoikeusvinkki: Ensimmäisellä kerralla, kun putki käynnistyy, ADO saattaa pyytää sinua valtuuttamaan pääsyn muuttujaryhmiin ja ympäristöihin. ADO-ylläpitäjä voi ennakkovaltuuttaa nämä Pipeline → Settings -osiossa.
5. Code Deep Dive: ADO Pipeline YAML
Tiedosto:Deploy-To-Fabric.yml- sijaitsee aiemmin ladattu GitHubin reposito.
Alla on koko tuotantoputki rivikohtaisine merkintöineen.
# ──────────────────────────────────────────────────────────────
# TRIGGER: Runs automatically when code is pushed to dev, test, or prod
# Only triggers when changes are in the "fabric/" folder
# ──────────────────────────────────────────────────────────────
trigger:
branches:
include: [test, prod]
paths:
include:
- fabric/**
🔍 Explanation-Trigger
- Putki käynnistyy automaattisesti commit-toimintojen yhteydessä tai
testprodhaarautumiseen. Se ei käynnistydev-koskadevlähdehaara on yhdistetty Fabric Git -integraatioon. - Suodatin
pathsvarmistaa, että se aktivoituu vain , kun hakemiston tiedostojafabric/muutetaan, estäen tarpeettomat suoritukset dokumentaatioiden, skriptien ym. muutoksissa. - Käytännössä: kun PR yhdistetään
dev→test:stä, yhdistämiscommitus päätyy haarautumiseentest, jolloin putki kohdistuu TEST-ympäristöön.
# ──────────────────────────────────────────────────────────────
# PARAMETERS: Runtime input-which Fabric item types to deploy
# ──────────────────────────────────────────────────────────────
parameters:
- name: items_in_scope
displayName: Enter Fabric items to be deployed
type: string
default: '["Notebook","DataPipeline","Lakehouse","SemanticModel","Report","VariableLibrary"]'
🔍 Explanation-Parameters
- Tämä määrittelee ajonaikaisen parametrin , joka säätelee, mitkä Fabric-elementityypit kuuluvat käyttöönoton piiriin.
- Jos tätä parametria ei ole määritelty, kaikki paketin tukemat
fabric-cicdalkiotyypit otetaan käyttöön. - Tämä parametri toimii myös vaihtoehtona valikoivaan käyttöönottoon. Esimerkiksi voisit läpäistä vain
["Notebook"]pelkkien muistikirjojen käyttöönoton.
⚠️ Selective Deployment Warning: Jos
items_in_scoperajaat valikoivan käyttöönoton, älä kutsuunpublish_all_orphan_items()Python-skriptiä. Tämä funktio poistaa ne tyypititems_in_scope, jotka on määritelty työtilassa, mutta joita ei ole julkaisuhaarassa. Esimerkiksi, jos otat vain["Notebook"]käyttöön ja työtilassa on muistikirjoja, jotka eivät ole haarautumassa, funktio poistaa ne – vaikka ne saattavat silti olla voimassa. Se ei poista muiden tyyppien kohteita (kuten putkistoja, raportteja ja muita tyyppejä). Käytäunpublish_all_orphan_items()vain, kun haara edustaa koko haluttua tilaa kohdetyyppien alkiotyypeille.
# ──────────────────────────────────────────────────────────────
# VARIABLES: Environment-specific config & secrets
# ──────────────────────────────────────────────────────────────
variables:
- name: target_env
value: ${{ replace(variables['Build.SourceBranch'], 'refs/heads/', '') }}
- group: fabric_cicd_group_sensitive
- group: fabric_cicd_group_non_sensitive
🔍 Explanation-Variables
| Muuttuja | Miten se toimii |
|---|---|
target_env |
Erottaa haaran nimen dynaamisesti .Build.SourceBranch Esimerkiksi refs/heads/test → test. Tämä yksittäinen muuttuja ohjaa koko ympäristötietoista käyttäytymistä. |
fabric_cicd_group_sensitive |
Hakee aztenantid, azclientidazspnsecret , Azure Key Vaultista ajonaikaisesti. |
fabric_cicd_group_non_sensitive |
Hakee työtilojen nimet ja gitDirectory pelkkinä ympäristömuuttujina. |
# ──────────────────────────────────────────────────────────────
# STAGES & JOBS: Single deployment stage
# ──────────────────────────────────────────────────────────────
stages:
- stage: DeployToFabric
displayName: "Deploy to Fabric Workspace"
jobs:
- deployment: Deployment
displayName: "Deploy Resources"
environment: $(target_env) # ◀── THIS triggers the approval gate!
pool:
name: Azure Pipelines
strategy:
runOnce:
deploy:
steps:
🔍 Explanation-Deployment Työ
| Elementti | Tarkoitus |
|---|---|
deployment: (ei job:) |
Käyttöönottotehtävä vaaditaan, jotta voi käyttää ADO-ympäristöjä. Se mahdollistaa hyväksyntäportit, käyttöönottohistorian ja auditointijäljet. |
environment: $(target_env) |
Kuvaukset ADO-ympäristöön, joka vastaa haaran nimeä (dev, test, tai prod). Jos hyväksynnät on määritetty kyseisessä ympäristössä, putki pysähtyy tässä , kunnes se hyväksytään. |
strategy: runOnce |
Suorittaa käyttöönottovaiheet täsmälleen kerran (toisin kuin kanaria- tai heittostrategiat). |
steps:
# Step 1: Checkout the source code
- checkout: self
# Step 2: Set up Python 3.12
- task: UsePythonVersion@0
inputs:
versionSpec: '3.12'
addToPath: true
displayName: "Set up Python Environment"
# Step 3: Install dependencies
- script: |
python -m pip install --upgrade pip
pip install fabric-cicd
displayName: "Install Fabric CICD Library"
# Step 4: Run the deployment script
- task: PythonScript@0
inputs:
scriptSource: 'filePath'
scriptPath: '.deploy/deploy-to-fabric.py'
arguments: >-
--aztenantid $(aztenantid)
--azclientid $(azclientid)
--azspsecret $(azspnsecret)
--items_in_scope ${{ parameters.items_in_scope }}
--target_env $(target_env)
displayName: 'Run deployment using fabric-cicd'
🔍 Explanation-Steps
| Osavaihe | Mitä se tekee |
|---|---|
| Kassa ulos | Kloonaa varaston, jotta putkella on pääsy kansion Fabric-elementtimäärittelyihin fabric/ ja käyttöönottoskriptiin. |
| Python-asennus | Asentaa Python 3.12:n build-agenttiin. Paketti fabric-cicd vaatii Python 3.10+:n. |
| Asennusriippuvuudet | Asentaa fabric-cicd paketin PyPI:stä. Tämä on Microsoftin virallinen kirjasto automatisoituihin Fabric-käyttöönottoihin. |
| Suorita käsikirjoitus | Suorittaa Pythonin käyttöönottoskriptin, välittäen kaikki tarvittavat argumentit: SPN-tunnistetiedot (Key Vaultista), lista käyttöönotettavista kohdetyypeistä ja kohdeympäristön nimi. |
⚠️ Turvallisuushuomautus: ,
$(aztenantid)$(azclientid), ja$(azspnsecret)arvot haetaan Key Vaultiin sidottu muuttujaryhmästä. Ne peitetään automaattisesti putkilokeihin —***näet arvot todellisten arvojen sijaan.
6. Koodin syväsukellus: Pythonin käyttöönottoskripti
Tiedosto:.deploy/deploy-to-fabric.py — joka sijaitsee aiemmin ladatussa GitHub-repositoissa.
Tämä on komennuksen ydin. Käydään läpi jokainen osio.
6.1 Tuonnit ja riippuvuudet
import os, argparse, requests, ast
from fabric_cicd import (
FabricWorkspace,
publish_all_items,
unpublish_all_orphan_items,
change_log_level,
append_feature_flag,
)
from azure.identity import ClientSecretCredential
| Tuonti | Tarkoitus |
|---|---|
os |
Käyttöympäristön muuttujat (ei-herkät muuttujaryhmäarvot) |
argparse |
Jäsentämiskomentoriviargumentit, jotka siirretään putkesta |
requests |
Tee HTTP-kutsuja Fabric REST API:lle (työtilan ID-hakua varten) |
fabric_cicd |
Microsoftin kirjasto — hoitaa Fabric-elementtien käyttöönoton raskaan työn |
ClientSecretCredential |
Azure Identity -kirjasto — tunnistautuu SPN-tunnistetuksilla |
6.2 Työtilan ID-hakutoiminto
def get_workspace_id(p_ws_name, p_token):
url = "https://api.fabric.microsoft.com/v1/workspaces"
headers = {
"Authorization": f"Bearer {p_token.token}",
"Content-Type": "application/json"
}
response = requests.get(url, headers=headers)
ws_id = ''
if response.status_code == 200:
workspaces = response.json()["value"]
for workspace in workspaces:
if workspace["displayName"] == p_ws_name:
ws_id = workspace["id"]
return workspace["id"]
if ws_id == '':
return f"Error: Workspace {p_ws_name} could not found."
else:
return f"Error: {response.status_code}, {response.text}"
Mitä tämä tekee:
- Kutsuu Fabric REST API :n (
GET /v1/workspaces) listaamaan kaikki työtilat, joihin SPN:llä on pääsy. - Etsii työtilan, joka
displayNamevastaa kohdetyötilan nimeä. - Palauttaa työtilan GUID , jos se löytyy, tai virheilmoituksen, jos ei.
💡 Miksi et kovakoodaisi työtilan ID:tä? Kun skripti etsitään dynaamisesti nimellä, skripti on kestävämpi työtilan uudelleenluomiselle ja välttää GUID-tiedostojen tallentamisen muuttujaryhmään.
6.3 Ominaisuusliput ja lokitus
append_feature_flag("enable_shortcut_publish")
change_log_level("DEBUG")
| Asetus | Tarkoitus |
|---|---|
enable_shortcut_publish |
Mahdollistaa Lakehouse-pikanäppäimten käyttöönoton — ominaisuus, joka on valinnainen ominaisuuslipulla fabric-cicd. |
DEBUG logaritmitaso |
Tarjoaa yksityiskohtaisen tuloksen käyttöönoton aikana — erittäin hyödyllinen vianetsinnässä. Argumentti "DEBUG" on vapaaehtoinen — soittaminen change_log_level() ilman sitä mahdollistaa pidemmän lokimisen. Poista change_log_level() jos debug-lokit eivät ole tarpeen. |
6.4 Argumenttien jäsentäminen
parser = argparse.ArgumentParser(description='Process Azure Pipeline arguments.')
parser.add_argument('--aztenantid', type=str, help='tenant ID')
parser.add_argument('--azclientid', type=str, help='SP client ID')
parser.add_argument('--azspsecret', type=str, help='SP secret')
parser.add_argument('--target_env', type=str, help='target environment')
parser.add_argument('--items_in_scope', type=str, help='Defines the item types to be deployed')
args = parser.parse_args()
Nämä argumentit välitetään putkiston YAML-vaiheesta. Jäsentäjä tekee ne saataville muodossa args.aztenantid, args.azclientid, jne.
6.5 Todennus
token_credential = ClientSecretCredential(
client_id=args.azclientid,
client_secret=args.azspsecret,
tenant_id=args.aztenantid,
)
Tämä luo Azure-tunnistetiedoston käyttäen Service Principalin asiakas-ID:tä, salaisuutta ja tenant-ID:tä. Tätä tunnistetta käytetään molempiin:
- Fabric REST API:n kutsuminen (workspace lookup)
- Siirtyminen
FabricWorkspacesijoitukseenfabric-cicd
6.6 Dynaaminen työtilan resoluutio
tgtenv = args.target_env # e.g., "test"
ws_name = f'{tgtenv}WorkspaceName' # e.g., "testWorkspaceName"
workspace_name = os.environ[ws_name.upper()] # reads TESTWORKSPACENAME from env vars
Nerokas osa: Muuttujaryhmä fabric_cicd_group_non_sensitive sisältää muuttujia kuten devWorkspaceName, testWorkspaceName, jne. ADO injektoi nämä isona ympäristömuuttujina. Skripti rakentaa muuttujan nimen dynaamisesti kohdeympäristön perusteella.
# Generate a token and look up the workspace ID
resource = 'https://api.fabric.microsoft.com/'
scope = f'{resource}.default'
token = token_credential.get_token(scope)
lookup_response = get_workspace_id(workspace_name, token)
if lookup_response.startswith("Error"):
raise ValueError(f"{lookup_response}. Perhaps workspace name is set incorrectly...")
else:
wks_id = lookup_response
6.7 Alusta FabricWorkspace ja ota käyttöön
repository_directory = os.environ["GITDIRECTORY"] # e.g., "fabric"
item_types = args.items_in_scope.strip("[]").split(",") # Convert string to list
target_workspace = FabricWorkspace(
workspace_id=wks_id,
environment=tgtenv,
repository_directory=repository_directory,
item_type_in_scope=item_types,
token_credential=token_credential,
)
# Deploy!
publish_all_items(target_workspace)
unpublish_all_orphan_items(target_workspace)
| Tapa | Mitä se tekee |
|---|---|
FabricWorkspace(...) |
Käynnistää käyttöönoton kontekstin — lukee Git-reposta alkioiden määritelmät, lataa parametritiedostot GUID-korvausta varten ja valmistelee käyttöönottosuunnitelman. |
publish_all_items() |
Ottaa kaikki laajuuden sisäiset alat käyttöön kohdetyötilaan. Hoitaa uusien kohteiden luomisen ja olemassa olevien päivittämisen. |
unpublish_all_orphan_items() |
Poistaa kohdetyötilan kohteet, joita ei enää ole Git-haarassa — pitäen työtilan puhtaana. |
⚠️ TÄRKEÄÄ — Ymmärtäminen
unpublish_all_orphan_items(): Tämä menetelmä poistaa kohdetyötilasta määritellyt kohteetitems_in_scope, joita ei ole julkaisuhaarassa (eli haara, jota käytetään paketin lähteenäfabric-cicd). Se ei koske muihin esineisiin. Tässä opastuaalissa haaratestsisältää kaikki TEST-työtilaan tarkoitetut alit, joten sitä voi turvallisesti kutsuaunpublish_all_orphan_items()— se poistaa vain haarautumisesta tarkoituksella poistetut kohteet.Kuitenkin, jos teet valikoivan käyttöönoton (esimerkiksi otat käyttöön vain muistikirjoja kaventuneen
items_in_scopekautta), ole varovainen .unpublish_all_orphan_items()Se poistaa kaikki työtilassa olevat muistikirjat, jotka eivät ole haarauksessa, vaikka ne olisivat edelleen voimassa eivätkä olleet osa valikoivaa julkaisua.
💡 Vinkki:
unpublish_all_orphan_items()tukee tiettyjen kohteiden poistamista siirtämällä regex-malli. Kaikki kohteet, joiden nimet vastaavat regexiä, säilytetään työtilassa, vaikka ne eivät olisikaan lähdehaarassa. Lisätietoja ja käyttöesimerkkejä löytyy virallisesta API-viitteestä.
7. Code Deep Dive: Parametritiedostot (GUID-korvaus)
Tässä tapahtuu taika — miten %%configure käyttöliittymät vaihtuvat ympäristön mukaan.
Miten se toimii
Paketti fabric-cicd etsii tiedostoa, joka on parameter.yml nimetty .deploy hakemistosta (tai arkiston juuresta). Tämä tiedosto määrittelee etsi-ja-korvaa -säännöt , joita sovelletaan alkioiden määrittelyihin ennen käyttöönottoa.
💡 Vinkki: Etsi
parameter.ymlja korvaa -ominaisuus tukee monia lähestymistapoja tämän tutoriaalin ulkopuolella — mukaan lukien regex-mallit, tiedostolaajuiset korvaukset ja paljon muuta. Täydellisen listan vaihtoehdoista ja edistyneestä käytöstä löytyy virallisesta dokumentaatiosta: 👉fabric-cicd Parameter File Documentation
💡 Vinkki — Muuttujakirjasto: On suositeltavaa hyödyntää Variable Librarya aina kun mahdollista ympäristökohtaisten arvojen hallintaan, sen sijaan että luottaisi pelkästään
find_replaceparametritiedostoihin. Muuttujakirjastot tarjoavat keskitetyn, uudelleenkäytettävän tavan hallita konfiguraatioita eri ympäristöissä. Lisätietoja löytyy kohdasta Aloita muuttujakirjastojen käytöstä.
Tiedosto:parameter.yml — joka sijaitsee aiemmin ladatussa GitHub-repositoissa.
7.1 Parametritiedostorakenne
find_replace:
- find_value: "bfddf0b6-5b74-461a-a963-e89ddc32f852" # DEV Workspace ID
replace_value:
test: " $workspace.$id" # Replaced with TEST workspace ID
prod: " $workspace.$id" # Replaced with PROD workspace ID
🔍 Jokaisen merkinmän ymmärtäminen
Merkintä 1 — Työtilan ID:n korvaaminen
- find_value: "bfddf0b6-5b74-461a-a963-e89ddc32f852" # DEV Workspace ID
replace_value:
test: " $workspace.$id" # Auto-resolves to the TEST workspace's actual ID
prod: " $workspace.$id" # Auto-resolves to the PROD workspace's actual ID
-
find_value: Muistikirjan%%configurekomennossa löytyvä GUID — tämä on DEV-työtilan tunnus. -
replace_value: Se$workspace.$idon sisäänrakennettu tokenfabric-cicd, joka automaattisesti ratkaisee kohdetyötilan ID:n käyttöönoton yhteydessä. - Koska
devsitä ei ole listattu ,replace_valueGUID korvataan vain, kun se otetaan käyttöön taitestprod.
Merkintä 2 — Lakehouse-henkilökortin korvaaminen
- find_value: "981f2f9a-0436-4942-b158-019bd73cdf1c" # DEV DemoLakehouse GUID
replace_value:
test: "$items.Lakehouse.DemoLakehouse.$id" # Resolves to TEST Lakehouse ID
prod: "$items.Lakehouse.DemoLakehouse.$id" # Resolves to PROD Lakehouse ID
-
$items.Lakehouse.DemoLakehouse.$idon dynaaminen token, joka etsii kohdetyötilassa nimettyä järvitaloaDemoLakehouseja palauttaa sen ID:n. -
Kuvio:
$items.<ItemType>.<ItemName>.$id
Merkintä 3 — SQL Endpoint ID Replacement (Dynamic Notation)
- find_value: "91280ad0-b76e-4c98-a656-95d8f09a5e28" # DEV SQL Endpoint GUID
replace_value:
test: $items.Lakehouse.DemoLakehouse.$sqlendpointid # Resolved dynamically at deploy time
prod: $items.Lakehouse.DemoLakehouse.$sqlendpointid # Resolved dynamically at deploy time
- Sen sijaan, että SQL-päätepisteen GUID olisi kovakoodattu jokaiselle ympäristölle (esim.
204fd20c-e34c-4bef-9dce-4ecf53b0e878TEST tai29bda5ec-ebc7-466e-a618-ef5bbea75e13PROD), tämä merkintä käyttää dynaamista merkintää —$items.Lakehouse.DemoLakehouse.$sqlendpointid. - Paketti
fabric-cicdratkaisee tämän käyttöönoton yhteydessä etsimällä järvenrakennuksen SQL-päätepisteen IDDemoLakehouse:n kohdetyötilassa. Tämä poistaa tarpeen etsiä ja ylläpitää SQL-päätepisteiden GUID-tiedostoja manuaalisesti eri ympäristöissä.
7.2 Dynaamisten tokenien yhteenveto
| Tunnus | Päättää |
|---|---|
$workspace.$id |
Kohdetyötilan GUID |
$items.Lakehouse.<name>.$id |
Kohdetyötilassa nimetty järvimajan <name> GUID |
$items.<ItemType>.<ItemName>.$id |
Yleinen malli mille tahansa tuotetyypille |
$items.Lakehouse.<name>.$sqlendpointid |
Lakehousen SQL-analytiikan päätepiste (dynaamisesti ratkaistu) |
7.3 Ominaisuushaaraparametritiedosto (edistynyt)
Tiimeille, jotka käyttävät ominaisuushaaroja (ei pelkästään dev), on olemassa varianttiparametritiedosto, jossa kaikilla kolmella ympäristöllä (kehitys, testi, tuotanto) on korvaajat:
- find_value: "d34e3a2a-96ba-4461-9a80-496894ca4cda" # Feature branch Workspace ID
replace_value:
dev: " $workspace.$id"
test: " $workspace.$id"
prod: " $workspace.$id"
Tämä on hyödyllistä, kun kehittäjät työskentelevät omissa Fabric-työtiloissaan ja tarvitsevat GUID-tiedostojen vaihtoa, vaikka ne otettaisiin käyttöön DEV:iin.
8. Käyttöönottokulku: Kokonaisvaltainen läpikäynti
Tässä on koko prosessi, kun Alex haluaa ylentää muistikirjan kehittäjästä testiin:
Vaihe 1: 🔧 Kehittäjä tekee muutoksia kehitystyöhön
Alex muokkaa IngestApiData muistikirjaa DEV Fabric -työtilassa (esimerkiksi lisää uuden solun). Fabricin Git Integration synkronoi tämän muutoksen automaattisesti haarautumiseen dev (tai manuaalisen commitin kautta).
Vaihe 2: 📋 Luo Pull Request (kehittäjä → testi)
Alex luo Pull Request -pyynnön ADO:ssa:
-
Lähdehaara:
dev -
Kohdehaara:
test - Otsikko: "Ylennä muutetut muistikirjan kohteet Testiksi"
PR sisältää kaikki muutetut alitteet, jotka Alex haluaa ottaa käyttöön TEST-ympäristössä.
Vaihe 3: ✅ PR-hyväksyntä ja yhdistyminen
Arvioija (tai Alexin ylläpitäjä) tarkistaa PR:n:
- Tarkastaa muutokset muistikirjan määrittelytiedostoihin
- Hyväksyy PR:n
-
Yhdistäminen päättyy → Muutokset ovat nyt
testhaaralla
Vaihe 4: 🚀 Putkiston automaattiset laukaisimet
Haaran yhdistämiscommitus test laukaisee , fabric_cicd_pipeline koska:
- Haara
teston laukaisijoidenincludelistalla - Muutokset ovat polun sisällä
fabric/
Putki aloittaa toteutuksen:
Pipeline Variable: target_env = "test"
Vaihe 5: ⏸️ Hyväksyntäportti
Koska putki käyttää environment: $(target_env) jatarget_env = test , ADO tarkistaa testiympäristön hyväksyntäporttien varalta.
- Putki pysähtyy ja lähettää ilmoituksen konfiguroiduille hyväksyjille.
- Ylläpitäjä tarkistaa ja klikkaa Hyväksy.
Vaihe 6: ⚡ Käsikirjoituksen toteutus
Hyväksynnän jälkeen putkisto:
- ⚙️ Asettaa Python 3.12:n
-
📦 Asennukset
fabric-cicd - ▶️ Pelaa
deploy-to-fabric.pyseuraavilla mukana:
- SPN-tunnukset Key Vaultista
--target_env test--items_in_scope ["Notebook","Lakehouse",...]
Python-skripti:
- 🔐 Tunnistautuu SPN:llä
-
🔍 Ratkaisee
testWorkspaceName→ etsii työtilan ID:n -
📄 Lataa
parameter.ymlja soveltaa GUID-korvaamia - 📤 Julkaisee kohteita TEST-työtilassa
- 🧹 Siivoaa orvoksi jääneet esineet
Vaihe 7: ✅ Käyttöönotto suoritettu
Muistikirja on nyt asennettu TEST-työtilaan seuraavilla toiminnoilla:
- ✅ Uusi solu on mukana
-
✅ Kaikki GUID:t
%%configureon korvattu TEST-ympäristöarvoilla
9. Validointi: Onnistuneen komennuksen vahvistaminen
Kun putki on valmis, varmista, että käyttöönotto onnistui:
Tarkistus 1: Putkiston tila
ADO:ssa → Pipelines → Runsissa varmista, että putkiston suoritus näyttää ✅ Onnistunut ympäristössä test .
Tarkista 2: Muistikirjan sisältö TEST-työtilassa
Avaa IngestApiData muistikirja TEST Fabric -työtilassa ja varmista:
Uusi solu on läsnä: Juuri lisätty solu, joka kehitettiin DEV:ssä, pitäisi nyt näkyä muistikirjan TEST-versiossa.
GUID:t korvataan solussa 1: Komennossa
%%configure(tyypillisesti solussa 1) varmista, että:
| GUID-tyyppi | Pitäisi näkyä | EI pitäisi näyttää |
|---|---|---|
| Työtilan tunnus | TEST-työtilan ID |
|
| DemoLakehouse ID | TESTIJÄRVI-ID |
|
| SQL Endpoint ID | TEST SQL Endpoint ID (dynaamisesti ratkaistu) |
91280ad0-...) |
✅ Onnistui! Solu
%%configureosoittaa nyt TEST-järventaloja, ja uusi kehitystyö on edistetty selkeästi.
10. Vianmääritys ja yleiset sudenkuopat
| Ongelma | Syy | Ratkaisu |
|---|---|---|
| Putki epäonnistuu, kun "Workspace not found" | Työtilan nimi muuttujaryhmässä ei vastaa Fabricia | Kaksinkertainen tarkistus testWorkspaceName muuttujaryhmässä fabric_cicd_group_non_sensitive |
| GUID-ohjaimia ei vaihdeta |
parameter.yml ei odotetussa paikassa |
Varmista, että tiedosto on .deploy/ kansiossa skriptin vieressä tai repositoryn juurella |
Permission denied virheitä Fabric API:sta |
SPN:ltä puuttuu työtilayhteys | Lisää SPN jäseneksi tai ylläpitäjäksi kohde-Fabric-työtilassa |
| Putki ei laukea yhdistämisen yhteydessä | Polkusuodattimen epäsuhta | Varmista, että Fabric-tuotteesi ovat fabric/ hakemistossa repositossa |
ModuleNotFoundError: fabric_cicd |
Paketti ei asennettu | Varmista, että vaihe pip install fabric-cicd on läsnä ja onnistuu |
| Hyväksyntäilmoitusta ei tullut | Ympäristö ei ole konfiguroitu | Varmista, että ADO Environment -nimi täsmää täsmälleen target_env (kirjainkoon herkkä) |
| SQL Endpoint GUID ei korvattu | Dynaaminen notaatio väärin konfiguroitu | Varmista, $items.Lakehouse.<name>.$sqlendpointid että syntaksi on oikein ja järvitalo on kohdetyötilassa |
os.environ Avainvirhe |
Muuttujaryhmä, joka ei ole linkitetty putkeen | Valtuuta putkiston pääsy fabric_cicd_group_non_sensitive |
| Pikakuvakkeiden ominaisuuslippuvirheet |
fabric-cicd Versio liian vanha |
Päivitä fabric-cicd uusimpaan versioon: pip install fabric-cicd --upgrade |
11. Yhteenveto
Tämä opastus esitteli tuotantotason CI/CD-työnkulun Fabric-ohjelmalle Azure DevOps:n avulla:
| Komponentti | Mitä me järjestimme |
|---|---|
| Azure Key Vault | Tallentaa SPN-tunnukset turvallisesti (Tenant ID, Client ID, Secret) |
| ADO-muuttujaryhmät | One Key Vault – linkitettynä (herkkä), One plain (työtilan nimet) |
| ADO-ympäristöt |
dev, test, prod hyväksyntäportit päällä test ja prod |
| Git-haarat |
dev (yhdistetty Fabriciin), test ja prod (sijoituskohteet) |
| Putkisto YAML | Automaattiset laukaisimet haarojen yhdistämisessä, parametrisoitu alkioiden valinta |
| Python-komentosarja | Tunnistautuu SPN:n kautta, ratkaisee työtilan, ottaa käyttöön fabric-cicd |
| Parametritiedosto | Vaihtaa DEV GUID:t ympäristökohtaisilla arvoilla dynaamisten tokenien avulla |
Tärkeimmät huomiot
-
Vain haara
devon yhdistetty Fabric-työtilaan —testjaprodhaarat toimivat käyttöönottotietueina. -
fabric-cicdparametritiedostot korvaavat automaattisesti GUID:t käyttämällä dynaamisia tokeneita, kuten$workspace.$idja$items.Lakehouse.<name>.id. - ADO Environments, jolla on hyväksynnät , tarjoavat hallinnan — ei käyttöönottoa korkeampiin ympäristöihin ilman nimenomaista hyväksyntää.
- Service Principal -tunnistautuminen Azure Key Vaultin kautta varmistaa, ettei tunnistetiedot koskaan paljastu koodissa tai lokitiedostoissa.
📚 Lisälukemista:
fabric-cicdDokumentaatio- Fabric Git -integraatio
Azure DevOps Environments & Hyväksynnät - Azure Key Vault linked Variable Groups