Pourquoi le CI/CD pour Dynamics 365
Exporter une solution à la main pour l'importer ailleurs fonctionne jusqu'au jour où cela ne marche plus. Un pipeline fait de chaque livraison la même livraison.
Reproductible
Les mêmes étapes, dans le même ordre, pour chaque livraison et chaque environnement.
Traçable
Chaque déploiement renvoie à un commit, un élément de travail et la personne qui l'a approuvé.
Sûr
Contrôles qualité et validations arrêtent les problèmes avant qu'ils n'atteignent les utilisateurs.
Rapide
De petites livraisons fréquentes plutôt qu'un big bang stressant chaque trimestre.
Un pipeline, étape par étape
Voici la forme d'un pipeline de livraison typique pour une solution Dynamics 365. Regardez-le s'exécuter ou choisissez une étape pour voir ce qui s'y passe.
Commit
Un développeur exporte la solution non gérée depuis Dev, la décompresse en fichiers source et pousse une branche. Une pull request lance le pipeline.
Stratégie d'environnement
Approche multi-environnements pour l'assurance qualité :
La solution change de forme une seule fois, au build, et n'est jamais modifiée à la main en aval.
Non gérée en développement, gérée partout ailleurs
- Développement : Solutions non-managées pour le développement actif
- Build/Intégration : Environnement de build et de test automatisé
- Test d'acceptation utilisateur (UAT) : Validation par les parties prenantes
- Production : Solutions gérées avec contrôle des changements
- Sandbox : Environnements de formation et d'expérimentation
Gestion des solutions
- Solutions gérées vs non gérées : Stratégie appropriée de couches de solutions
- Segmentation des solutions : Solutions modulaires pour un déploiement indépendant
- Correctifs de solutions : Corrections à chaud et mises à jour incrémentales
- Gestion des dépendances : Chaînes de dépendances propres et chemins de mise à niveau
Gestion du code source et branches
La solution décompressée vit dans Git à côté du code des plugins et PCF, et chaque modification est relue comme du code.
- Des branches de fonctionnalité courtes, fusionnées par pull request avec un build obligatoire.
- Une solution décompressée par dossier, pour que les différences montrent exactement le formulaire, la vue ou le flux modifié.
- Les numéros de version sont fixés par le pipeline, jamais à la main.
- Main est toujours déployable ; les livraisons sont étiquetées.
Un pipeline Azure DevOps en YAML
Un exemple simplifié avec les Power Platform Build Tools. Les vrais pipelines ajoutent le build des plugins, les tests et les validations par environnement.
1trigger: 2 branches: 3 include: [ main ]4 5pool: 6 vmImage: windows-latest7 8variables: 9 SolutionName: ContosoCore10 11stages: 12- stage: Build13 jobs: 14 - job: Pack15 steps: 16 - task: PowerPlatformToolInstaller@217 - task: PowerPlatformPackSolution@218 inputs: 19 SolutionSourceFolder: src/$(SolutionName)20 SolutionOutputFile: $(Build.ArtifactStagingDirectory)/$(SolutionName)_managed.zip21 SolutionType: Managed22 - task: PowerPlatformChecker@223 inputs: 24 authenticationType: PowerPlatformSPN25 PowerPlatformSPN: pp-build26 FilesToAnalyze: $(Build.ArtifactStagingDirectory)/*.zip27 RuleSet: 0ad12346-e108-40b8-a956-9a8f95ea18c928 - publish: $(Build.ArtifactStagingDirectory)29 artifact: drop30 31- stage: DeployTest32 dependsOn: Build33 jobs: 34 - deployment: Import35 environment: Test36 strategy: 37 runOnce: 38 deploy: 39 steps: 40 - checkout: self41 - task: PowerPlatformToolInstaller@242 - task: PowerPlatformImportSolution@243 inputs: 44 authenticationType: PowerPlatformSPN45 PowerPlatformSPN: pp-test46 SolutionInputFile: $(Pipeline.Workspace)/drop/$(SolutionName)_managed.zip47 UseDeploymentSettingsFile: true48 DeploymentSettingsFile: settings/test.json49 HoldingSolution: true50 AsyncOperation: true51 MaxAsyncWaitTime: 6052 - task: PowerPlatformApplySolutionUpgrade@253 inputs: 54 authenticationType: PowerPlatformSPN55 PowerPlatformSPN: pp-test56 SolutionName: $(SolutionName)57 AsyncOperation: true58 MaxAsyncWaitTime: 60Choisir les outils
Build Tools (v2) et les GitHub Actions sont les mêmes commandes PAC CLI dans des enveloppes différentes ; Pipelines dans Power Platform est un service Dataverse intégré que vous pouvez aussi déclencher depuis la CLI. Le choix dépend de l'endroit où votre équipe travaille déjà.
Pipelines dans Power Platform
Intégrés à l'expérience maker. Idéaux pour les makers et les petites équipes qui veulent des déploiements encadrés sans gérer de plateforme DevOps. Les environnements cibles doivent être des environnements gérés, sans déploiement entre locataires, avec un seul environnement de développement par solution.
Azure DevOps
Contrôle total avec pipelines YAML, Power Platform Build Tools, validations, tableaux et plans de test au même endroit.
GitHub Actions
Les mêmes possibilités pour les équipes dont le code est déjà sur GitHub, avec les actions Power Platform de Microsoft.
Automatisation CI/CD
Nous mettons en place des pipelines de déploiement automatisés avec :
- Azure DevOps : Pipelines de build et release avec les outils Power Platform
- GitHub Actions : Workflows basés sur Git pour le déploiement de solutions
- Power Platform CLI : Automatisation en ligne de commande pour les opérations de solutions
- Solution Checker : Validation automatique de la qualité du code et des bonnes pratiques
Configuration par environnement
Une solution ne doit rien contenir qui diffère d'un environnement à l'autre. Ces valeurs vivent à l'extérieur :
- Des variables d'environnement pour les URL, indicateurs de fonctionnalité et paramètres.
- Des références de connexion, pour que les flux utilisent les connexions de chaque environnement.
- Un fichier de paramètres de déploiement par environnement, appliqué automatiquement à l'import.
- Les secrets dans Azure Key Vault, référencés plutôt que copiés.
Tests automatisés
- Des tests unitaires pour plugins et API personnalisées, exécutés au build avec un contexte Dataverse simulé.
- Solution Checker à chaque build, les règles critiques faisant échouer le pipeline.
- Des tests d'interface pour les processus qui ne doivent jamais casser, lancés sur Test après chaque déploiement.
- Des tests de fumée après le déploiement en production, avec le résultat publié dans le canal de l'équipe.
Des pratiques pour des livraisons sans surprise
Déployer avec un principal de service enregistré comme utilisateur d'application, jamais avec un compte personnel.
Construire une fois et promouvoir le même artefact dans tous les environnements.
Utiliser des mises à niveau plutôt que des mises à jour quand des composants sont supprimés, pour qu'ils disparaissent proprement.
N'accepter aucune modification non gérée en test ou en production ; les traiter comme des anomalies.
Découper les grandes mises en œuvre en quelques solutions aux dépendances claires.
Générer les notes de version à partir des éléments de travail liés, pour que chacun sache ce qui a changé.