Automatiser le déploiement de rapports Power BI à l’aide d’Azure DevOps

Power BI est une solution d’analyse de données conçue par Microsoft. Pensée dans une logique de self-service BI, elle vise à rendre autonome les utilisateurs métier sur les phases de conception et développement de rapports interactifs.

Les rapports développés sont partagés au travers d’un portail web : https://app.powerbi.com.

Cette publication peut se faire manuellement depuis le client lourds Power BI Desktop, ou via le portail web directement. La gestion des déploiements, des versions de rapports ou encore des environnements cibles peut rapidement s’avérer fastidieuse.

Afin de sécuriser la chaine de développement et simplifier la réalisation et le suivi des publications, il est pertinent de mettre en place un pipeline de déploiement automatisé.

Au travers de cet article, nous allons voir comment mettre en place une chaine CI/CD pour Power BI avec Azure DevOps. Nous verrons comment :

  • Enregistrer et paramétrer une application dans Azure Active Directory
  • Configurer les tenant et Workspace Power BI
  • Enregistrer des développements Power BI dans un Repo DevOps
  • Configurer et créer un pipeline de build/release


Configuration des environnements

Enregistrement d’une nouvelle application

Pour accéder au contenu et aux API du service Power BI, vous devez inscrire une application qui s’authentifiera auprès de votre Azure Active Directory.

Pour ce faire, suivez ces instructions :

  •  Se connecter à l’Azure Portal
  •  Sélectionner Azure Active directory, puis App Registration
  • Cliquer sur New Registration
  • Donner un nom et une description à l’application, puis sélectionner le type de compte coché (cf. Figure 1) avant de l’enregistrer

Une image contenant texte Description générée automatiquement

Figure 1 : Créer une application

Une fois l’application créée, nous pouvons accéder à sa vue d’ensemble :

Figure 2 : Overview de l’application Power Bi créée

Depuis l’application, sélectionner Certificats & Secrets et générer un nouveau secret client :

Une image contenant texte Description générée automatiquement

Figure 3 : Création d’un secret client pour l’application

La dernière étape consiste à paramétrer les permissions de l’application afin de lui donner la possibilité d’accéder en lecture et écriture au Service Power BI.

Pour ce faire :

  • Cliquer sur API permissions, puis Add a permission
  • Rechercher Power BI Service
  • Sélectionner Application permissions
  • Cocher Tenant.ReadAll et Tenant.ReadWriteAll
  • Valider les permissions

Figure 4 : Paramétrage des permissions de l’application

NB : les autorisations ajoutées peuvent nécessiter la validation par un administrateur. Si cela est le cas :

  • Se rendre dans l’Azure Active Directory, puis sélectionner Entreprise Application
  • Rechercher et cliquer sur l’application PowerBI
  • Dans le panneau latéral, cliquer sur Permissions situé dans l’onglet Security
  • Cliquer enfin sur Grant admin consent for <VotreSouscription>

 

Configuration du tenant Power BI

L’application enregistrée précédemment au niveau de l’Azure Active Directory communique avec les APIs Power BI via un Service Principal qui lui est assigné.

Cette communication doit être préalablement autorisée au niveau du tenant Power BI pour être pleinement fonctionnelle.

Pour ce faire :

  • Se connecter au portail Power BI
  • Cliquer sur l’icône des paramètres en haut à droite et sélectionner Admin portal
  • Cliquer sur Tenant settings et autoriser l’option Allow service principals to use Power BI APIs présente dans la partie Developer settings

Une image contenant texte Description générée automatiquement

Figure 5 : Autorisation du Service Principal à accéder aux APIs Power BI

Configuration d’un Workspace Power BI

La seconde étape consiste à autoriser l’application à interagir avec un Workspace donné, afin de lui permettre par la suite de publier des rapports dans le cadre du pipeline de déploiement automatisé.

L’attribution des droits est similaire à un utilisateur classique, à savoir :

  • Sélectionner le Workspace cible
  • Cliquer sur les 3 points verticaux en haut à droite
  • Cliquer sur Workspace access

Figure 7 : Accès à la fenêtre de paramétrage des accès du Workspace

  • Rechercher l’application dans Azure AD et ajouter les droits Administrateur ou Collaborateur à minima

Figure 8 : Attribution du rôle Contributor à l’app PowerBI


Synchronisation depuis Azure DevOps


Enregistrement des rapports Power BI dans un repo Azure DevOps

Azure Repos
est un système de contrôle de version basé sur git et faisant partie de la solution Azure DevOps. Coupler les sources de développement à ce service permet leur sauvegarde et suivi dans
le temps, tout en facilitant le travail collaboratif.

De plus, il offre la possibilité de mettre en place des chaines CI/CD pour le déploiement des sources vers différents environnements.

NB : l’utilisation d’Azure Repos comme contrôleur de source n’est pas obligatoire, et peut être substitué par BitBucket, TFCV, GitHub, …

Dans le cadre de cet article, nous n’allons pas détailler les actions de création, synchronisation et utilisation d’un repo, mais simplement rappeler les étapes entrant dans la sauvegarde d’un rapport Power BI dans un repo Azure DevOps :

  • Créer un nouveau repo Power BI dans lequel seront gérées les différentes versions des rapports

Figure 9 : Initialisation d’un repo Power BI dans Azure DevOps

  • Cloner le Repo Power BI sur le serveur local en cliquant sur Clone in VS Code avant de choisir un répertoire local :

Figure 10 : Clonage du repo Power BI dans un répertoire local

Une image contenant texte Description générée automatiquement

Figure 11 : Accès au contenu du répertoire Power BI depuis Visual Studio Code

  • Créer un rapport Power BI dans le répertoire en question. Dans cet exemple, nous ajoutons le rapport suivant :
    – Libellé : AdventureWorks_InternetSales.pbix
    – Source : Base de données Azure Analysis Services

Une image contenant texte Description générée automatiquement

Figure 12 : Ajout du rapport AdventureWorks_InternetSales.pbix

  • Réaliser un commit puis un push des modifications réalisées dans le répertoire vers le repo Azure :

Une image contenant texte Description générée automatiquement

Figure 13 : Enregistrement des modifications dans Azure Repo

  • Vérifier que le rapport est bien présent dans le repo depuis l’interface web Azure DevOps :

Une image contenant texte Description générée automatiquement

Figure 14 : Rapport Power BI sauvegardé dans DevOps


Création de pipelines de déploiement Azure DevOps

Extension d’automatisation

Grâce aux API REST Power BI, il est possible d’interagir avec le Service Power BI afin de réaliser de nombreuses tâches telles que :

  • Import / export de rapport Power BI Desktop (.pbix)
  • Rafraichissement d’un dataset
  • Création / suppression de Workspace
  • Gestion des accès à un Workspace (Utilisateur, Groupe, Service Principal)

Dans le cadre de l’implémentation de pipelines CI/CD, nous sommes amenés à utiliser ces API afin de configurer l’automatisation des déploiements.
Afin de simplifier ce processus, Il existe des extensions DevOps dédiées.
Microsoft a mis à disposition depuis décembre 2021 l’extension Power BI automation tools.

Une image contenant texte Description générée automatiquement

  • Figure 15 : Power BI Automation tools

Cette extension propose un ensemble d’opérations d’API pour les pipelines de déploiement :

  •  Créer/supprimer un pipeline
  • Attribuer/retirer un Workspace au pipeline
  • Ajouter un utilisateur à un pipeline et/ou Workspace
  • Déployer des Dataflows, Datasets, Reports et Dashboard dans un Workspace

Cependant, elle présente pour l’heure certaines limitations qui peuvent s’avérer bloquantes :

  • Ne prend pas en charge la mise à jour des chaines de connexion des sources du rapport
  • Fonctionne uniquement sur des Workspace Premium
  • Est toujours en version Preview

Une autre extension, développée et mise à disposition par Maik VAN DER GAAG, permet également de réaliser facilement des chaines CI/CD. Nommée Power BI Actions, celle-ci offre la possibilité d’automatiser un grand nombre de tâches telles que :

  • Chargement / import de rapports Power BI
  • Création / suppression de Workspace Power BI
  • Ajout d’utilisateurs, Group ou Service Principal à un Workspace Power BI
  • Mise à jour des chaines de connexion d’un rapport et rafraichissement automatisé
  • Etc…

Répondant à l’ensemble de nos besoins et ne nécessitant pas d’abonnement Premium, c’est la solution pour laquelle nous allons opter pour la suite de cet article.

Ainsi, la première étape de la création de pipelines de déploiement automatisé consiste à installer cette extension dans notre organisation DevOps. Pour ce faire :

  • Depuis Organization Settings, cliquer sur Extensions présent dans l’onglet General.
    Cliquer ensuite le bouton Browse marketplace



Figure 16 : Recherche de l’extension depuis la marketplace

  • Rechercher Power BI Actions, la sélectionner puis cliquer sur Get it free

Une image contenant texte Description générée automatiquement

Figure 17 : Ajout de l’extension

  • Sélectionner l’organisation DevOps à laquelle ajouter l’extension puis lancer son installation

Figure 18 : Installation de l’extension pour l’organisation sélectionnée

Connexion au Service Power BI

Avant de créer le pipeline de déploiement, nous devons configurer la connexion entre DevOps et leService Power BI. Celle-ci, nomméeService connection, est à paramétrer depuis DevOps :

  • Depuis l’écran Project Settings du projet Power BI, cliquer sur Service connections présent dans l’ongletPipelines avant de sélectionner Create service connection
  • Rechercher Power BI Service connection et passer à l’étape suivante

Figure 19 : Création d’une connexion à Power BI

  • Depuis l’écran de configuration, choisir Service Principal comme méthode d’authentification, ainsi que l’environnement Public, puis préciser les informations suivantes :
    Tenant ID : Directory (tenant) ID de l’app Power BI créée en début d’article
    Client ID : Application (client) ID de l’app Power BI
    Client Secret : Value du secret de l’app Power BI

Figure 20 : Configuration du service connection

Création du pipeline de build (CI)

Ce pipeline a pour objectif de capturer l’ensemble des sources du repo (ici le rapport .pbix) afin de les publier sous forme d’artefacts de déploiement. Ce sont ensuite ces artefacts qui seront déployés sur les différents environnements via le pipeline de release.

La création de ce pipeline se fait par le biais des étapes suivantes :

  • Depuis le projet DevOps, sélectionnerPipelines puis cliquer sur Create Pipeline
  • Choisir Azure Repos Git, puis le repo PowerBI et enfin Starter pipeline

Figure 21 : Configuration du pipeline de build

Dans l’écran de Review du pipeline YAML, ajouter le code suivant :

trigger:
- main

pool:
  vmImage: 'windows-latest'

steps:
- task: CopyFiles@2
  displayName: "---=== Power BI Reports ===---"
  inputs:
    SourceFolder: '$(Build.SourcesDirectory)'
    Contents: '**.pbix'
    TargetFolder: '$(Build.ArtifactStagingDirectory)'
    Overwrite: true
- task: PublishBuildArtifacts@1
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)'
    ArtifactName: 'PowerBIReport'
    publishLocation: 'Container'

 

NB : Ce script se charge de copier les fichiers .pbix présents dans le repository pour les publier en tant qu’artefacts dans le répertoire PowerBIReport.

  • Cliquer enfin sur Save and run. Le pipeline s’exécutera alors avec succès

Création du pipeline de release (CD)

Ce pipeline définit l’ensemble des étapes à suivre pour déployer les datasets et rapports Power BI (.pbix) vers les environnements cibles.

L’utilisation de l’extension Power BI Actions précédemment installée permet de faciliter son implémentation, en proposant une interface graphique de configuration des différentes tâches du pipeline.

Pour cet exemple, nous souhaitons :

  • Déployer un rapport Power BI Desktop (.pbix) sur un Workspace de production
  • Modifier la chaine de connexion au cube Azure Anaysis Services afin de pointer vers la base de données de production.

La création d’un tel pipeline suit les étapes suivantes :

  • Depuis le projet DevOps, sélectionnerRelease dans l’onglet Pipelines, cliquer sur New pipeline puis Empty job

Figure 22 : Création d’un pipeline de release vide

  • Cliquer sur Add an artifact.
  • Depuis la fenêtre de paramétrage, choisir Build comme Source type afin de récupérer le rapport publié par le pipeline de build créé à l’étape précédente.
  • Compléter les informations Project etSource, choisir Latest pour Default version afin de déployer automatiquement la dernière version du rapport, puis valider.

Figure 23 : Configuration des artefacts à déployer

  • Une fois l’artefact paramétré, cliquer sur 1 job, 0 task du Stage 1 afin de configurer les tâches de déploiement.
  • Au niveau de l’Agent job, cliquer le +, puis rechercher Power BI Actions avant de cliquer sur Add :

Figure 24 : Ajout d’une tâche Power BI Actions

  • La première tâche consiste à publier le rapport sur le Workspace de production. Renseigner les informations suivantes :
    Power BI service connection : Service connection configuré précédemment
    Action : Upload Power BI report
    Workspace name : Libellé du Workspace de destination
    – Source file : chemin complet vers le rapport à déployer.

Celui-ci est facilement accessible depuis le menu « » car l’artefact a été paramétré plus tôt

Figure 25 : Configuration de la tâche de publication du rapport

  • Ajouter une nouvelle tâche Power BI Actions.
  • Cette seconde tâche consiste à mettre à jour la chaine de connexion à la base de données Azure Analysais Services (AAS). Les informations suivantes sont attendues :
    Power BI service connection : Service connection configuré précédemment
    Action : Update datasource connection
    Workspace name : Libellé du Workspace de destination
    Dataset name : Libellé du rapport Power BI
    Datasource type : Type de la source de données (ici Analysis Services)
    Old Server : Chaine de connexion au server préconfiguré dans le rapport
    New server : Chaine de connexion vers le server AAS de destination
    Old dataset : Libellé de la base de données sur le server source
    New dataset : Libellé de la base de données sur le server de destination

Une image contenant texte Description générée automatiquement

Figure 26 : Configuration de la tâche de mise à jour de la chaine de connexion de la source AAS

  • Sauvegarder le pipeline de release.

Une image contenant texte Description générée automatiquement

Figure 27 : Sauvegarde du pipeline de release

  • Afin de tester notre pipeline, nous devons créer une release avant de la déployer. Pour ce faire, cliquer sur Create release à côté du bouton Save.
  • Dans la nouvelle fenêtre, sélectionner l’étape tout juste créée (renommée ici Publish Power BI Report) puis cliquer sur Create.

Figure 28 : Création d’une release

  • La release Release-1 a été créée.
  • Sélectionner l’étape non déployée, avant de cliquer sur Deploy.

Figure 29 : Déploiement du pipeline de release

  • Une fois le déploiement achevé, un résumé des actions est disponible, ainsi que les logs associées.

Figure 30 : Déploiement du rapport et modification de la chaine de connexion réalisés avec succès

  • Enfin, nous retrouvons bien les rapports et datasets publiés dans notre espace de travail.

Une image contenant texte Description générée automatiquement

Figure 31 : Rapport Power BI accessible depuis le Workspace de production

Variabilisation des paramètres du pipeline

Lors de la création du pipeline de release, nous avons paramétré un certain nombre d’informations, telles que les serveurs et base de données AAS, ou encore le Workspace de destination Power BI.

Ces informations, codées « en dur », ne facilitent pas la maintenance et l’évolutivité de la chaine.

Ainsi, il est recommandé de les variabiliser à l’aide des variables de pipelines.

Depuis l’écran Pipeline variables de l’onglet Variables du pipeline de release, il est possible de paramétrer les variables qui seront par la suite appelées depuis les tâches.

Celles-ci sont constituées de :

  • Name : Libellé de la variable
  • Value : Valeur de la variable
  • Lock : Masquer ou non la valeur de la variable
  • Scope : Périmètre sur lequel la variable est disponible

Afin d’illustrer leur utilisation, nous faisons évoluer le pipeline précédent en ajoutant une nouvelle étape de publication du rapport sur l’environnement de développement.

Puis, nous créons les 7 variables suivantes :

Figure 32 : Variables du pipeline de release

Les 5 premières variables, communes aux deux étapes, sont rattachées au périmètre Release.

A l’inverse, les libellés des Workspace de DEV et PROD sont associés uniquement à leur étape respective.

Enfin, nous modifions les tâches précédemment développées en remplaçant les valeurs inscrites « en dur » par leur équivalent sous forme de variables.
Tout d’abord pour la tâche de publication du rapport :

Figure 33 : Variabilisation des informations de paramétrage de la publication du rapport

Puis pour la tâche de modification de la chaine de connexion :

Une image contenant texte Description générée automatiquement

Figure 34 : Variabilisation des informations de paramétrage de la modification de la chaine de connexion

Une fois les modifications sauvegardées, la release recréée puis déployée, nous obtenons une chaine CI/CD complète de publication et paramétrage en DEV et PROD d’un rapport Power BI Desktop « commité » dans un repo Azure :

Figure 35 : Déploiement du rapport et modification de la chaine de connexion sur deux environnements


Conclusion

Au travers de ce cas d’usage, nous avons vu comment réaliser de bout en bout une chaine CI/CD de déploiement de rapport Power BI Desktop (.pbix).

Par le biais d’un pipeline de build / release, il est possible d’automatiser les tâches de publication des rapports. Cette solution, au-delà du côté pratique, présente de nombreux avantages :

  • Fiabilisation du processus de publication
  • Versioning des rapports
  • Choix de la version du rapport à publier, permettant un rollback à tout moment
  • Gouvernance du service Power BI simplifiée

Laisser un commentaire