Buildbot, the venerable Python continuous integration server, has the reputation of being complex and difficult to set up.

After spending a couple of weeks deep in Buildbot land, I’ve come to the conclusion that this reputation, while true, is only partially deserved. That is, Buildbot is complex, but only if you’re trying to view it as an out-of-the-box CI solution. Buildbot suddenly starts to make much more sense if you view it as a framework for creating your own CI solution, not a CI server in its own right.

You won’t find this revelation anywhere in the Buildbot docs, nor in any of the books or online material that cover the tool. There are some good tutorials out there showing how to set up a simple Buildbot instance — Jeff Younker’s Foundations of Agile Python Development has the best one I’ve run across — but none of these examples make much sense when setting up a complex buildfarm with complicated requirements.

So I’m here to fill that gap. This series of posts explains the “Buildbot is a CI framework” view, delves into Buildbot’s architecture, and then walks through the complicated-but-worth-the-effort CI sever I’ve built for Django.

Entries in this series:

  1. CI is hard!

    Part 1 in my series on a complex Buildbot setup. This time: some background.

  2. Configuration and architecture

    The second part in my series about building a build farm for Django with Buildbot. Starting in this part I’ll be looking at some actual code.