1

我有一个属性组,其中包含 build_number 的属性,该属性是从 TeamCity 传入的,仅作为构建计数器。在 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 部分引用覆盖.

注意,我还使用系统消息对其进行了更改:

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

但整体效果是一样的。

在我设置了上面的 BuildNumber 之后,我如何才能参考构建计数器(仅)?

4

1 回答 1

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>
于 2012-10-18T10:05:34.733 回答