Our open source DevOps accelerators will help you deliver high quality Dynamics 365 solutions
You can mass-produce hardware; you cannot mass-produce software; you cannot mass-produce the human mind.
— Michio Kaku
The Capgemini Microsoft team have created several DevOps accelerators and tools to assist in the delivery of high-quality Dynamics 365 projects. We believe agility, automation, repeatability and traceability are key components of delivering enterprise scale Dynamics 365 projects. To give back to the community, we have now made these accelerators open source and look forward to the community feedback and contributions.
These accelerators have been field-tested on numerous complex and large scale projects and have enabled Capgemini to improve development and deployment processes through the introduction of automation. The greater level of control the accelerators provide, especially around consistency of deployment, has improved reliability and quality when delivering software to production.
What is an accelerator and why use them?
At Capgemini we help our clients transform their operations and services they deliver to customers and citizens. While every client is different, and the systems we build are specific to their needs and requirements broadly the processes that bring quality, agility and scale are similar. There are many common activities needed to enable teams of functional consultants and developers to work together, build robust solutions, test the code and move it between environments with a high degree of predictability:
- Creating environments
- Building solutions
- Importing solutions
- Exporting and importing data (reference and transactional)
- Source control for Dynamics configurations and customisations.
The driving force behind the creation of the accelerators was our frustrations with the existing processes and tools. Our aim was to resolve issues encountered by the team on a number of different projects. For example:
- Why can’t we store all Dynamics 365 configurations and customisations in source control (not just code)?
- What’s stopping us deploying configurations, customisations and data into an environment?
- How can multiple teams work on a Dynamics 365 project at the same time and still find problems quickly?
- How can we help the team configure and customise in line with best practices?
- Could we have a release report which shows the customisations we have created?
We have used the accelerators on on-premise and cloud enterprise scale delivery projects for over 5 years, and the experience gained has been fed back into improving them over time.
There are similar accelerators on the market (e.g. Dynamics 365 Azure DevOps Build and Release tasks) but our implementations were generally done well before the community ones were created. They can be used on their own or together with existing accelerators.
Why open source the accelerators?
Why are we making these accelerators open source? Why not keep them to ourselves?
This quote from Linus Torvalds (the inventor of Linux) illustrates the potential of open source:
“Given enough eyeballs, all bugs are shallow”
But more than that, Dynamics deliveries have been slow to implement good engineering best practices that are common on bespoke builds. On smaller scale implementations perhaps this was seen as ‘unprofitable’ or an unnecessary overhead. However, given the enterprise scenarios Dynamics 365 is now delivering it simply won’t be possible to achieve quality and agility without strong processes and significant automation.
As a result, we want to share these tools to help the Dynamics community deliver high quality solutions, the success of which will only fuel Dynamics 365 to even greater heights.
Each accelerator can be used in isolation or together to provide a rich DevOps pipeline.
Below is a summary of each accelerator and a link to the NuGet package (or Visual Studio extension). Detailed documentation and the source code is available on GitHub. You can get source code by clicking ‘Source repository’ on the right of the NuGet package page.
The gallery for all our available NuGet packages.
Custom Code Analysers built with the Roslyn Engine automate checks for software engineering best practices. This is useful for any project where C# code is used — e.g. inside plugin or custom workflow activity. For more details see the GitHub home project: dotnet-code-analysis
A simple but powerful method for extracting and recomposing Dynamics 365 configurations and customisations. The extension uses PowerShell scripts that can seamlessly extract configurations/customisations from a Dynamics 365 instance and then subsequently rebuild them into a zipped managed and unmanaged Solution file ready for import. For more details see the GitHub home project: msbuild-xrm-sourcecontrol
This Data Migration project provides a flexible, powerful engine based on the XRM SDK, which allows CRM Dynamics Configuration, Reference and Seed data to be extracted, stored in version control and loaded to target instances.
The engine supports two file formats — JSON and CSV — and supports the migration of simple reference data entities (e.g. Titles, Countries) to more complex scenarios around Security Roles and Teams. This allows data to be managed in the same way as code, and a release can be created that can load the required data to support the released functionality. For more details see the GitHub home project: xrm-datamigration
The Xrm Solution Audit supports a full analysis of specific components contained within any managed solutions in Microsoft Dynamics 365. This audit solution can target multiple versions of Microsoft Dynamics — CRM 2011, 2015, 2016 and Dynamics 365. For more details see the GitHub home project: xrm-solutionaudit
Microsoft Dynamics CRM Package Deployer lets administrators deploy packages on Microsoft Dynamics 365 (online) and Dynamics 365 (on-premise) instances. Package deployer is used when you are committing changes on different environments.
With package deployer, you can deploy more than one solution in the same installation package, and you’ll be able to select the order for them to be deployed.
It extends the standard Microsoft Package Deployer from the SDK with custom deployment logic, which can support better solution dependencies. It adds additional options after the deployment to load data created with Capgemini.Xrm.DataMigration.Engine, enable/disable required workflows and plugin steps, activate and set default SLAs. For more details see the GitHub home project: xrm-packagedeployer
A SpecFlow bindings library for Dynamics 365. The aim of this project is to make Dynamics 365 test automation easier, faster and more accessible. It does this by providing a library of generic SpecFlow step bindings that adhere to test automation best practices.
This allows effective automated tests to be written without a requiring developers to be proficient with both Dynamics 365 and test automation. For more details see the GitHub home project: specflow-xrm-bindings
The Azure.DevOps.Extension.Xrm.Build extension provides tasks for use in Azure DevOps build pipelines. These tasks enable a Continuous Integration pipeline to be created for Dynamics 365. For more details see the GitHub home project: azure-devops-extension-xrm-build
The Azure.DevOps.Extension.Xrm.Release extension provides tasks for use in Azure DevOps build pipelines. These tasks enable a Continuous Deployment pipeline to be created for Dynamics 365. They expose Capgemini.Xrm.DataMigration.Engine and Capgemini.Xrm.Audit.Reports as easy to use pipeline tasks to automate your post deployment configuration and documentation generation. For more details see the GitHub home project: azure-devops-extension-xrm-release
At Capgemini we’re passionate about delivering high quality Microsoft solutions and these accelerators are an important part of our approach.
We’ll provide some more detailed blogs on each accelerator in the coming weeks. In the meantime, you can look at the code and documentation now and try them out yourself.
We look forward to your feedback.