"Continuous Delivery with Windows and .Net" (free download) is a short book by Matthew Skelton and Chris O'Dell that should be seen as a very useful complement to Jez Humble and Dave Farley's "Continuous Delivery" book for those that work in a Windows and .Net environment.
Although you'll find in the first and last chapters the rationale behind Continuous Delivery and the impact it has on organizational structures, the bulk of the book focuses on providing an overview of the tools that enable a successful Continuous Delivery implementation.
In fact, it can be said that the main strength of the book lies in acting as an one-stop shop for learning about Windows-friendly tools. As the authors point out, "our book acts as an addendum to Jez and Dave’s book to encourage many more teams working with Windows and .NET to adopt Continuous Delivery". Chapters two to six address many of the engineering practices required by Continuous Delivery: version control; continuous integration; deployment pipelines; monitoring and infrastructure automation.
From LateRooms.com's deployment cycle time 700x improvement by adopting deployment pipelines to JustGiving's wholesale infrastructure automation that allows it to meet peaks in demand, you'll find real user testimonials throughout the book making the case for each of the recommended practices.
Version control tools and practices are described on chapter two. You'll get a short overview of the most common tools in the Windows world, such as Git or TFS. The authors discuss some options to avoid long-lived branching, anathema to continuous integration, such as feature toggles. The chapter finishes with some advice on package management, a practice that is somewhat recent on Windows, when compared to Linux. Chapter three presents a thorough list of continuous integration and build automation tools, as well as .Net-specific advice on how to structure your .Net projects (e.g.: "Use exactly one .sln file per component or service”). Deployment pipelines are the focus of chapter four, which includes a description of common deployment techniques - blue/green and canary deployments, decoupling file delivery and feature activation - and automated database changes and migrations. Monitoring gets its own chapter, starting with the motivation to go beyond the collection of performance counters, which is the most common way to gather metrics on Windows, and adopt other monitoring and application performance management to log aggregation and enable developer metrics collection. Finally, the authors describe infrastructure automation patterns and best practices on Windows, which still requires a different mindset and approach from Linux infrastructure automation.
InfoQ talked with the authors to learn more about the state of Continuous Delivery on Windows and .Net.
InfoQ: Why did you feel the need to write this book?
Chris O'Dell: I wanted to combat the commonly accepted opinion that continuous delivery is for Linux and that .Net is incapable of supporting such a development practice. It is true that it once was difficult, but times have changed and Microsoft have made massive improvements to embrace CD.
Matthew Skelton: I had two main reasons for writing the book: first, when Jez Humble and Dave Farley wrote their book Continuous Delivery in 2010, many of the patterns they described were tricky to implement with Windows/.NET. Since then, the automation and API features of Windows & .NET and related tooling have improved hugely. Second, many of the clients I have been working with over the last few years use Windows & .NET, so I noticed several things that seemed common to many organisations using these technologies; writing a book was an effective way to gather together this learning and insight.
InfoQ: What do you want the readers to take from the book?
Chris O'Dell: A nudge to getting started with Continuous Delivery on the Windows and .Net stack.
Matthew Skelton: Continuous Delivery with Windows and .NET is not only possible in 2016 but actually quite straightforward, at least from the technology side!
InfoQ: For a long time, the Windows and .Net environments lagged behind the Linux world on Continuous Delivery and DevOps tooling and support. Has the gap closed or are there still any areas lacking maturity?
Chris O'Dell: The last few revisions of ASP.Net and .Net framework have included some architectural changes which make the deployment of web apps much easier as all the packages can be included in the deployed artifact. With the development of .Net Core, this will be made even easier as the binds between .Net and Windows will be cut.
Matthew Skelton: the biggest gap is in the support for containers. Since we wrote the book (back in August 2015) there have been several major advances from Microsoft, including SQL Server on Linux (!), support for Docker on Windows, and things like Windows Nano. It’s great to see so much innovation in the Windows space- it’s just a shame we could not include it in the book, as we would never have finished writing!
InfoQ: Looking at it from the other side, do you see any Windows and .Net capabilities that are missing in Linux?
Chris O'Dell: I’m afraid I can’t answer that confidently as I haven’t spent as much time with Linux as I have with Windows.
Matthew Skelton: I believe that .NET is an excellent runtime, so it’s wonderful to see support for non- Windows OSes like OSX and Linux via .NET Core. The new multi-platform support in Visual Studio Code is also great, because the rich features of Visual Studio have started to become available for everyone.
InfoQ: The ops culture in Windows and Linux have been historically very different, reflecting the different philosophies of the operating systems. Do you find that the Windows culture presents a different set of challenges for a Continuous Delivery initiative?
Chris O'Dell: Probably, although I don’t have much experience on the Linux side to fully compare.
With many CD implementations in companies with both Windows and .Net development stacks, I’ve seen the adoption of Linux servers providing monitoring, metrics and logging tooling.Matthew Skelton: In some organisations, the traditional Windows-only (or Microsoft-only) culture is still present, but we’re starting to see greater pragmatism come in as people experiment with other technologies, particularly in the auxiliary tooling space (logging, metrics, monitoring, etc).
InfoQ: On organizations that have both Linux and Windows ecosystems, what is the best approach for Continuous Delivery? Unify the implementation as much as possible or treat the ecosystems separately?
Chris O'Dell: It would depend on their reasoning for choosing each implementation along with their ability to provide ongoing support and then picking the best implementation that works for them.
Matthew Skelton: It’s not feasible to say that one or the other approach is ‘better’. What’s important is that teams have the tools and time to experiment and learn (using metrics and logs) which approach works best for them.
InfoQ: What do you find most exciting in the short/medium term as well as in the long term for Continuous Delivery on Windows?
Chris O'Dell: .Net Core is looking to be a game changer for .Net. The separation of the .Net Framework from Windows will open the platform up to a whole host of new developers and deployment strategies. Also, as I mostly use cloud services, I’m very keen on seeing Windows Nano too. It will decrease the footprint of images and hopefully speed up provisioning times.
Matthew Skelton: The availability of containers and lightweight hosts like Windows Nano will give significant new options for teams working with Windows. Obviously, we’ll see huge continuing innovation on the Azure platform too. I also expect tools like AppVeyor and Octopus to further evolve to support additional Windows/.NET/Azure features.