Teamcity custom build number generator

3.8k views Asked by At

Our Teamcity build currently generates build numbers in the format 1.0.0.[SVN REVISION] which it passes through to MSBUILD.

I need to change this to the format 1.0.[DLL VERSION].[SVN REVISION] where we insert a de-dotted version of a dependant dll in. For example if our dependant dll is version 1.2.3.4 the generated build number would be 1.0.1234.[SVN REVSION].

The dependant dll is part of the build source so I had hoped I could do something with build parameters and a little exe that interegates it for the version info but cannot see any way to incorporate this through the UI.

Any ideas if this is possible?

1

There are 1 answers

1
sylvanaar On BEST ANSWER

You can output the build number during the execution of the build script, and teamcity will use that output to label the build. For example, I label my build with the same version that I put into AssemblyInfo.cs. Part of that version (Major, Minor) is actually in the file already, the other part (Build, Revision) gets added during the build.

From my msbuild script:

<Target Name="Setup">
    <!-- Version.txt contains the major and minor version numbers, 
         The build number and revision come from environment variables
         in the next step -->
    <Version VersionFile="Version.txt" BuildType="None" RevisionType="None">
        <Output TaskParameter="Major" PropertyName="Major" />
        <Output TaskParameter="Minor" PropertyName="Minor" />
    </Version>

    <!-- If you want to build a release without going through the build
         server, you should define the following 2 environment variables
         when running this build script -->

    <!-- BUILD_NUMBER environment variable supplied by the build server -->
    <CreateProperty
        Value="$(BUILD_NUMBER)">
        <Output
            TaskParameter="Value"
            PropertyName="Build" />
    </CreateProperty>

    <!-- BUILD_VCS_NUMBER environment variable supplied by the build server -->
    <CreateProperty
        Value="$(BUILD_VCS_NUMBER)">
        <Output
            TaskParameter="Value"
            PropertyName="Revision" />
    </CreateProperty>       

    <AssemblyInfo CodeLanguage="CS"  
        OutputFile="Properties\VersionInfo.cs" 
        AssemblyVersion="$(Major).$(Minor).$(Build).$(Revision)" 
        AssemblyFileVersion="$(Major).$(Minor).$(Build).$(Revision)" />

    <!-- Tell the build server what our actual build number is -->
    <Message Text="##teamcity[buildNumber '$(Major).$(Minor).$(Build).$(Revision)']" />
</Target>

you just output the version during the build the format is ##teamcity[buildNumber '<buildnum>']