PyGrunn: Advanced continuous integration - Dirk Zittersteyn

Tags: pygrunn, python

(One of the summaries of the one-day 2014 PyGrunn conference in Groningen in the Netherlands).

Dirk Zittersteyn introduces us to continuous integration.

  • Always use version control. Even when you’re programming on your own. Git, mercurial, subversion.

  • Use branches. Keep the master/trunk branch working always. The master needs to be deliverable at all times. Changes and fixes and new features are made on branches and merged when ready.

  • “Always be integrating”. Modified quote from a movie.

  • The mainline should always be “green”. All the tests should run at all time.

A problem is that agreements aren’t always reality. Not everything is tested. You still can get broken code in. Just search github for the string “removed debug statement”…

And two branches might be green, but combined they might still bring your mainline down. So… you must check the merge. And, really, you shouldn’t merge manually. The mainline shouldn’t be merged by mortals, a script should do it. The merge you’re trying out should be, again, on a separate branch and only be merged into the mainline when green.

Doing this manual isn’t good, so they let Jenkins do it. The documentation is on . One of the things they use is the jenkins gatekeeper plugin.

They use pytest for their testing. One of the nice things is that it can distribute testing over several machines: speed is essential for developer feedback. On friday between 16:00 and 17:00 there’s peak time and everyone wants to merge. In that case they spin up virtual machines in addition to their collection of old machines they normally run jenkins on. logo

About me

My name is Reinout van Rees and I work a lot with Python (programming language) and Django (website framework). I live in The Netherlands and I'm happily married to Annie van Rees-Kooiman.

Weblog feeds

Most of my website content is in my weblog. You can keep up to date by subscribing to the automatic feeds (for instance with Google reader):