Send to Printer

smalltalk

Build Automation

December 16, 2010 20:54:22.041

One of the things I've been asked to look at here is build automation. Right now, all builds are done manually, using RTP - and sometimes, based on various things going on, they need multiple builds done per day. As you can imagine, that takes up a lot of staff time, and adds in an error prone personal component to the process.

Now, I'm hardly an expert in such things, and for that matter, there are entire toolsets devoted to this field. Having said that, I do have a set of build scripts for BottomFeeder, so I have done some work here. When I sat down to look at what I do for Bf, I realized that while I've automated pieces, I haven't automated everything. So, I created a small (very small) tool to tie my process together. We'll see whether or not it scales up well enough to use for the problem at work, but that's in the future.

Right now, here's how I do BottomFeeder builds:

  • Execute a Smalltalk script that creates a runtime image
  • Execute a second Smalltalk script that uses image compression tools to shrink down the image file for deployment
  • Run a shell script that creates the various zip files I throw up to the server
  • Manually use sftp to ttransfer the files

Not as automated as I'd like :) I wrapped the first three things up with the tool I created - the last bit will require some research on my part - I haven't done unattended sftp in a shell script before, and unlike stock FTP, it's not something I can do in Smalltalk out of the box. So how does it work? Simple, really - I have a key=value ini file that describes each script that will run. The one for BottomFeeder looks like this:


[ScriptInfo]
starter='./startvw '
script='build-bf-non-windows.st'
assertion='build-bf-non-windows-assertion.st'
isVWCommand=true
[ScriptInfo]
starter='./startvw '
script='compress-bf-image.st'
assertion='compress-bf-image-assertion.st'
isVWCommand=true
[ScriptInfo]
starter='./startvw '
script='executeBuildScript.st'
assertion='executeBuildScripyt-assertion.st'
isVWCommand=true

Basically, each section describes how to run the script, whether it's a VW script or not, and an assertion script to go with the build piece. That assertion piece is just a small bit a of Smalltalk that should return a boolean, explaining whether the associated build script worked or not. Then I put together a (very simple) UI that lets me pick a script to use, and see the results. Heck, I even have tests :) That window looks like this, after I ran my test script:

Build Tool

That's pretty much it, really - there's plenty that could be done, and it's hardly the best build system in the world - but it suits my purposes well enough, and automates what was a tedious build process. Whether it scales up for a real project - I'll find out soon enough :) If you're interested in taking a look, load the "BuilderBundle" bundle from the public store repository. I'm happy to hear any comments, good, bad, or indifferent.

Technorati Tags: , ,

posted by James Robertson

 Share Tweet This