Several times in my career, I have worked in a software group that determined that
a) We needed a build/test system
b) We should write our own
c) We can have a
Adam,
I noticed the Anthill response, and as an Anthiller, I have to say he was right. One of the things that Anthill does real well is let you define dependencies between projects. The open source version is Java focused, while the commercial tool is language agnostic despite the name.
It would allow you to define dependencies between projects (or parts of projects) based on criteria like status (latest successful build, or latest build approved by QA or...) and/or build number or branch. It something we're pretty proud of. At build time, build artifacts are shuttled around between servers, caches are kept for performance help, and all that good stuff.
As for the other criteria:
2) Anthill (like most build automation tools) will run your existing build scripts, usually without modification.
3) Tests (again your existing technologies) can be run at build time, or against an existing build.
4) Results are shown on the web (again typical of build automation tools)
5) Email is easy
6) We have over a dozens SCM integrations, and use SVN internally so that integration is naturally one of our best.
cheers,
eric
I would recommend that if you are going to write a testing system that you consider using the Test Anything Protocol. TAP has been in use for 20+ years, and widely used, especially for CPAN modules.
TAP's general format is:
1..N
ok 1 Description # Directive
# Diagnostic
....
ok 47 Description
ok 48 Description
more tests....
For example, a test file's output might look like:
1..4
ok 1 - Input file opened
not ok 2 - First line of the input valid
ok 3 - Read the rest of the file
not ok 4 - Summarized correctly # TODO Not written yet
Go to testanything.org for more information.
The examples are copied from http://en.wikipedia.org/wiki/Test_Anything_Protocol
I've researched, but never used, AntHill. There's an open source version and a commercial version. I think it will do what you want, but it would be helpful if you gave more requirements, like does it need to do automated overnight builds, what you use for source control, etc.
In my current company, I wrote my own. The way mine works is exactly what you say; it has no idea how to build the software. You give it a bunch of command lines to run (stored in a database), it captures the exit value and stdout and stderr, and if the exit value is non-zero, it marks the build as broken. We have about 8 projects in there that can build and run unit tests. All of them start out by wiping the directory and getting the source fresh out of subversion.
I've used Visual Build, which I found to be a very useful way to tie all these disparate compilers, test runners, and other things together into a flexible system. Think Windows Scheduler on major steriods. It's basically a big task execution engine, with ready-made tasks included for all the major commercial source control systems, compilers, and so forth. It can create folders, send emails, and a bunch of other things all with a fairly simple user interface.
Apache's Continuum and Atlassian's Bamboo will meet #2-6.
Doing #1 in a language-agnostic way is a little tougher.
Maven and Ivy both work for Java dependencies.
Here is a short list of tools that work with .NET and other languages: Automated Build Tools