Tools:
Jenkins ver. 1.470
Maven 2
Subversion
Environment
Assume my build has a number of projects A-D. The dependency graph exists as shown. That is to say: B depends on classes in A, C depends on classes in B, D depends on classes in A. We create the jenkins builds such that they call the builds dependent upon them as a post-build action.
A
|--> B --> C
|--> D
Each night, we trigger a full build in Jenkins (A builds, triggers B (triggers C), triggers D). This is done easily enough by telling A to build nightly, and the rest cascades.
Problem
However, on a commit we want to build the projects that were committed to once.
Situation 1: We poll the repository (or use commit hooks, it makes no difference) and find that there was a commit to B, then B will build and C will build. Success!
Situation 2: We poll the repository and find that B and C were committed to in one commit, then Jenkins will try to build B (triggering a build of C), and build C (a second build). Failure. See what happens? C was built twice, taking up precious build time. Keep the build fast!
Does anyone know a way to only trigger the highest project in each committed build pipeline?
I suppose one solution would be a complex SVN hook that determines the highest project in each pipeline...
- Situation 3: Commit to B C and D in one commit. SVN hook finds C depends on B. The hook calls project-specific links to start builds for B and D.
Pitfalls: Very complex SVN commit hook. Have to upkeep the pipeline in the SVN hook.
I feel like this is a problem others have run into. Is there a Jenkins plugin that helps with this?