We have a reasonably large and complex project that I am looking into moving to using TeamCity. Ideally, I'd like to take full advantage of build chains, but I'm running into problems with preventing "pointless" builds.
Our project is stored in a single large Perforce depot (think bigger than 100 GB). It's a rather complex interconnected web, which means that you really need to have the whole thing sync'd to be able to build anything reliably. We have a "main" project that builds our final exe and several hundred supporting projects that build things like tools & data.
I currently have an evaluation TeamCity server where I'm experimenting with the best way to handle this. At the moment, I have the following build configurations all setup to use a single VCS root (because I don't want to have four duplicate copies of 100 GBs of data):
Code Build - Compiles the main project to produce an exe
Data Build 1 - Builds a zip containing the data of type '1'
Data Build 2 - Builds a zip containing the data of type '2'
Test Build - Uses exe from "Code Build" and data from "Data Build 1" and "Data Build 2"
For the sake of argument, assume that each of the above steps take 20 minutes to complete and that there is only 1 build agent (If we go ahead with adopting TeamCity, we'll have more agents but also more data build projects!). Data Build 1 and Data Build 2 only change once or twice a day, where as the Code Build changes several times every hour.
I've configured "Test Build" to have snapshot dependencies upon "Data Build 1", "Data Build 2" and "Code Build". The problem is that this means every change causes a full rebuild of all the configurations - which takes a long time!
My ideal solution would be someway to tell the "Data Build" configurations that they only need to build when they see changes in specific folders of Perforce. If someone checks in a change that only impacts the code build, I want TeamCity to just re-use the last successful data build. Does anyone know of a way to achieve this?