Usually during standard process of development you would have several environments like DEV, QA, UAT/STAGING and so on. The more environments you have - the more cases and differences in deployment you will need to implement. In this post I would try to describe how you could simplify your life implementing CI for Sitecore based projects.
Almost immediately you would face a question of content synchronizations. There are a lot of options that you could use:
- Content Package - the most obvious variant one could come up with however you cannot automate it out of the box. Automation of content packages deployment is quite complex task as you need invent versioning for them, need to store in them in VCS
- Unicorn project - solution based on content serialization. You will need to integrate some event handlers on content changes in order to keep sitecore serialization folder up to date. It will allow you to update content via http call from CI as well.
- Hedgehog TDS - this is an extension to Visual Studio that does a lot more that just serialization. You could merge content, sync from VS generate code based on templates and so on. With CI it could be integrates quite easily as you just need to build project with specific setting.
- Database project - more or less standard variant when it came to DB sync, but with Sitecore it would not work as good as expected. You will not have any control of sync of sitecore items and after some period of time it will be extremely long operation especially if you have some media items in DB.
From my practice TDS - is the most useful tools, but it is not free so you need to decide for yourself.
Moreover, when it comes to users and role synchronization - none of this tools will, except DB project (but I would not recommend it due to reasons above). To solve this issue I've come up with several pipelines that could be started on Sitecore init and check roles needed or even create them. The most suitable place for this operation is
initialize pipeline.
Processor implementation for this pipeline is quite simple - we just chech and create roles if the do not exist (see gist below).
Users creation is little bit more complex and require different configurations for each environment. To do this you will need transforms for include configurations. I will describe tools and approach in following articles.