TeamCity MSBuild请参阅生成计数器

TeamCity MSBuild请参阅生成计数器,msbuild,continuous-integration,version,teamcity,Msbuild,Continuous Integration,Version,Teamcity,我有一个属性组,其中包含一个build_编号的属性,该编号仅作为构建计数器从TeamCity传入。TeamCity中为计数器设置的内部版本号格式仅为{0} <PropertyGroup> <Major>10</Major> <Minor>1</Minor> <Build>$(BUILD_NUMBER)</Build> <Release>0</Release> ...

我有一个属性组,其中包含一个build_编号的属性,该编号仅作为构建计数器从TeamCity传入。TeamCity中为计数器设置的内部版本号格式仅为{0}

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

10
1.
$(建筑编号)
0
...
然后从源代码管理中的文件中的值更新主属性、次属性和发布属性

为了使TeamCity将构建记录为完整的4部分构建参考(而不仅仅是计数器),我将其设置为:

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

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

注意,我还通过一条系统消息对其进行了更改:

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

但总体效果是一样的


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

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

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

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


10
1.
$(建筑编号)
0

你好,MattyB,谢谢你的回答。我使用的是一个proj文件,但是在这个过程中设置版本号的原因是,如果在这个步骤之前失败,那么日志会再次引用版本计数器,而不是4部分引用,这就是为什么我要在第一个目标中设置版本号。所以,您是否想要像“finally”块这样的东西,不管构建是否成功都会调用它?如果是这样的话,试试这个:以前没见过。方便的最终,除非我重组我的项目,否则它将无法工作。正确或错误(!)我的项目文件有8个目标,每个目标依次由8个TeamCity构建步骤调用,因此,如果步骤3失败,它将不会继续,这就是我想要的(日志还说明“[步骤3/8]”等,这很方便)。在我看来,我需要对其进行重组,以使其有1个TC构建步骤,然后再进行修改,以添加检查,确保前一个目标在做任何事情之前工作正常,这并不是我真正想要的。TC似乎缺少我发现的“最佳实践”的定义……为什么不将teamcity中的格式更改为10.1.{0}.0,然后使用BuildNumber=$(BUILD_NUMBER)?@JamesWoolfenden当然可以,但是(正确或错误)目前我们的设置是通过源代码管理中的文件修改[Major].[Minor]部分。如果我不能得到令人满意的结论,这当然是一个退路。您是否在msbuild扩展包中尝试了assemblyinfo任务。我试试看。
<?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>