I have two builds.
* QuickCI which takes 10 minutes and executes a small subset of end to end tests. It is triggered for each checkin.
* FullCI which takes 1.5h and executes all end to tests.
What I'm trying to achieve is that every successful QuickCI build triggers a new FullCI build. At the moment TC combines bunch of QuickCI builds and triggers one FullCI for all of them. This means that when FullCI fails I don't know which exact checkin caused the failure. I understand why TC combines them but I would like to queue a new FullCI build for each successful QuickCI.
There is artifact snapshot dependency between FullCI and QuickCI and it's set to build from the same chain but TC sill combines the QuickCI builds. Is there a way around ?
Artifacts dependency is about using artifacts from another build. And the default option here is "Last successfull build". If you need to trigger a new build for the same sourcebase, you need to use snapshot dependency with artifacts dependency together. And set artifacts dependency to "from the same chain".
Thank you for your comment. I added snapshot dependency but TC still does not trigger a seperate FullCI build for each QuickCI build. Am I missing something else ?
Snapshot dependency triggers dependent builds. So, you need to trigger Full CI, which will run only if SmallCI is successfull
Ok. I did it but this is not exactlly what I wanted. The problem is that now the number of QuickCI builds is limited to the number of FullCI builds which is like 6 a day. The whole point of having QuickCI is to get some basic feedback (compilation, unit tests, some functioanl tests) as soon as possible. The job of the FullCI is to make sure all our functional tests pass so we know we can deploy code to Production. Can you setup something like this with TC ?
Alternatively, you can use a "Finish build Trigger" in FullCI and to trigger build if a successfull QuickCI finishes. You should also have keep snapshot dependency from FullCI to QuickCI.
What changes here, is that every commit should trigger QuickCI and only successfull ones of it will trigger FullCI.
I think I have all of this but TC still combines builds. Screenshots show my setup and build history.
What happned is that I pushed 4 changes. This triggered 4 QuickCI builds. So far so good. All of them succeeded but only 3 FullCI were triggered. One of the FullCI builds was triggerd for 2 QuickCI.
Ya, finish build trigger requires some time to occur, because it's asynchronous. If two commits occur, say within a minute, they might be merged this way, because two build triggerings will merge into one (last) - this is the way triggering works. To always build FullCI for every successfull, you need to use the approach I suggested before (but you will see failed FullCI builds that didn't start because QuickCI failed).
I increased the duration of FullCI and now I ended up with just 2 FullCI builds. One for the intial QuickCI and one for the remaining 3 QuickCI builds. It looks like TC merges all FullCI requests while there is one running. Even from the UI I can not trigger more than 2 builds. One which is running and one that is queued. What is interesting I can do it using the REST api. So this would indicate that TC supports this behaviour but it is not exposed in the UI. Does it make sense what I'm saying ?
Need to look in details (apart from code now), but I suspect, that these several builds triggered via REST will be merged later.
When I did my test then I ended up with 4 builds in a queue and they were not merged.
I attached a few screenshots that show how I did it.
Speaking honestly, we need to fix the REST, because it bypasses our merge procedures .
It would solve my problem so why not to expose it as an option? It already works . I'm fine with it being set to Merge Builds by default.