Team Development Best Practices for Kentico CMS Brian McKeiver, BizStream, Co-Owner & Kentico MVP Goals • Work efficiently as a group • Make your life easier as a Kentico Developer • Hone your craft, make your customers happier Cowboy Goal 1 vs. Team Goal 2 You don’t have to burn the place down Goal 3 Gladwell’s 10,000-Hour Rule When you see this… Let’s talk about this over a beer Here We Go: First Time Setup • Tools of the Trade – Local Workstation – Visual Studio 2010+ – SQL Server Management Studio 2008+ – Source Control – KenticoCMS_7_0.exe • Goal: Install Kentico locally Reasons to Install Locally • • • • • Documentation API CHM Kentico Installation Manager (KIM) Import Toolkit App Pool Recycles are controlled Source Control with Kentico • Code Considerations – One branch or many ? – Depends on team size and goals • Database Considerations – Leverage built in version control, check-in & check-out – Why external SQL versioning products may not work Running Local Code • Debug with VS2012 • HTTP Trace via Fiddler • Your exceptions are yours and yours alone • No danger of breaking the build Shared Development Database • Key idea for Team Development Dev 1 Kentico CMS SQL DB Dev 2 Shared Development Instance • Running full copy of your site in TEST http://mysite.devserver.com Kentico CMS Shared Dev http://localhost:42 http://localhost:42 Dev 1 Dev 2 QA / Test Server Code QA 1 QA / Test can see changes faster Dev 1 Kentico CMS SQL DB Dev 2 Actual Code Slinging Grow Your Craft There is no Try, only Do -Yoda Jedi Master Jedi Knight Padawan Youngling Naming Standards Matter • Prefix 3 - 4 characters for project name – Followed by fully spelled out, descriptive name • Display Names – Upper Case with spaces to delimit words – Prefixing with a special character is recommended because the project specific or custom object names will roll to the top of the Kentico selectors. • Object Code Names – No Spaces, no special characters, Upper camel case – 100% Relying on the automatic naming is not recommended • Use the word “Custom” in Views / Stored Procs – Use System Tables GUI in SiteManager to create them Making it work: Custom Code Locations • 2 Strategies – ~/App_Code/<Custom Code> • project code as sub folder – ~/CMSModules/<Custom Code> – ~/CMSWebParts/<Custom Code> or – ~/App_Code/_framework/<Custom Code> – ~/_framework/<Custom Code>/CMSModules – ~/_framework/<Custom Code>/CMSWebParts Making it work: Site Settings Kentico Site Settings for Team Dev • Check in - check out (Object Lock) • Object Versioning Blog Post Object Locking & Versioning Available for: • CSS Stylesheets • E-mail Templates • Page Layouts • Page Templates • Transformations • Web part Containers • Web part Layouts Workflow for Content Tree Warning 1 “Undo Checkout” is NOT your Friend Warning 2 You will not be able to see Web Part settings if another developer has a Page Template checked out or if it is checked in. Tip: See All Checked Out Objects My Desk tab to the rescue! Virtual Objects with Kentico • Check out to File System • Can still use Kentico UI or External Source Control • Apply Changes to move back to DB Virtual Objects: What it does Use any IDE / Source Control client you want while editing externally in the file system. Virtual Objects: How it Saves You • Kentico Cache and Object Locking – 2 Devs land on the same checked in page template at same time – One checks out the template, the second goes to get coffee – One is working, second comes back and checks out – Two checked out copies because working at localhost Virtual Objects Gotchas Object Sync Message, respect it. Deployment Mode with Kentico When the deployment mode is OFF • location of virtual objects depends on the Source control options. When the deployment mode is ON • virtual objects are moved from the database to the file system on your disk. Target folder is ~/CMSVirtualFiles. Continuous Integration (CI) Lots of Options: Jenkins Team Foundation Server Team City Value of CI Technical Value: • Saves Time • Automatic build and deploy capabilities • Exercise / hone your craftsmanship • Adds responsibility to check ins / commits • Gives you metrics on code base Value of CI 2 Business Value: • Reduces Risk • Reduces overhead across overall development process • Provides better Quality Assurance • Raises project visibility How to use CI with Kentico • Automatic polling – Build every X mins • Hooks – Build when events are triggered – Most common hook is: when a commit occurs • Most CI systems can spawn a Selenium Test – Automated /Recorded HTTP request What to watch out for in upgrade / hotfix • Files will be overwritten if you do not segment your customizations Don’t Rely on the System Transforms • What if someone re-installs a Module ? • POOF • Cloning is your Friend Deployment Options Import / Export (multiple) Import / Export (single) • Almost every object is export-able • Look for the small grey dropdown arrow to expand the menu Import / Export Gotchas • Update Documents • Linked Documents • License Issues Content Stage One click deployment, YES Please! Sign me up. Content Stage Gotchas • • • • • Stage a task while target server has it checked out ** Javascript Files in Site Manager - don’t go ** Custom Views / Stored Procs - don’t go ** Tasks can get out of control Large Files – http://mcbeev.com/...Quick-Tip-Content-Staging-and-Large-Files (yes this is a shameless plug) – <add key="CMSMediaFileMaxStagingSize" value="1024" /> ** Hint Hint Kentico 8 people Web Farm Sync • Sync everything everywhere • Good for initial step in project lifecycle as far as developers go • Also great for uptime and reliability in Production Environments Deployment Setting: Macro Security • A note about Connection Strings and Macro Security • Ever seen this on your page ? • |(user)mcbeev|(hash)f2c71936597eea6f50f961a70949934 59af24e51cf154f75b41032875f810dc0" • Use the appSetting key: • <add key="CMSHashStringSalt" value="e68b9ad6-a461-4707-8e3e-ece73f03dd02" /> Team Dev: A Few Other Best Practices • Keep Zone IDs and Web Part Control IDs as short as possible. Use Web Part Titles instead • Avoid Ad-hoc Templates, other devs won’t know about them Working with the Marketing People • Yes even Content Admins have a right to play in the CMS • Separate environments for DEV and Content Admins helps • Use Content Staging to keep in Sync Wrapping It Up Team Development is supported better than ever in Kentico 7.0! Assimilate as a Team. Resistance is Futile. Team Development FTW. You’ve Learned • Work efficiently as a group • Make your life easier as a Kentico Developer • Hone your craft, make your customers happier Questions Thank You Email: bmckeiver@bizstream.com Web: http://www.bizstream.com Blog: http://www.mcbeev.com Twitter: @mcbeev LinkedIn: http://www.linkedin.com/in/brianmckeiver