Is there a built-in way in TeamCity to retry a specific build in a build chain, up to a maximum number of times, and as long as it succeeds at least once, consider it a success for any downstream build configs?
ie, say I have Build A, which sometimes randomly fails, and Build B, which has Build A as a snapshot dependency.
If Build A fails, I'd like to re-run it up to a maximum of 3 times... and as long as it succeeds at least once, launch Build A. If it fails 3 times in a row, it will "overall" be marked as a failure in the build chain, and Build B will not start.
I know that there are "Retry Build Triggers":
...but if I'm reading that right, then it will simply launch a new Build A, but there won't be a new Build B which depends on it.
Note also that I don't want to simply set a retry trigger on Build B, because (assuming Build A worked), Build B is very reliable, and any failure in Build B should ALWAYS be considered a failure immediately.
Is there any way built-into TeamCity to accomplish this? The only way I can think of to get the result I want is to add custom scripting code to either:
- Implement the retry logic myself - ie, make a new top-level script which runs build B in a subprocess, and monitor it and retry up to 3 times myself. Not ideal because this requires re-implementing all the failure and hang detection logic that TeamCity normally handles.
- Create a build chain that is, instead of just A > B,
A => B
A1 => A2 => A3 => B
Where A2 and A3 have custom scripts that first make use of the TeamCity API to see if the upstream job succeeded, and if so, do nothing and succeed; and if it failed, re-run job A.