Cowboy in the desert.

Octopus Deploy vs. Puppet/Chef

On the support site, Dmitry asks:

Hi, how can we argue that Octopus Deploy is a way much better than Puppet or similar tools?

I've been kicking our system administrators for several years, trying to make them to setup automatic deployments of services. In the end I've given up. Then I've heard about Octopus Deployment and did everything myself using Octopus. We're quite happy with Octopus, we've bought a license and I don't think we need anything else. But recently our system administrators have told me that they're going to setup automatic deployments using Puppet and that it looks like we'll have to abandon our Octopus deployments and move to Puppet.

Octopus vs. Puppet

I'm not going to argue that Octopus is "better" than Puppet or Chef; instead, I'm going to argue that Octopus and Puppet are different. In fact, I don't think there's any reason to choose.

Puppet and Chef are configuration management tools. They work by describing the state that a system should be in, and they take steps to ensure systems are in that state.

For example, imagine you were managing 30 web servers. Rather than using remote desktop to configure them all, installing Windows components, enabling features, and so on, you could use Puppet or Chef to specify:

  • All web servers should have IIS configured with the Windows Authentication module enabled
  • MSMQ should be installed and running
  • A folder at C:\Logs should exist and be writable by a given user account

Octopus Deploy, by contrast, is a release automation tool. Octopus doesn't work on "desired state"; rather, it's an orchestration tool that runs steps in a very specific order. It's a lot closer to tools like Nolio or UrbanDeploy (sans the price tag or army of consultants required to install it :-)) than it is to Puppet or Chef.

Octopus is ideal for deployments that look like this:

  1. Redirect load balancer to a "down for maintenance" site
  2. Remove web servers from load balancer
  3. Stop application servers
  4. Backup and upgrade the database
  5. Start application servers
  6. Add web servers back to load balancer

Or this:

  1. Send a message to put the application into "read-only" mode
  2. Apply database migrations
  3. Rolling deployment for all web servers:
    1. Remove from load balancer
    2. Update web application to latest version
    3. Add back to load balancer
  4. Notify and pause while someone inspects the system to ensure everything is OK
  5. Send a message to re-enable write mode

Puppet/Chef work well if you can describe your automation in terms of a checklist, and order/time isn't important. Octopus works well when order matters. You can't update the web application before migrating the database, for example, or there will be chaos.

Now, you could have Octopus use PowerShell to perform your infrastructure provisioning and configuration management tasks, and many people do. But for infrastructure automation and provisioning of new systems, I'd agree that using Puppet, if you already have the skills, would make a better choice: the workflows are much more designed for that.

Conclusion: use both

If your system administrators find that tools like Puppet work best for them, then by all means they should use Puppet. It's a great tool designed for the kinds of automation that system administrators might need. When it comes to frequently deploying updates to the applications you are building, or allowing QA to self-service deployments, Octopus is a much better fit for that scenario.

Use Puppet to provision the infrastructure and ensure everything is ready, and use Octopus for the continuous delivery of your applications on top of those systems.

If the development team prefer one tool, and system administrators prefer another, it's probably because the different tools are better suited to their specific scenarios, goals and constraints. One isn't better than the other; they are just designed for different things, and for true productivity we should leverage that.

What do you think are the major differences between the two sets of tools? When would you use Puppet/Chef, and when would you use Octopus? Let's help Dmitry out.

Oh, one last thing: if you use Octopus, you don't have to learn Ruby and dress like a hipster. Neener neener! :-)

Tagged with: Ecosystem