7

我们正在使用 TeamCity 作为 CI 服务器,并且我们一直在考虑如何实现一种方法来对我们的版本进行版本控制,该方法既安全(即人为错误的可能性最小)又需要尽可能少的努力。到目前为止,以下似乎是最合乎逻辑的:

  1. 创建一个版本文件(或使用 assemblyinfo.cs)。版本信息将采用....格式。此文件将检入我的 VCS。
  2. 运行 TeamCity 构建
  3. TeamCity 从步骤 1 中读取版本文件,挑选出每个单独的数字并设置相应的 TeamCity 构建参数(这样我以后可以将它们用于创建 nuget 包和标记等事情)
  4. TeamCity 自动增加最终的“构建计数”值。
  5. TeamCity 将新版本信息保存回版本文件(使用更新的“构建计数”)
  6. 然后,TeamCity 会运行我的其余构建步骤、构建文件、运行单元测试、设置正确的程序集版本等。
  7. TeamCity 最终将文件检查回 VCS

我们相信这样做的好处是如果我们需要修复旧版本,那么版本号将是正确的,TeamCity 可以简单地使用旧版本文件,并像往常一样增加构建计数。这确实假设我们正在正确更新我们的主要/次要/补丁版本。这有望与即将发布的 TeamCity 7.1 功能很好地配合使用,该功能允许您通过自定义构建对话框选择要构建的分支。

从到目前为止我已经读过的内容来看,这些操作在 TeamCity 中应该是可能的,但我们正在寻找最简单的方法来解决这个问题,因为我们只是一个两人的装备,而且我们负担不起大笔投资大量时间成为 Nant 或 powershell 的专家,却发现它可能无法达到我们想要的效果。

所以我想总结一下我的问题如下:

  1. 我提议的可能吗?
  2. 如果是,那么考虑到我在 Nant、powershell 等方面的有限经验,最好的工具是什么(即对于命令行和脚本经验扩展到简单 DOS 操作和一点 VBScript 的人来说,这是最快的学习工具)

任何帮助是极大的赞赏。

4

2 回答 2

9

对于您的第一个问题:是的,有可能:

  1. 将 .git(.svn, .hg etc) 目录添加到 VCS 规则
  2. 使用您最喜欢的脚本语言在 teamcity(命令行运行器)中读取构建脚本中的版本号并对其进行增量。
  3. 通过交互协议设置内部版本号
  4. 使用您喜欢的脚本语言更新版本文件中的内部版本号
  5. 执行构建步骤
  6. 执行提交和推送,因为您在最后一步的构建目录中已经有 .git(.svn, .hg etc) 目录

抱歉,我无法回答您的第二个问题,因为我不知道任何适用于 Windows 的工具。在 linux 上,我会使用 bash。

于 2012-08-07T17:17:28.660 回答
3

使用PowerShell运行器类型添加构建步骤

脚本字段设置为源代码

ScriptSource字段中输入以下内容:

# Get AssemblyInfo file's contents
$file = "GlobalAssemblyInfo.cs"
$contents = get-content $file -Raw

# Regex to get the version number from AssemblyInfo file contents
$regex = new-object System.Text.RegularExpressions.Regex ('(^\s*\[\s*assembly\s*:\s*((System\s*\.)?\s*Reflection\s*\.)?\s*AssemblyVersion(Attribute)?\s*\(\s*@?\")(?<version>.*?)(\"\s*\)\s*\])', [System.Text.RegularExpressions.RegexOptions]::MultiLine)

# Get the version number
$version = $regex.Match($contents).Groups["version"].Value

# Update TeamCity buildNumber parameter using stdout
echo "##teamcity[buildNumber '$($version)']"
于 2019-05-30T15:57:18.820 回答