I want to have some feedback on how other TeamCity users approached this problem: I've got some .NET projects that can be built for different platforms (for example, .NET 2.0, .NET 4.0, Mono and XBox 360).
- I want to make sure the project compiles on all platforms
- I also want a "release" bundling the build artifacts for all platforms
Currently, I have created my target platforms as configurations below my projects in TeamCity. I picture probably explains it best:
The "Release" configuration takes the latest artifacts from the other three configurations and packages them together (and also uploads them to a Subversion repository storing binaries). Releases are triggered by hand.
- Very easy to configure and to maintain. Adding another platform is a matter of creating the project and adding a dependency to the "Release" configuration.
- Configurations/platform builds can build in parallel
- Configurations/platform builds can each use a different OS (eg. a Mono/Linux build and a Windows/.NET build could be compiled and then packaged as a "Release")
- There's no guarantee that when someone triggers a release, the latest successful builds of the dependencies are all of the same revision
- I use 4 of my 20 possible build configurations (in the professional edition) for a single package
I'm quite happy with this, except for the fact that it uses up the professional edition's limit on build configurations pretty quickly.
Is this what the configurations in TeamCity were intended for?
Are there better ways to achieve the same?
Anyone else willing to contribute how he solved the same task?