If you want to set up Teamcity with Delphi you have to take care of several important issues :

You can run a build with the msbuild-runner, but the Delphi commandline-compiler needs additional Environment Variables :

  1. APPDATA : this is where EnvOptions.proj is saved, without it Delphi cannot compile anything, the Problem is that this is installed under the Config-Dir of the User who installed Delphi
    Values can be :
    German Win2003 – D2007 : C:\Dokumente und Einstellungen\<USER>\Anwendungsdaten\Borland\BDS\5.0
    English Windows7 -D2010: C:\Users\<USER>\AppData\Roaming\CodeGear\BDS\7.0
    etc.
  2. BDS – where Delphi is stored e.g. (for Delphi 2007)  C:\Programme\CodeGear\RAD Studio\5.0
  3. BDSCOMMONDIR – e.g. (for Delphi 2007) C:\Dokumente und Einstellungen\All Users\Dokumente\RAD Studio\5.0

In Build file path you just need to add the <Project>.dproj File and your done if you just want to build the executable.

This alone already helped us to ensure that we always have at least all the source-files which are needed to compile the project, which wasn’t always the case before.

If you want Teamcity to also to run your Unit-tests then you have some extra work to do :

  1. Create a new Teamcity project with all the configuration from above e.g. <Project>-Test
    1. Then you need my adapted Console-Runner for DUnit, which emits the necessary infos for Teamcity.
      Use this instead of the standard console-Runner from DUnit
      e.g. change the Source of your Test-Exe Project to

      Application.Initialize;
      if IsConsole then
       TeamCityTestRunner.RunRegisteredTests
       else
       GUITestRunner.RunRegisteredTests;
  2. Create a batch-file which calls the compiled Unit-test Exe and call it with Teamcity

and there you have it – a working integration of Delphi,  DUnit  and TeamCity.

Now if i only had a sure-fire way how to make all of the old GUI-centered Code testable so that i could switch to some Agile Practice like TDD …

TeamCityTestRunner