I work at a software company where our primary development language is Java. Naturally, we use Hudson for continuous builds, which it works brilliantly for. However, Hudson is not so good at some of the other things we ask it to do. We also use Hudson jobs to deploy binaries, refresh databases, run load testing, run regressions, etc. We really run into trouble when there are build dependencies (i.e. load testings requires DB refresh).
Here’s the one thing that Hudson doesn’t do that we really need:
Build dependency: It supports build dependencies for Ant builds, but not for Hudson jobs. We’re using the URL invocation feature to cause a Hudson job to invoke another Hudson job. The problem is that Hudson always returns a 200 and does not block until the job is done. This means that the calling job doesn’t know a) if the build failed and b) if it didn’t fail, how long it took.
It would be nice to not have to use shell scripting to specify the behavior of a build, but that’s not totally necessary.
Any direction would be nice. Perhaps we’re not using Hudson the right way (i.e. should all builds be Ant builds?) or perhaps we need another product for our one-click deployment, load testing, migration, DB refresh, etc.
Edit:
To clarify, we have parameters in our builds that can cause different dependencies depending on the parameters. I.e. sometimes we want load testing with a DB refresh, sometimes without a DB refresh. Unfortunately, creating a Hudson job for each combination of parameters (as the Join plugin requires) won’t work because sometimes the different combinations could lead to dozens of jobs.
There is a CLI for Hudson which allows you to issue commands to a Hudson instance. Use “help” to get precise details. I believe there is one which allows you to invoke a build and await its finish.
http://wiki.hudson-ci.org/display/HUDSON/Hudson+CLI