Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
I det här självstudium använder du en Azure DevOps-pipeline som använder Bulk import item definition API:et för att distribuera objekt från en Git-mapp. Git-mappen innehåller objektdefinitioner från en utvecklingsarbetsyta som är ansluten till Git och pipelinen distribuerar dem till en testarbetsyta som inte är ansluten till Git.
Förutsättningar
- Azure DevOps Azure Projekt och databas + behörigheter för att konfigurera en Azure DevOps-pipeline och skapa variabelgrupper.
-
Fabric-arbetsytans namn:
bulk-tutorial-test– målarbetsyta för distributionen - Tjänstens huvudnamn (SPN) – En Entra-ID (Azure AD) appregistrering med en klienthemlighet, måste ha klient-ID, klienthemlighet och hyresgäst-ID.
- Tjänstens huvudnamn har deltagarbehörighet för
bulk-tutorial-testFabric-arbetsyta - Infrastrukturadministratörsinställning för tjänstens huvudnamn – En infrastrukturresursadministratör måste aktivera "Tjänstens huvudnamn kan använda Infrastruktur-API:er" i infrastrukturadministrationsportalen under Klientinställningar
💡 Tips: För att aktivera åtkomst till tjänstens huvudnamn i Infrastrukturresurser måste infrastrukturresursadministratören aktivera "Tjänstens huvudnamn kan använda Infrastruktur-API:er" i infrastrukturadministrationsportalen under Klientinställningar.
Bakgrund
I Git-baserad distribution med en byggmiljö kommer distributioner över Fabric-arbetsytor från ett centralt Git-arkiv. Behandla definitioner av Fabric-produkter som kod och marknadsför dem genom ett strukturerat releaseflöde. Alla miljöer – Dev, Test och Prod – är anpassade till samma huvudbranch, medan varje steg distribueras oberoende genom att använda dedikerade build- och releasepipelines.
Pipelines börjar vanligtvis med att exportera Fabric-artikelsdefinitioner från en utvecklingsarbetsyta med hjälp av Fabric Git Integration. Dessa definitioner kan sedan verifieras i en byggmiljö genom automatiserade kontroller, granskningar av pull-begäranden och principframtvingande före befordran. (Beskrivs inte i den här självstudien).
Under distributionprocessen anropar pipelinen massimport-API:et för att överföra godkända artikeldefinitioner till målarbetsytan. API:et stöder både skapande av nya objekt och uppdatering av befintliga objekt på plats, samtidigt som du förlitar dig på Fabric inbyggda beroendehantering för att säkerställa att objekt distribueras i rätt ordning. Detta möjliggör konsekventa, repeterbara distributioner i test- och produktionsmiljöer utan manuella åtgärder.
Steg 1. Förbered ett exempelarkiv
- Ladda ned zip-filen bulk-api-demo-zip till din lokala dator
- Zip-exemplet innehåller:
- Azure DevOps-pipelinefil (
deploy-using-bulk-api.yml) - Exempel på arbetsyta med några definitionsfiler för Fabric-objekt (
bulk-tutorial-dev)
- Azure DevOps-pipelinefil (
- Klona Azure DevOps-lagringsplatsen till den lokala datorn och packa upp filen till den här mappen.
- Skicka det nya innehållet till Azure DevOps-lagringsplatsen
Steg 2. Kör Azure DevOps-pipeline
2.1 Variabelgrupp: bulkapi-group
Den här variabelgruppen lagrar information om tjänstens huvudnamn som Azure Pipeline autentiserar med.
Steg för att skapa
- Gå till Pipelines → Library i ditt ADO-projekt.
- Välj + Variabelgrupp.
- Ge den namnet:
bulkapi-group - Lägg till följande variabler:
| Variabelnamn | Beskrivning |
|---|---|
AZURE_TENANT_ID |
Tjänstens huvudnamn – klientorganisations-ID |
AZURE_CLIENT_ID |
Tjänstens huvudnamn – klient-ID |
AZURE_CLIENT_SECRET |
Tjänstens huvudnamn – klienthemlighet (markera som hemlighet) |
2.2 Konfiguration av Azure DevOps-pipeline
Skapa en pipeline i Azure DevOps som refererar till deploy-using-bulk-api.yml YAML-filen i ditt repo.
Instruktioner
- Gå till Pipelines → Pipelines → Ny pipeline.
- Välj Azure-lagringsplatser Git och välj din lagringsplats.
- Välj befintlig YAML-fil för Azure-pipelines.
- Ändra pool enligt befintlig agentpool, till exempel för att använda Microsoft-Hosted agent (Linux-baserad) användning:
vmImage: ubuntu-latest - Run
- När pipelinen har slutförts innehåller Fabric-arbetsytan
bulk-tutorial-testde distribuerade objekten.
Tips/Råd
Första gången pipelinen körs kan ADO uppmana dig att auktorisera åtkomst till variabelgrupper och miljöer. En ADO-administratör kan förauktorisera dessa under Pipeline → Inställningar.
Tips/Råd
Den här pipelinen visar distribution till en testmiljö. Produktionsdriftsättningen kan följa ett liknande flöde, med ett godkännandesteg tillagt efter lyckad validering i testmiljön.
3. Djupdykning i kod: YAML för ADO-pipeline
File:deploy-using-bulk-api.yml – finns på den Azure DevOps lagringsplatsen.
Pipelinen består av tre steg som var och en utför en distinkt åtgärd. Nedan visas varje steg med anteckningar.
3.1 Utlösare för pipeline och konfiguration
Definiera när pipelinen körs och konfigurera agentpoolen och variablerna.
trigger:
branches:
include:
- main
pool:
vmImage: ubuntu-latest
variables:
- group: bulkapi-group
- name: test_workspace_to_deploy
value: "bulk-tutorial-test"
| Inställningen | Purpose |
|---|---|
trigger |
Kör pipeline vid varje push till main-grenen |
pool |
Använda en Microsoft värdbaserad Ubuntu-agent |
variables.group |
Referera till variabelgruppen bulkapi-group som innehåller SPN-autentiseringsuppgifter |
test_workspace_to_deploy |
Visningsnamn för målarbetsytan |
3.2 Steg 1 – Autentisera med Fabric API
Hämta en bärartoken från Microsoft Entra ID med inloggningsuppgifter för tjänsthuvudnamn.
stages:
- stage: Deploy_Test
jobs:
- job: Deploy
displayName: 'Deploy using Bulk-API'
steps:
- checkout: self
- script: |
TOKEN=$(curl -s -X POST \
"https://login.microsoftonline.com/$(AZURE_TENANT_ID)/oauth2/v2.0/token" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "client_id=$(AZURE_CLIENT_ID)&client_secret=$(AZURE_CLIENT_SECRET)&scope=https://api.fabric.microsoft.com/.default&grant_type=client_credentials" \
| jq -r '.access_token')
echo "##vso[task.setvariable variable=FABRIC_TOKEN;issecret=true]$TOKEN"
displayName: 'Get Fabric API token'
Input: SPN-autentiseringsuppgifter från variabelgruppen (AZURE_TENANT_ID, AZURE_CLIENT_ID, AZURE_CLIENT_SECRET)
Utdata:FABRIC_TOKEN — en bearer-token som lagras som en hemlig pipeline-variabel och används i efterföljande steg.
API med namnet:POST https://login.microsoftonline.com/{tenantId}/oauth2/v2.0/token
3.3 Steg 2 – Skapa nyttolast och anropa API för massimport
Det här steget utför tre åtgärder: lös arbetsyte-ID:t, skapa nyttolasten för begäran från lokala filer och anropa API:et massimport.
3.3.1 Lös arbetsyte-ID
Leta upp mål-arbetsytans ID utifrån visningsnamn med hjälp av Fabric REST API.
WORKSPACE_ID=$(curl -s -H "Authorization: Bearer $(FABRIC_TOKEN)" \
"https://api.fabric.microsoft.com/v1/workspaces" \
| jq -r '.value[] | select(.displayName=="'"$(test_workspace_to_deploy)"'") | .id')
if [ -z "$WORKSPACE_ID" ] || [ "$WORKSPACE_ID" = "null" ]; then
echo "##vso[task.logissue type=error]Workspace '$(test_workspace_to_deploy)' not found"
exit 1
fi
echo "Workspace ID: $WORKSPACE_ID"
Input:FABRIC_TOKEN, test_workspace_to_deploy (arbetsytans namn)
Utdata:WORKSPACE_ID — GUID:et för målarbetsytan
API med namnet:GET https://api.fabric.microsoft.com/v1/workspaces
3.3.2 Skapa base64-kodad begärandetext
Iterera genom varje fil i källmappen, koda innehållet i Base64 och montera JSON-begärandetexten.
BASE_DIR="$(Build.SourcesDirectory)/bulk-tutorial-dev"
PARTS_JSON="[]"
while IFS= read -r -d '' FILE; do
REL_PATH="/${FILE#$BASE_DIR/}"
PAYLOAD=$(base64 -w 0 "$FILE" 2>/dev/null || base64 "$FILE")
PARTS_JSON=$(echo "$PARTS_JSON" | jq \
--arg path "$REL_PATH" \
--arg payload "$PAYLOAD" \
'. + [{path: $path, payload: $payload, payloadType: "InlineBase64"}]')
done < <(find "$BASE_DIR" -type f -print0)
REQUEST_BODY=$(jq -n \
--argjson parts "$PARTS_JSON" \
'{
definitionParts: $parts,
options: {
allowPairingByName: false
}
}')
echo "Request body built with $(echo "$PARTS_JSON" | jq length) parts"
Input: Lokala filer i bulk-tutorial-dev mappen
Utdata:REQUEST_BODY — JSON-nyttolast som innehåller alla delar av objektdefinitionen, base64-kodad
Nyckelalternativ:allowPairingByName: false — objekt matchas av logiskt ID (från .platform filer), inte med visningsnamn.
3.3.3 Anropa API:et för massimport
Skicka data till Bulk Import API och hämta operations-ID:t för pollning.
API_URL="https://api.fabric.microsoft.com/v1/workspaces/$WORKSPACE_ID/items/bulkImportDefinitions?beta=true"
echo "Calling Bulk Import Item definition API: $API_URL"
HEADER_FILE=$(mktemp)
RESPONSE=$(curl -s -w "\n%{http_code}" -X POST \
"$API_URL" \
-H "Authorization: Bearer $(FABRIC_TOKEN)" \
-H "Content-Type: application/json" \
-D "$HEADER_FILE" \
-d "$REQUEST_BODY")
HTTP_CODE=$(echo "$RESPONSE" | tail -1)
BODY=$(echo "$RESPONSE" | sed '$d')
echo "HTTP Status: $HTTP_CODE"
echo "$BODY" | jq . 2>/dev/null || echo "$BODY"
OPERATION_ID=$(grep -i '^x-ms-operation-id:' "$HEADER_FILE" | awk '{print $2}' | tr -d '\r\n ')
echo "Operation ID: $OPERATION_ID"
rm -f "$HEADER_FILE"
echo "##vso[task.setvariable variable=OPERATION_ID]$OPERATION_ID"
if [ "$HTTP_CODE" -ge 400 ]; then
echo "##vso[task.logissue type=error]Bulk import failed with HTTP $HTTP_CODE"
exit 1
fi
Input:FABRIC_TOKEN, WORKSPACE_ID, REQUEST_BODY
Utdata:OPERATION_ID — identifieraren för den långvariga åtgärden, lagrad som en pipelinevariabel
API med namnet:POST https://api.fabric.microsoft.com/v1/workspaces/{workspaceId}/items/bulkImportDefinitions?beta=true
Svarshantering:
-
200 OK— distributionen slutfördes synkront (resulterar i brödtext) -
202 Accepted— distributionen är asynkron. avsökning med hjälp avOPERATION_ID -
4xx— driftsättningen misslyckades; feldetaljer i svarstexten
3.4 Steg 3 – Kontrollera att driftsättningen har slutförts
Fråga av slutpunkten för den långvariga åtgärden tills distributionen har slutförts och resultatet är tillgängligt.
- script: |
echo "Polling operation: $(OPERATION_ID)"
while true; do
RESULT=$(curl -s -H "Authorization: Bearer $(FABRIC_TOKEN)" \
"https://api.fabric.microsoft.com/v1/operations/$(OPERATION_ID)/result")
HAS_DETAILS=$(echo "$RESULT" | jq \
'has("importItemDefinitionsDetails") and (.importItemDefinitionsDetails != null)')
if [ "$HAS_DETAILS" = "true" ]; then
echo "Operation complete. Result:"
echo "$RESULT" | jq .
break
fi
echo "Operation not yet completed. Waiting 10 seconds..."
sleep 10
done
displayName: 'Poll LRO until complete'
Indata:FABRIC_TOKEN, OPERATION_ID
Utdata: JSON med distributionsresultat som innehåller status för varje objekt
API med namnet:GET https://api.fabric.microsoft.com/v1/operations/{operationId}/result
Resultatstruktur: Svaret innehåller importItemDefinitionsDetails – en matris med resultat per objekt:
{
"importItemDefinitionsDetails": [
{
"itemId": "c4dd0eac-...",
"itemDisplayName": "MyReport",
"itemType": "Report",
"itemLogicalId": "88436e65-...",
"operationType": "Create",
"operationStatus": "Succeeded"
}
]
}
| Fält | Beskrivning |
|---|---|
itemId |
Arbetsytans objekt-ID (GUID) för det distribuerade objektet |
itemDisplayName |
Objektets visningsnamn |
itemType |
Fabric-objektstypen (till exempel, Report, SemanticModel, Notebook) |
itemLogicalId |
Det logiska ID:t från filen .platform |
operationType |
Create för nya objekt, Update för befintliga objekt |
operationStatus |
Succeeded eller Failed |
4. Sammanfattning
Den här handledningen visade hur du använder Bulk Import Item Definition API:et som distributionsmekanism. Den visade hur du distribuerar objekt från en dev-arbetsyta som är ansluten till en Git-lagringsplats genom att extrahera lagringsplatsens innehåll, omvandla det till nödvändiga API-indata och distribuera det till ett test Fabric arbetsyta som inte är ansluten till Git.
API-åtgärder som används
| Step | API | Purpose |
|---|---|---|
| Autentisera | POST login.microsoftonline.com/.../oauth2/v2.0/token |
Hämta ägartoken med SPN-autentiseringsuppgifter |
| Lös arbetsytan | GET api.fabric.microsoft.com/v1/workspaces |
Slå upp arbetsyte-ID utifrån visningsnamn |
| Distribuera föremål | POST api.fabric.microsoft.com/v1/workspaces/{id}/items/bulkImportDefinitions |
Importera alla objektdefinitioner i ett enda anrop |
| Omröstningsresultat | GET api.fabric.microsoft.com/v1/operations/{id}/result |
Vänta tills asynkron distribution har slutförts |