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 developer spend a week, get it done and they shouldn't have to touch it again
Every time, this has resulted in a system that only seems to work for the person that wrote it and requires their constant attention. I've spent time on several occasions looking for a tool that I could grab that would serve our needs, but come up empty-handed. Generally, tools like this server a very narrow market. I'm at the point again of needing something like this. Is there something out there, or do we write it again?
Here are my requirements in priority order (the last few are just nice to have):
Ability to handle a multi-project build. We have several components that both provide things other components use and use things from other components. A developer should be able to check out 1 component and make changes without having to build the world. Dependencies outside the project should be pulled in automatically. So some way to be able to push and pull the built objects to a server is critical for this. Another aspect of this is the ability to be able to pull down all dependencies to a local directory for development on the road.
Don't worry about exactly how things get built. This may sound weird, but I don't want the build system to worry about compiling my code. There are already great tools that do this for every language - Ant, CMake, etc. I just want to tell it what to call to make things build, and what output it should care about. This way, Project A can be in Java, Project B can be in C++, you get the idea.
Have some way to run tests on the output
Show the current build/test results on a web page
Email the results
Integration with RCS (we use svn)
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With