TeamCity MSBuild参考构建计数器

时间:2012-10-18 09:26:10

标签: msbuild continuous-integration version teamcity

我有一个属性组,其中包含build_number的属性,该属性从TeamCity仅作为Build Counter传入。在TeamCity中设置的构建号格式仅为计数器的{0}。

<PropertyGroup>
  <Major>10</Major>
  <Minor>1</Minor>
  <Build>$(BUILD_NUMBER)</Build>
  <Release>0</Release>
   ...
</PropertyGroup>

然后,从源代码管理中的文件中的值更新Major,Minor和Release属性。

因此,TeamCity将构建记录为完整的4部分构建引用(而不仅仅是计数器),因此我将其设置为:

<TeamCitySetBuildNumber BuildNumber="$(Major).$(Minor).$(Build).$(Release)" />

但是,现在当我引用我的$(Build)属性时,它现在被设置为4部分构建引用,并且我在使用TeamCitySetBuildNumber设置之前引用$(BUILD_NUMBER)的任何属性也会被覆盖4部分参考。

NB我也用系统消息更改了它:

<Message Text="##teamcity[buildNumber '$(Major).$(Minor).$(Build).$(Release)']" />

但整体效果是一样的。

在上面设置BuildNumber之后,如何引用构建计数器(仅限)?

1 个答案:

答案 0 :(得分:2)

如果您正在使用项目文件,则可以尝试在* .vbproj或* .csproj文件的AfterBuild部分中调用TeamCitySetBuildNumber命令:

<Target Name="AfterBuild">
    <TeamCitySetBuildNumber BuildNumber="$(Major).$(Minor).$(Build).$(Release)" />
</Target>

如果您正在使用解决方案文件,我会创建一个调用您的解决方案文件的* .proj文件,然后调用TeamCitySetBuildNumber命令(不确定您是否可以像这样在目标中调用TeamCitySetBuildNumber命令...):

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="SetBuildNumber">

<PropertyGroup>
  <Major>10</Major>
  <Minor>1</Minor>
  <Build>$(BUILD_NUMBER)</Build>
  <Release>0</Release> 
</PropertyGroup>

  <Target Name="Build">
    <Message Text="Build task called... " Importance="high"/>
    <MSBuild Projects="$(teamcity_build_checkoutDir)\your_solution.sln" Properties="Configuration=Release"/>
  </Target>

  <Target Name="SetBuildNumber" DependsOnTargets="Build">
    <Message Text="Setting build number back to TeamCity... " Importance="high"/>
    <TeamCitySetBuildNumber BuildNumber="$(Major).$(Minor).$(Build).$(Release)" />
  </Target>

</Project>