Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Tutorial verwenden Sie eine Azure-DevOps-Pipeline, die die Massenimportelementdefinitions-API nutzt, um Elemente aus einem Git-Ordner bereitzustellen. Der Git-Ordner enthält Elementdefinitionen aus einem Entwicklungsarbeitsbereich , der mit Git verbunden ist, und die Pipeline stellt sie in einem Testarbeitsbereich bereit, der nicht mit Git verbunden ist.
Voraussetzungen
- Azure DevOps Azure Project und Repository + Berechtigungen zum Konfigurieren der Azure DevOps-Pipeline und Erstellen von Variablengruppen.
-
Name des Fabric-Arbeitsbereichs :
bulk-tutorial-test– Zielarbeitsbereich für die Bereitstellung - Dienstprinzipal (SPN) – Eine Entra-ID (Azure AD)-App-Registrierung mit einem Clientgeheimnis muss die Client-ID, das Clientgeheimnis und die Mandanten-ID haben.
- Der Dienstprinzipal verfügt über die Berechtigung "Mitwirkender " für
bulk-tutorial-testden Fabric-Arbeitsbereich. - Fabric-Administratoreinstellung für Dienstprinzipal – Ein Fabric-Administrator muss "Dienstprinzipale können Fabric-APIs verwenden" im Fabric Admin Portal unter Mandanteneinstellungen aktivieren.
💡 Tipp: Um den Dienstprinzipalzugriff in Fabric zu aktivieren, muss ein Fabric-Administrator "Dienstprinzipale können Fabric-APIs verwenden" im Fabric Admin Portal unter Mandanteneinstellungen aktivieren.
Hintergrund
Bei einer Git-basierten Bereitstellung mit einer Build-Umgebung erfolgen Deployments über Fabric-Arbeitsbereiche hinweg aus einem zentralen Git-Repository. Behandle die Definitionen von Fabric-Artikeln als Code und bewirbe sie durch einen strukturierten Release-Flow. Alle Umgebungen – Entwicklung, Test und Produktion – sind auf denselben Hauptzweig ausgerichtet, während jede Stufe unabhängig durch dedizierte Build- und Release-Pipelines bereitgestellt wird.
Pipelines beginnen in der Regel mit dem Exportieren von Fabric-Elementdefinitionen aus einem Entwicklungsarbeitsbereich mithilfe der Fabric Git-Integration. Diese Definitionen können dann in einer Buildumgebung durch automatisierte Prüfungen, Pullanforderungsüberprüfungen und Richtlinienerzwingung vor der Heraufführung überprüft werden. (In diesem Lernprogramm nicht behandelt).
Während der Bereitstellung ruft die Pipeline die Massenimport-API auf, um genehmigte Elementdefinitionen in den Zielarbeitsbereich zu importieren. Die API unterstützt sowohl das Erstellen neuer Elemente als auch das Aktualisieren vorhandener Elemente, wobei die integrierte Abhängigkeitsbehandlung von Fabric verwendet wird, um sicherzustellen, dass Elemente in der richtigen Reihenfolge bereitgestellt werden. Dies ermöglicht konsistente, wiederholbare Bereitstellungen in Test- und Produktionsumgebungen ohne manuelle Eingriffe.
Schritt 1. Vorbereiten eines Beispiel-Repositorys
- Laden Sie die ZIP-Datei bulk-api-demo-zip auf Ihren lokalen Computer herunter.
- Das Zip-Beispiel enthält:
- Azure DevOps-Pipelinedatei (
deploy-using-bulk-api.yml) - Beispielarbeitsbereich mit wenigen Fabric-Elementdefinitionsdateien (
bulk-tutorial-dev)
- Azure DevOps-Pipelinedatei (
- Klonen Sie Ihr Azure DevOps-Repository auf Ihrem lokalen Computer, und entpacken Sie die Datei in diesen Ordner.
- Pushen des neuen Inhalts an das Azure DevOps-Repository
Schritt 2. Ausführen Azure DevOps Pipeline
2.1 Variablegruppe: bulkapi-group
In dieser Variablengruppe werden die Dienstprinzipaldetails gespeichert, bei denen die Azure Pipeline authentifiziert wird.
Schritte zum Erstellen
- Navigieren Sie zu Pipelines → Library in Ihrem ADO-Projekt.
- Wählen Sie + Variablengruppe.
- Benennen Sie ihn:
bulkapi-group - Fügen Sie die folgenden Variablen hinzu:
| Variablenname | Beschreibung |
|---|---|
AZURE_TENANT_ID |
Dienstprinzipal – Mandanten-ID |
AZURE_CLIENT_ID |
Dienstprinzipal – Client-ID |
AZURE_CLIENT_SECRET |
Dienstprinzipal – Clientgeheimnis (als geheim markieren) |
2.2 Einrichten der Azure DevOps-Pipeline
Erstellen Sie eine Pipeline in Azure DevOps, die auf die YAML-Datei deploy-using-bulk-api.yml in Ihrem Repository verweist.
Schritte
- Navigieren Sie zu Pipelines → Pipelines → Neue Pipeline.
- Wählen Sie Azure Repos Git aus, und wählen Sie Ihr Repository aus.
- Wählen Sie vorhandene YaML-Datei für Azure-Pipelines aus.
- Ändern Sie den pool entsprechend dem vorhandenen Agentpool, z. B. um Microsoft-Hosted Agent (linuxbasiert) zu verwenden:
vmImage: ubuntu-latest - Laufen
- Nach Abschluss der Pipeline enthält der Fabric-Arbeitsbereich
bulk-tutorial-testdie bereitgestellten Elemente.
Tipp
Wenn die Pipeline zum ersten Mal ausgeführt wird, fordert ADO Sie möglicherweise auf, den Zugriff auf die Variablengruppen und Umgebungen zu autorisieren. Ein ADO-Administrator kann diese unter pipeline → Einstellungen vorab autorisieren.
Tipp
Diese Pipeline veranschaulicht die Bereitstellung in einer Testumgebung. Die Produktionsbereitstellung kann einem ähnlichen Ablauf folgen, wobei nach erfolgreicher Überprüfung in der Testumgebung ein Genehmigungsgate hinzugefügt wird.
3. Detaillierte Analyse des Codes: ADO Pipeline YAML
File:deploy-using-bulk-api.yml - befindet sich im Azure DevOps Repository.
Die Pipeline besteht aus drei Schritten, die jeweils einen unterschiedlichen Vorgang ausführen. Im Folgenden finden Sie jeden Schritt mit Anmerkungen.
3.1 Pipeline-Auslöser und Konfiguration
Definieren Sie, wann die Pipeline ausgeführt wird, und konfigurieren Sie den Agentpool und die Variablen.
trigger:
branches:
include:
- main
pool:
vmImage: ubuntu-latest
variables:
- group: bulkapi-group
- name: test_workspace_to_deploy
value: "bulk-tutorial-test"
| Setting | Purpose |
|---|---|
trigger |
Pipeline bei jedem Push in den main-Branch ausführen |
pool |
Verwenden eines Microsoft gehosteten Ubuntu-Agents |
variables.group |
Verweisen Sie auf die Variablegruppe, die bulkapi-group SPN-Anmeldeinformationen enthält |
test_workspace_to_deploy |
Anzeigename des Zielarbeitsbereichs |
3.2 Schritt 1 – Authentifizieren mit Fabric-API
Abrufen eines Bearertokens von Microsoft Entra ID mithilfe von Dienstprinzipalanmeldeinformationen.
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'
Eingabe: SPN-Anmeldeinformationen aus variabler Gruppe (AZURE_TENANT_ID, AZURE_CLIENT_ID, AZURE_CLIENT_SECRET)
Ausgabe:FABRIC_TOKEN — ein Bearertoken, das als geheime Pipelinevariable gespeichert ist und von nachfolgenden Schritten verwendet wird.
API aufgerufen:POST https://login.microsoftonline.com/{tenantId}/oauth2/v2.0/token
3.3 Schritt 2 – Erstellen der Nutzlast und Aufrufen der Massenimport-API
Dieser Schritt führt drei Vorgänge aus: Auflösen der Arbeitsbereichs-ID, Erstellen der Anforderungsnutzlast aus lokalen Dateien und Aufrufen der Massenimport-API.
3.3.1 Arbeitsbereichs-ID auflösen
Suchen Sie die Zielarbeitsbereichs-ID anhand des Anzeigenamens mithilfe der 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 (Arbeitsbereichsname)
Ausgabe:WORKSPACE_ID — die GUID des Zielarbeitsbereichs
API aufgerufen:GET https://api.fabric.microsoft.com/v1/workspaces
3.3.2 Base64-kodierten Anforderungshauptteil erstellen
Durchlaufen Sie jede Datei im Quellordner, codieren Sie Inhalte in Base64, und fügen Sie den JSON-Anforderungstext zusammen.
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"
Eingabe: Lokale Dateien im bulk-tutorial-dev Ordner
Ausgabe:REQUEST_BODY — JSON-Nutzlast mit allen Elementdefinitionsteilen, base64-codiert
Schlüsseloption:allowPairingByName: false — Elemente werden mit der logischen ID (aus .platform Dateien) abgeglichen, nicht nach Anzeigename.
3.3.3 Aufrufen der Massenimport-API
Senden Sie die Nutzlast an die Bulk Import API und speichern Sie die Vorgangs-ID für das Polling.
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
Eingabe:FABRIC_TOKEN, WORKSPACE_ID, REQUEST_BODY
Ausgabe:OPERATION_ID — der Bezeichner des lang andauernden Vorgangs, der als Pipelinevariable gespeichert wird
API aufgerufen:POST https://api.fabric.microsoft.com/v1/workspaces/{workspaceId}/items/bulkImportDefinitions?beta=true
Antwortbehandlung:
-
200 OK— Synchroner Abschluss der Bereitstellung (Ergebnis im Textkörper) -
202 Accepted— Die Bereitstellung erfolgt asynchron; fragen Sie den Status überOPERATION_IDab -
4xx— Bereitstellung fehlgeschlagen; Fehlerdetails im Antworttext
3.4 Schritt 3 – Umfrage zum Abschluss der Bereitstellung
Fragen Sie den Endpunkt für Vorgänge mit langer Laufzeit so lange ab, bis die Bereitstellung abgeschlossen ist und das Ergebnis verfügbar ist.
- 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'
Eingabe:FABRIC_TOKEN, OPERATION_ID
Ausgabe: JSON-Bereitstellungsergebnis, das den Status pro Element enthält
API aufgerufen:GET https://api.fabric.microsoft.com/v1/operations/{operationId}/result
Ergebnisstruktur: Die Antwort enthält importItemDefinitionsDetails – ein Array mit Ergebnissen pro Element:
{
"importItemDefinitionsDetails": [
{
"itemId": "c4dd0eac-...",
"itemDisplayName": "MyReport",
"itemType": "Report",
"itemLogicalId": "88436e65-...",
"operationType": "Create",
"operationStatus": "Succeeded"
}
]
}
| Feld | Beschreibung |
|---|---|
itemId |
Die Arbeitsbereichselement-ID (GUID) des bereitgestellten Elements |
itemDisplayName |
Der Anzeigename des Elements |
itemType |
Der Fabric-Artikeltyp (zum Beispiel Report, SemanticModel, ) Notebook |
itemLogicalId |
Die logische ID aus der .platform Datei |
operationType |
Create für neue Elemente, Update für vorhandene Elemente |
operationStatus |
Succeeded oder Failed |
4. Zusammenfassung
In dieser Anleitung wurde die Verwendung der Bulk Import Item Definition API als Deployment-Mechanismus veranschaulicht. Es wurde gezeigt, wie Elemente aus einem Entwicklungsarbeitsbereich bereitgestellt werden, der mit einem Git-Repository verbunden ist, indem der Repositoryinhalt extrahiert, in die erforderliche API-Eingabe umgewandelt und in einem Test-Fabric Arbeitsbereich bereitgestellt wird, der nicht mit Git verbunden ist.
Verwendete API-Vorgänge
| Step | API | Purpose |
|---|---|---|
| Authenticate | POST login.microsoftonline.com/.../oauth2/v2.0/token |
Bearer-Token mithilfe von SPN-Anmeldeinformationen abrufen |
| Arbeitsbereich auflösen | GET api.fabric.microsoft.com/v1/workspaces |
Arbeitsbereichs-ID anhand des Anzeigenamens ermitteln |
| Bereitstellen von Elementen | POST api.fabric.microsoft.com/v1/workspaces/{id}/items/bulkImportDefinitions |
Importieren aller Elementdefinitionen in einem einzelnen Aufruf |
| Umfrageergebnis | GET api.fabric.microsoft.com/v1/operations/{id}/result |
Warten, bis die asynchrone Bereitstellung abgeschlossen ist |