【问题标题】:TeamCity build number/version from constant in classTeamCity 内部版本号/版本来自类中的常量
【发布时间】:2016-02-15 10:00:19
【问题描述】:

我们想利用 Octopus Deploy 中的 Channels 功能,因此当版本号包含“X.X.X.X-Beta”时,它应该使用 Beta 通道。

我们的问题是我们不知道如何在 TeamCity 中设置版本号,因为它只允许硬编码带有一些变量的字符串。 我们不想将它设置为 TeamCity,我们想在类中使用它。 所以我们有一个名为 VersionInformation.cs 的类,其内容如下:

public static class VersionInformation
{
    public const string ProductVersion = "1.12.0.0";
    public const string ProductStage = "Beta";
}

AssemblyInfo.cs 文件包含以下行:

[assembly: AssemblyVersion(VersionInformation.ProductVersion)]

基本上我们想要达到的目标:

  1. 从 Visual Studio Online 的 TFS 存储库中获取更改
  2. TeamCity 应读取该类并将其自己的构建版本设置为“1.12.0.{buildNumber}-Beta”
  3. TeamCity 应该使用该版本创建 Octopus 版本

我们的问题是,我们无法访问客户的 TeamCity 安装以更改那里的版本,因此我们依赖于双方都适用的解决方案(如该类)。

【问题讨论】:

  • 如果你看一下Build Script Interaction documentation,你会发现如果你可以欺骗你的构建(也许是MSBuild?)将字符串输出到控制台,内容为##teamcity[buildNumber 'XYZ'],那么你可以控制它,要获得 {buildNumber} 部分,您应该检查环境变量,其中应该包含 TeamCity 认为的内部版本号,认为它只是称为 BUILD_NUMBER

标签: c# teamcity octopus-deploy


【解决方案1】:

您可以做的是使用构建步骤中的 Built Script Interaction 自定义输出。

您需要欺骗您的构建,我假设它是 MSBuild,以将其输出到标准控制台。

基本上,你需要输出的应该是这样的:

##teamcity[buildNumber 'XYZ']

XYZ 是您要输出的内部版本号。

这是我创建并附加到 TeamCity 构建配置的简单测试批处理文件:

echo ##teamcity[buildNumber '1.2.0.%env.BUILD_NUMBER%-Beta']

运行两次后,我得到了这个:

【讨论】:

  • 我们正在使用启用 OctoPack 的“Visual Studio (.sln)”构建步骤。我需要改变它吗?
猜你喜欢
  • 1970-01-01
  • 2013-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-20
  • 1970-01-01
相关资源
最近更新 更多