Best practices, how to migrate the products build to TeamCity

in our company we have 3 large multi-platform (Windows, Linux, MacOS X) products with many megabytes of C++ code. There are many parts, that are shared between the products typically OpenSource libraries as are for example Glib, Boost or QT framework.

Currently for the products build, we are using in-house build solution, but this solution have some limitation, that is why we would to switch product builds to TeamCity.

But we see a few issues, which we do not know how to solve the right way with TeamCity.

Developers build

In this moment we have very complex build framework in Perl and components/products builds are implemented in this framework. Simply, every component have own build script and there is also module, that solving dependencies between the components (dependencies can be cross-platform). Now, for local build on developer workstation and in our automatic build system are used the same build scripts. Build dependencies, that cannot be built locally are downloaded from our build system, but the rest can be built from sources to installation packages on the developers machine.

And we don't know, how this solve the local developer build with TC.

  1. what is the preferred way, how to share build scripts between TC and local build?
  2. is there any easy way, how can developer collect (download) build dependencies (artifacts) for chosen build configuration?

Shared components

We have many shared components and sometimes it is necessary to make any fix or update of these components, which means try to build and test it with all affected products before the commit to stable branch. Currently we are able to build most of the product from stable branches and the affected components from bugfix branch.

Is there any way how to easily perform described scenario with TC?


Comment actions Permalink

No tips, how to solve mentioned issues?

Comment actions Permalink

Hi Jiri,

Sorry for delay in replying. Developers can download artifact using REST API.
Also TeamCity can be used as a Nuget server. TeamCity hosts packages that were published as build artifacts. See the related blog post

For Git and Mercurial you can use Feature Branches. For not distributed version control systems you can configure VCS checkout rules and use different build configurations for different branches. You could probably be interested in Pre-Tested Commit feature.

Comment actions Permalink

Hi Alina,
thanks for your reply, but I have few more questions.

How to share build scripts between TC and the local build?
     Now, for managing C++ sources we are using CMake, but build of our products contains many other build steps as are merging universal binaries on Mac, signing binaries or build of installation packages for Windows, Linux and Mac. Mentioned build steps are described in the simple Perl modules, that we called build task, these build task are implemented via our build framework, that is versioned together with product, so the first step of every build is to checkout appropriate build framework. But from my point of view, it is not useful way how to implement build in TeamCity.

Can you recommend some well-tried practices?


Please sign in to leave a comment.