We have a fairly flexible Continuous Delivery system at Pinterest. The tools we use are fairly accessible, so you can build your own Continuous Delivery system too.
- Github Enterprise is our version-control overlay. It manages code-reviews, facilitates code-merging, and most importantly has a great API. The API lets us interact with our repository in a very clean, programatic way. For example, we tag each deploy in git and can query it using Github’s Repo API.
- Jenkins is our continuous integration system, we use it to package builds and run unit tests after each check-in.
- Zookeeper manages our state. It tells each node what version of code they should be running. It reports the status of what each node is actually running, and it contains all our service configuration.
- Amazon S3 is where we keep our builds. It is a simple way to share data and scales with no intervention on our end. It integrates fairly well with Jenkins.
All of these tools can be substituted and you’d still be able to achieve a system similar to Pinterest’s. We chose these specific tools because we were familiar with them.
These are the tools we use to create the release, the artifact we upload to S3. To facilitate a deploy we have a series of deploy tools including a command-line controller as well as a series of Zookeeper clients that live on each box that needs updates.
If you are building a Continuous Delivery system let us know how you are building it.