Refactoring development

Ramblings from the trenches...

View on GitHub

Deployment is a subject dear to anyone’s heart who’s current deployment system is sub-optimal. Safe rapid deployment is at the heart of the dev-ops movement.

Spec

What do we want out of a good deployment system?

In many ways we want to consider managing environments as a whole, rather than concerning ourselves with the implementation of the individual machines.

Windows Implementations

I focus on windows here as it seems a harder problem to solve. Linux seems to have apt-get package management systems that coupled with Puppet or some other newer deployment system seem to manage most of the above.

For Windows the landscape is changing rapidly. It started with NuGet which is a dll dependency finder for .Net, but which has now been used as a distribution mechanism by Chocolatey. This then gives us a package manager for Windows, with dependencies thrown in.

It’s good, but it’s not enough to install MSIs, we have to ensure the other bits like setting up shares, configuring firewalls and the like are also done if we’re going to truly have one click deployment.

Enter stage left, Powershell DSC.

Powershell is a puppet-esk declarative config for specifying how a machine should be configured (think /etc for windows). It can install Chocolatey packages and configure the other bits and pieces.

The down side: It’s lacking a UI / website, which means the barrier for entry is still a bit high. On the plus side it looks like this will be the de-facto way of configuring windows, with hundreds of DSC modules coming out (wave after wave of them).

There are other alternatives, CA’s Nolio and Octopus Deploy being some that seem to be getting a reasonable amount of purchase (and Puppet can use DSC modules if you’re in a hybrid environment). Indeed Octopus Deploy has recently open sourced its configuration modules (which someone will make callable from Puppet & DSC no doubt).

And just recently MicroSoft has announced their first steps of Linux support for Powershell DSC. Puppet really will have competition!

(Interestingly Windows getting built-in support for SSH will make things like Puppet on Windows easier to set-up - this can only be a good thing!)


Why am I not talking about Windows Nano server and Docker in this article? It’s because you need to be able to automate building an image before you deploy it across lots of servers.

You wouldn’t take a build from a developers machine and put it in production, you’d take it from the CI server. It’s the same here - don’t put an image you can’t recreate into production - it will bite back. (Let’s call this the George’s Marvelous Medicine principle - reproducibility is key! )

Once you can do this, it’s time to move up the stack and have fun with containers.