Friday, April 29, 2011

How to realize a Continuous Delivery Pipeline with tool X?

In the last years the idea of Build Pipelines was established, especially in the context of Continuous Deployment or Continuous Delivery. Roughly speaking, a that's Continuous Integration v2.0. Rather than working with a collection of CI builds (often with additional nightly builds plus release builds), there is a sequence of builds which models the workflow of all steps which are required to verify a commit before it can go to production Every single commit can travel thru this pipeline. With some good luck it passes all tests and ends up in production.

For Continuous Integration there are a tons of tools around. Wikipedia lists 20+ tools. So, my question is:
What about their support for Build Pipelines? Are any of these tools able to realize Build Pipelines?

Of course, the answer is YES. -- so far it sounds good. ;)

Unfortunately, more in detail the answer is more something like: 
Up to some degree most tools are able to realize some pipelines in some sense.

Uffs. To many "somes", a very vague and disappointing statement. I am not amused.


Ok, maybe I am too rude. Most tools have some features to "tie builds together" in some sense. Realizing build pipelines requires a lot of different features, depending on the nature of our specific build pipeline scenario. But no features provides some valuable documentations and no one gives any good examples. Especially with Jenkins/hudson the situation is a little bit unpleasant. The tool out of the box does not help to realize pipelines. In the universe of jenkins plugins (note: the jenkins project on github contains 500+ repositories) there roughtly 10 plugins which help to realize pipelines, but in most cases you need more than one plugin, the documentation vacous rather than helpful and it takes a log time to figure out how to solve the puzzle.

For the next month I plan to investigate how to realize build pipelines with different tools. I try to consider different scenarios with different kinds of pipelines which are demanding different features.

In order to provide something which has at least a tiny chance to help others, I try to follow two rules: (1) the scenarios are described scenarios using BDD techniques, Given-When-Then, and (2) I am going to provide the example code on github, including example code for the pipeline as well as the configuration for the CI tool (unless its using a db).

I tend to focus on the following list of tools:
  • Jenkins (formerly known as Hudson) as the most famous and vital open source tool.
  • TeamCity by JetBrains
  • Bamboo by Atlassian
  • Pulse by Zutubi, compare this post
  • Last but not least ThoughtWorks GO! which focuses on realizing pipelines.

Please kick me if I do not continue this series...