Waarom CI/CD voor Dynamics 365
Een solution manueel exporteren en ergens anders importeren werkt tot de dag dat het niet meer werkt. Een pipeline maakt van elke release dezelfde release.
Herhaalbaar
Dezelfde stappen, in dezelfde volgorde, voor elke release en elke omgeving.
Traceerbaar
Elke deployment verwijst naar een commit, een work item en wie het goedkeurde.
Veilig
Kwaliteitscontroles en goedkeuringen houden problemen tegen voor ze productiegebruikers bereiken.
Snel
Kleine, frequente releases in plaats van een stresserende big bang elk kwartaal.
Een pipeline, fase per fase
Zo ziet een typische release-pipeline voor een Dynamics 365-solution eruit. Bekijk hoe ze loopt, of kies een fase om te zien wat daar gebeurt.
Commit
Een ontwikkelaar exporteert de unmanaged solution uit Dev, pakt ze uit tot bronbestanden en pusht een branch. Een pull request start de pipeline.
Omgevingsstrategie
Een aanpak met meerdere omgevingen voor kwaliteitsborging:
De solution verandert één keer van vorm, in de build, en wordt verderop nooit manueel aangepast.
Unmanaged in ontwikkeling, managed overal elders
- Ontwikkeling: Unmanaged solutions voor actieve ontwikkeling
- Build/Integratie: Geautomatiseerde build- en testomgeving
- Gebruikersacceptatietests (UAT): Validatie door de stakeholders
- Productie: Managed solutions met change control
- Sandbox: Omgevingen voor opleiding en experimenten
Solutionbeheer
- Managed vs. unmanaged solutions: Een doordachte strategie voor solutionlagen
- Solutionsegmentatie: Modulaire solutions die onafhankelijk uitgerold kunnen worden
- Solutionpatches: Hotfixes en incrementele updates
- Beheer van afhankelijkheden: Overzichtelijke afhankelijkheden en upgradepaden
Broncodebeheer en branching
De uitgepakte solution staat in Git naast de broncode van plugins en PCF, zodat elke wijziging wordt nagekeken zoals code.
- Kortlevende featurebranches, samengevoegd via pull requests met een verplichte build.
- Eén uitgepakte solution per map, zodat diffs exact tonen welk formulier, welke weergave of flow wijzigde.
- Versienummers gezet door de pipeline, nooit manueel.
- Main is altijd uitrolbaar; releases krijgen een tag.
Een Azure DevOps-pipeline in YAML
Een ingekort voorbeeld met de Power Platform Build Tools. Echte pipelines voegen de plugin-build, tests en goedkeuringen per omgeving toe.
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: 60De juiste tools kiezen
Build Tools en GitHub Actions zijn dezelfde Power Platform CLI-opdrachten in een andere verpakking; Pipelines in Power Platform is een ingebouwde Dataverse-dienst die u ook vanuit de CLI kunt starten. De keuze hangt af van waar uw team al werkt.
Pipelines in Power Platform
Ingebouwd in de maker-omgeving. Ideaal voor makers en kleinere teams die gecontroleerde deployments willen zonder een DevOps-platform te beheren. Let op: doelomgevingen moeten managed environments zijn, er is geen uitrol over tenants heen en elke solution heeft één ontwikkelomgeving.
Azure DevOps
Volledige controle met YAML-pipelines, Power Platform Build Tools, goedkeuringen, boards en testplannen op één plek.
GitHub Actions
Dezelfde mogelijkheden voor teams waarvan de code al op GitHub staat, met de Power Platform-actions van Microsoft.
CI/CD-automatisering
We zetten geautomatiseerde deploymentpipelines op met:
- Azure DevOps: Build- en releasepipelines met Power Platform Build Tools
- GitHub Actions: Git-gebaseerde workflows voor het uitrollen van solutions
- Power Platform CLI: Automatisering via de opdrachtregel voor solutionbewerkingen
- Solution Checker: Geautomatiseerde controle van codekwaliteit en best practices
Configuratie per omgeving
Een solution mag niets bevatten dat verschilt tussen omgevingen. Die waarden staan erbuiten:
- Omgevingsvariabelen voor URL's, feature flags en instellingen.
- Verbindingsverwijzingen, zodat flows de verbindingen van elke omgeving gebruiken.
- Een bestand met deploymentinstellingen per omgeving, automatisch toegepast bij de import.
- Geheimen in Azure Key Vault, waarnaar verwezen wordt in plaats van ze te kopiëren.
Geautomatiseerd testen
- Unit tests voor plugins en custom API's, uitgevoerd in de build met een gesimuleerde Dataverse-context.
- Solution Checker bij elke build, waarbij kritieke regels de pipeline laten falen.
- UI-tests voor de processen die nooit mogen breken, uitgevoerd op Test na elke deployment.
- Smoke tests na de deployment naar Productie, met het resultaat gepost in het teamkanaal.
Werkwijzen die releases saai houden
Rol uit met een service principal die als applicatiegebruiker is geregistreerd, nooit met een persoonlijk account.
Eén keer bouwen en hetzelfde artefact door elke omgeving promoveren.
Gebruik upgrades in plaats van updates wanneer componenten verdwijnen, zodat verwijderde onderdelen netjes wegvallen.
Laat geen unmanaged wijzigingen toe in Test of Productie; behandel ze als defecten.
Splits grote implementaties op in enkele solutions met duidelijke afhankelijkheden.
Genereer release notes uit de gekoppelde work items, zodat iedereen weet wat er veranderde.