On my current project we have two build trees, but they are not entirely separate. Build tree A knows nothing about Build Tree B, however Build Tree B has dependencies on projects in Build Tree A.
The problem we encounter is that the Build Trees are run on different build agents and the output of Build Tree A is only made available to Build Tree B when all of Build Tree A builds successfully. When a change is made to a project in Build Tree B that depends on a change also made in Build Tree A it can be hours before Build Tree A builds successfully all the way through and in the meanwhile Build Tree B fails until assemblies from Build Tree A are updated with the dependent change. This is because the change in Build Tree A ins’t made available until all of Build Tree A builds successfully.
I’m trying to work out solutions, the first that comes to mind is separating out the projects that both Build Tree A and B depend on that are in Build Tree A and create a third and shorter build Tree with only these assemblies. Allow both A and B to be dependent on this much smaller third Tree, then wait time for synchronization of dependencies for Build Tree B for items not in Build tree B become significantly less. Another idea was simply to have all output from from assemblies in Build tree A that Build tree B relies on be immediately made available to Build tree B when they are built, regardless of whether they causes issues for the rest of Build tree A.
Any thoughts on a better way will be greatly appreciated via twitter @binzleyTwit.