Using Spinnaker with Chef & Puppet
Feb 17, 2017 by Isaac Mosquera
Spinnaker takes a opinionated approach to deploying software. Well, Spinnaker doesn’t really deploy software, it deploys infrastructure. The concept is better known immutable infrastructure. When changes are needed in production, the old infrastructure is torn down or disabled and replaced by new sets of VMs, load balancers and sometimes databases. This approach gives you greater confidence in your deployments and gives you sophisticated features out of the box with Spinnaker like clean rollbacks and phased deployments.
While tools like Chef & Puppet aren’t necessarily opposed to this approach, typical implementations continue to re-use the same VMs as new version of the code you’re deploying packages are deployed. So while mutable and immutable don’t generally mix well, Spinnaker fortunately comes with a “Bake” stage. “Baking” is a concept where you begin with a base image, e.g. ubuntu, debian, rhel and you add your packages and configure the base image.
You can move your Chef & Puppet templates to the “Bake” stage of your Spinnaker pipeline. Behind the scenes it’s all just packer scripts. You can specify a
package name that gets passed down to your packer template template. In this example we’re using
armory-hello-deploy-chef as the package and
aws-chef.json as the packer template. Note that
aws-chef.json is a custom template and you will have to implement your own for your teams to use.
This will result in an AMI that contains your artifact and will be ready to go through the stages of deployment such as dev, stage, pre-production, production. During the deployment phases you can add environment specific
user-data that will tell your app how to behave in that environment. For instance, where to find the staging db hostname vs production db hostname.
Since all bake stages must be preceded by a build stage (i.e. Jenkins) you’ll want to build an artifact if possible. This artifact (perhaps a tar or a zip file) that was generated should be the only thing that is passed to your template file if possible. It’s important to note that Spinnaker isn’t a dependency management tool for your software or machine configuration but more about lifecycle of your deployment and infrastructure.
This approach should get you started with Spinnaker and Immutable Infrastructure pretty quickly. Let us know if you have any more questions.
Recently Published Posts
Monitoring Spinnaker: Part 1
Overview One of the questions that comes up a lot is how you monitor Spinnaker itself. Not the apps Spinnaker is deploying, but Spinnaker itself and how it’s performing. This is a question that has a lot of different answers. There are a few guidelines, but many of the answers are the same as how […]
Read more →
The Importance of Patents: Interview with Nick Petrella, Head of Legal
In honor of Armory’s recent acquisition of a patent for continuous software deployment, we sat down with Nick Petrella, Head of Legal, for a casual conversation covering a wide range of subjects, from patent law to Nick’s background as a software engineer and why he made the leap to the law. Check out […]
Read more →
Armory Agent for Kubernetes Simplifies K8s Complexity
I’ll be upfront with you, I’m a sucker for a good origin story. It’s one of the reasons I spent hours engrossed in the Marvel Cinematic Universe not too long ago. Rooting for incredibly flawed individuals with an outsized sense of duty and superpowers to back it up….What’s not to love? My partner has a […]
Read more →