Retour à Dynamics 365 CE

Dynamics 365 Customer Engagement

CI/CD & ALM

Comment une modification voyage de l'environnement de développement à la production : automatisée, vérifiée et reproductible.

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.

Journal du pipeline
$ pac solution export --name ContosoCore --path out/ContosoCore.zip
$ pac solution unpack --zipfile out/ContosoCore.zip --folder src/ContosoCore --packagetype Both
$ git push origin feature/case-routing
✓ Pull request opened, pipeline triggered

Stratégie d'environnement

Approche multi-environnements pour l'assurance qualité :

DevNon gérée
Build
Test
UAT
Production

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.

mainfeature/case-routingfeature/sla-rulesv1.4v1.5
  • 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.

azure-pipelines.yml
1trigger:
2 branches:
3 include: [ main ]
4
5pool:
6 vmImage: windows-latest
7
8variables:
9 SolutionName: ContosoCore
10
11stages:
12- stage: Build
13 jobs:
14 - job: Pack
15 steps:
16 - task: PowerPlatformToolInstaller@2
17 - task: PowerPlatformPackSolution@2
18 inputs:
19 SolutionSourceFolder: src/$(SolutionName)
20 SolutionOutputFile: $(Build.ArtifactStagingDirectory)/$(SolutionName)_managed.zip
21 SolutionType: Managed
22 - task: PowerPlatformChecker@2
23 inputs:
24 authenticationType: PowerPlatformSPN
25 PowerPlatformSPN: pp-build
26 FilesToAnalyze: $(Build.ArtifactStagingDirectory)/*.zip
27 RuleSet: 0ad12346-e108-40b8-a956-9a8f95ea18c9
28 - publish: $(Build.ArtifactStagingDirectory)
29 artifact: drop
30
31- stage: DeployTest
32 dependsOn: Build
33 jobs:
34 - deployment: Import
35 environment: Test
36 strategy:
37 runOnce:
38 deploy:
39 steps:
40 - checkout: self
41 - task: PowerPlatformToolInstaller@2
42 - task: PowerPlatformImportSolution@2
43 inputs:
44 authenticationType: PowerPlatformSPN
45 PowerPlatformSPN: pp-test
46 SolutionInputFile: $(Pipeline.Workspace)/drop/$(SolutionName)_managed.zip
47 UseDeploymentSettingsFile: true
48 DeploymentSettingsFile: settings/test.json
49 HoldingSolution: true
50 AsyncOperation: true
51 MaxAsyncWaitTime: 60
52 - task: PowerPlatformApplySolutionUpgrade@2
53 inputs:
54 authenticationType: PowerPlatformSPN
55 PowerPlatformSPN: pp-test
56 SolutionName: $(SolutionName)
57 AsyncOperation: true
58 MaxAsyncWaitTime: 60

Choisir 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

1

Déployer avec un principal de service enregistré comme utilisateur d'application, jamais avec un compte personnel.

2

Construire une fois et promouvoir le même artefact dans tous les environnements.

3

Utiliser des mises à niveau plutôt que des mises à jour quand des composants sont supprimés, pour qu'ils disparaissent proprement.

4

N'accepter aucune modification non gérée en test ou en production ; les traiter comme des anomalies.

5

Découper les grandes mises en œuvre en quelques solutions aux dépendances claires.

6

Générer les notes de version à partir des éléments de travail liés, pour que chacun sache ce qui a changé.

Prêt à transformer votre relation client ?

Voyons ensemble comment Dynamics 365 CE peut accélérer votre transformation numérique. Nous serions heureux de vous aider à concevoir, développer et optimiser votre solution Dynamics 365.