[Buildbot-devel] understanding buildbot & writing custom 'process'

Stephen Davis stephendavis at mac.com
Thu Dec 11 18:34:19 UTC 2003


On Dec 8, 2003, at 11:45 PM, Jeroen Janssen wrote:

> Now I'm trying to map this onto what I understand of buildbot.
> *) I want to seperate per product testing, this way I can choose how 
> to configure the test machines (a different PC per 
> increment/product/whatever), instead of having 'one' testSuite that 
> tests all products.

That fits in pretty well.  The "change" that triggers your build is a 
successful completion of a "real" build.  I'm not sure I'm 
understanding how you differentiate the "increments" but that shouldn't 
matter for what I say below.

> *) I will need to write a 'replacement' for the 'CVS source' in order 
> to copy the build tree results

You can just implement a ShellCommand step to copy the sources, you 
don't need to write a 'cvs source'.  The ShellCommand can execute 
whatever batch file/script you want.

> *) I will need to write a 'replacement' for cvs/mail 'changes' in 
> order to parse the build log and provide decent information to 
> buildbot (but this might be able to wait a little, because I can 
> manually trigger a slave to start doing it's work if I'm correct)

If you can run a Python script to parse incoming mail messages then 
you're golden because you can just adapt buildbot/contrib/fakechange.py 
to connect directly to the build master and trigger the build.  Also, 
look at buildbot/changes/mail.py for some parsing examples.

If you can only copy the raw mail source to a directory than I'd 
recommend using a Maildir-based source (also referenced in 
buildbot/changes/mail.py).  You just need to copy the raw email into a 
quickmail-style directory structure which you need to create ahead of 
time.  Looks like:

	cvsmail/
		new/
		cur/
		tmp/

You put the new mail in "new" and the MaildirSource will move it into 
"cur" once it finishes with it.  The existing Maildir-class will do all 
the heavy work of communicating with the build master.  BTW, you'll 
want to download release 0.4.1 b/c this was broken in 0.4.0.

I like the Maildir source model b/c if you screw something up in your 
parser then you can fix it, reload the master, and then the mail which 
is still sitting in the "new" directory will get picked up.  If you do 
the parsing as a mail filter in real-time upon delivery, you'll have to 
figure out how to re-run it manually on that message.  Note, however, 
that if you do screw up your parser then you'll get an exception and 
mail parsing will stop until you fix the parser and reload the build 
master (b/c it will keep wanting to parse the msg it can't parse and 
never get past it).

> *) I will need to 'integrate' (run) our current automatic python tests 
> into buildbot, in order for it to correctly report the testing status

I imagine you can do this with ShellCommands as well.

> I found that there is a seperate 'process' for twisted in the buildbot 
> tree, that I'm currently digging into in order to understand how to 
> extend buildbot for the above purposes.

Those are just customizations of the base classes for Twisted.  Since 
Twisted was the first customer for the buildbot, its customizations got 
included into the package.  They are handy as examples though.  :-)

> I would like to know if my current ideas on how to deal with this 
> sound ok, and maybe some hints on how other people currently deal with 
> this :)

You're not really doing anything different other than skipping the 
actual "build" step so this doesn't seem that unusual to me.  In fact, 
the buildbot doesn't care what steps it runs so it doesn't have to do 
"builds" at all.  That's a pretty important point to keep in mind when 
doing "unusual" setups -- it doesn't _have_ to follow an "update, 
build, test" model.

A tip for Windows.  You'll want to download the win32all python package 
(I forget from where, just google for it) and, when the buildbot docs 
say "twistd -f buildbot.tap...", you'll want to add "-r win32".  This 
tells Twisted to use the custom Win32 "reactor" which is a fancy way of 
saying "event loop".  :-)

Also, the bots don't seem to shut down cleanly on Windows when you hit 
ctrl-c.  I haven't bothered to try and figure out what the issue is 
since I hardly shut that bot down anymore now that it's configured 
correctly.

hope that helps,
stephen





More information about the devel mailing list