views:

543

answers:

3

I have the following project layout:

  • WAR Project A
    • Upstream Projects
      • Dependency B
      • Dependency C
      • Dependency D

I'm looking to setup A so that every time I want to trigger a build, it will first build B, C, and D. If either builds for B, C, or D fail then A's build should fail as well.

It seems like a common build case, but I'm not sure how to accomplish it. There are the following options but they don't seem to have the right relationship:

  • Build Triggers - Build after other projects are built
    • Will build the current project after some upstream projects, but I need to control the build from this project since I'm doing a WAR deployment. I just want to always build dependencies first.
  • Post-build Actions - Build other projects
    • Will build projects after this one, but that's backwards for what I want to do.

Is there a build configuration in Hudson (or through a plugin) that will work for me?

A: 

This came up on the Hudson mailing list very recently. There is no direct support for this type of build configuration in Hudson.

See this thread: http://n4.nabble.com/On-demand-build-dependency-handling-simple-2-job-build-td624395.html

You could use the Join plugin to create a 'build+deploy' job. It would have B,C and D as downstream projects, and then 'A' would become the join target.

Thus B C and D would need to complete successfully. If so, then the plain 'deploy' job of A would be launched. If there were any error, A would not launch. This is effectively the same as what you are asking for.

You can read about the join plugin here: http://wiki.hudson-ci.org/display/HUDSON/Join+Plugin

Michael Donohue
Thanks for this post reference which was very thorough. For my builds, which use maven2, it will be enough for me to scm-poll on the dependency jobs (B,C, and D from original question), publish to the maven2 repo, and run project A's build whenever I want.Thanks again. The posters were right, you don't really need this type of setup, if you can rely on maven/ivy's dependency management.
tonysbd
+1  A: 

Take a look at the Apache Ivy project (http://ant.apache.org/ivy/). It handles project dependencies very well, and it has a plugin for Hudson. From the way you describe the problem, I think this solution would work for you.

Jason Collins
I didn't mention in the original post that we already use maven2 for all of our builds. I was so hung up on purely atomic, grouped, builds that I didn't realize maven2/scm polling will do the trick quite effectively. Thanks for the information.
tonysbd
+1  A: 

I think the Join Plugin, is what you are looking for. so you setup the A-Trigger job who triggers B,C,D and waits until all are finished and than A gets triggered.

Peter Schuetze
Oh cool plugin, didn't see that. I will try!
tonysbd