BuildDoctor

Build Doctor

Continuous Integration, Delivery and Devops Consulting

Contact Us

(+44) 207 183 0323
hello@build-doctor.com
@builddoctor

Get in touch!

LondonCI Meeting, 1st November

Posted on by Julian Simpson

Continuous Integration matters. Configuration Management matters. What happens when you mix the two?

Let’s find out. Chris Read and I are speaking at the BCS Configuration Management group meeting on November 1. We’ll be doing our talk from Agile 2011, which I hope will spill over into a massive discussion over nibbles and wine.

The venue will be the BCS offices in Southampton Street, London. You need to register for security and catering purposes. Chris and I will be talking from 18:30. We’ll be preceded by the CMSG AGM, which non-members are welcome to attend (though you can’t vote unless you’re a member)

[link]

Atlassian Bamboo Challenge

Posted on by Julian Simpson

Atlassian kicked off the Bamboo Task Master Challenge today. I am honoured to be on the judging panel.

What’s it all about? A Continuous Integration server becomes the heart of your development infrastructure. CI servers need to know how to talk to the rest of your systems.

So Atlassian are encouraging you to add to the Bamboo ecosystem by offering the winner of the competition:

  • A ticket to next year’s Atlassian Summit
  • $500 of nerd toys
  • A USB Bamboo keyboard and mouse
  • A USB rocket launcher, that integrates with Bamboo

The first 10 entries get an Atlassian T-shirt and the Bamboo Keyboard and Mouse.

I think it’s a clever move. Plugins made Hudson/Jenkins more attractive to it’s users, and gave everyone the incentive to encourage more plugin authors (see Crossing the Chasm for more on this)

Here’s an idea to kick things off: I’d like to see someone use face-detection and face-recognition libraries to detect the face of the person who broke the build.

An targeting system for a Nerf Vulcan wouldn’t go amiss, either.

[link]


Repository? That’s not a repository …

Posted on by Julian Simpson

this is a repository. I’ve been experimenting with Amazon S3 as a Maven repository. I threw the results up on GitHub [link].

Why? I’ve been working with some nice people who use binary dependencies. In order to scale their CI system past one node, they need a repository manager, to temporarily store built artifacts on.

They actually have a couple of repositories, but not geographically close to where I’m building out their new CI system (on EC2). It’s important to keep the feedback loop fast; so deploying a repository close to(or indeed on) on the CI server is desirable.

The plan was to deploy Archiva onto an EC2 instance via Puppet. Then I had a better idea: use an S3 bucket as a highly scalable, low latency and (mostly) highly reliable repository.

Turns out that there’s support for S3 in their build tool (Maven). So it turned out to be easy. In the github repo, I publish and artifact using an S3 client, and then retrieve it using plain HTTP.

As long as your EC2-hosted Continuous Integration server is in the same availability zone as the S3 bucket, you’re not going to be liable for a high traffic bill.

They may want to use a different configuration for the real repository, where they serve artifacts to the other consumers. This approach is all about speeding up and scaling out their build.

Update: Oliver Lamy asks: ‘what is wrong with Archiva’?

Nothing. I’d cheerfully use it. It has a permissive license and cheerful absence of public spats with other repo managers.

In this case I wanted some very fast and robust, which led me to S3. The alternative was to deploy Archiva on an EC2 instance: I could have done that, but then I would have had a dependency on a single host.

IMO, this approach is more suitable for the context (caching intermediate build artifacts, on AWS).


Conference Appearances, Q4 2011

Posted on by Julian Simpson

Where the hell did 2011 go? Here’s where to find me for the rest of the year:

  • LondonCI, 18th of October: Tom Duckering will be talking about scaling CI – register at skillsmatter to get in the door. [meetup] [skillsmatter]
  • DevOpsDays Gothenburg, 14 October: It’s my pleasure to return to both Sweden and DevOpsDays for a talk on CI and Systems Administration. [link]
  • BCS, 1st November: Chris Read and I will be doing our Agile 2011 talk on Continuous Integration as special guests at the British Computer Society [link].
  • CITCON, November 12: I haven’t missed this conference in 5 years, so I’ll be showing up here at some stage. [link]
  • LondonCI, November: I’m strongly tempted to make it a pre-xmas drink, as they are selling mince pies in the shops already. Venue will be a pub that has decent ale on tap.
  • Yow! Australia, 1-6 December: I’m talking about Puppet, Chef and infrastructure as code in Melbourne and Brisbane. [link]

It looks like a lot when you write it down.


CI vs Zombies

Posted on by Julian Simpson

(Thanks to Jason Sankey of Pulse for this Guest Post)

On behalf of the Zutubi team, I’m excited to announce the latest release of our continuous integration server, Pulse 2.4! Before I go into details, I’d like to touch briefly on one of the areas we’ve been working on for this release that doesn’t get a lot of attention because, frankly, it’s not very “sexy”. It is, however, an important reality for anyone that has to maintain a build server. I’m referring to the termination of runaway builds.

A runaway build occurs when not all processes created by the build exit cleanly. Catching and killing all processes created by a complex build can be difficult. Processes that last beyond their intended lifetime – zombies – may hang the build, or simply stay around in the background waiting to wreak havoc. Zombies are a source of multiple headaches:

  1. They interfere with test isolation. If processes can hang around from an earlier build (or earlier test within the same build) they may affect unrelated tests. Lack of isolation leads to
    difficult-to-diagnose failures.
  2. Even if they don’t directly affect other tests, zombies can build up into hordes that drain resources, eventually leading to exhaustion.
  3. Manual intervention is required to kill them and clean up. Any manual process is the natural enemy of continuous integration, particularly at scale.

The pain of zombies us something we do our best to eliminate with Pulse. Pulse has always had the ability to kill builds after a timeout, but not all builds cooperate. So in this latest release we’ve added some new process terminationl logic, leveraging platform-specific code and tools where we can.

First, I’d like to give a plug to a little library called javasysmon, from Jez Humble (our friendly Thoughtworks competition). Although incomplete and dormant for some time, this library provides a starting point for richer process discovery and manipulation through Java APIs. We’ve employed it as one prong in our attack against zombie processes. Given the Java platform’s anemic support for process control, we’re hoping to build on (and contribute to) this effort over time.

The combination of Windows and Java provides extra challenges for process control. Windows doesn’t have true process trees, rather process groups are the preferred way to manipulate related processes. However, Java APIs provide no way to create or manipulate process groups. On the upside, Microsoft ship a handy utility by the name of taskkill with all recent Windows versions. Pulse has no aversion to employing external platform tools where they can help, so our zombie razing toolbox includes use of taskkill when it is available.

If a good flailing via Java APIs, amputation with javasysmon and evisceration with taskkill all fail to stop the zombie hordes, Pulse 2.4 also offers a shotgun-to-the-head fallback: the kill build action. This new action is the kill -9 of the Pulse world: it cuts the process loose and wraps up the build state in Pulse immediately. We’d prefer it never came to this, and will continue enhancing our automated weaponry to avoid it, but a last-ditch way to restore order is better than taking your build server down.

Zero zombie tolerance is just one of the improvements in Pulse 2.4. Other significant updates include:

  • Mercurial support: in the form of a new plugin.
  • Maven 3 support: including a command, post-processor and resource discovery.
  • Agents page updates: with graphical status and more convenient navigation.
  • Reworked agent status tab: with more build links and efficient live updates.
  • New agent history tab: quickly browse all builds that involved an agent.
  • Reworked server activity tab: showing build stages nested under active builds.
  • Pause server: admins can pause the build queue, so all triggers are ignored.
  • New server history tab: showing build history across all projects.
  • Restyled info and messages tabs: for both the agents and server sections.
  • Improved changelist views: these views have been reworked in the new style.
  • Pinned builds: mark builds that should never be deleted or cleaned.
  • Templated field actions: easily find or revert to an inherited value.
  • Introduce parent refactoring: adjust your template hierarchy over time.
  • Pluggable resource discovery: automatically locate build tools and libraries.
  • Subversion changelist support: easily submit a changelist as a personal build.
  • … and more: extra UI touches, improved performance, more plugin support implementations and more.

If you’d like to learn more about Pulse 2.4, check out the new in 2.4 page on our website for details and a few screenshots. Or you can join the war on zombies by downloading and trying Pulse 2.4 for free today.

Disclosure: Jason’s competitor sponsors this blog.

The Build Doctor Ltd, Suite 17189, Lower Ground Floor, 145-157 St John Street, London, EC1V 4PW

© Build Doctor 2007-2012