TeamCity从版本文件中读取和更新版本号

时间:2012-08-07 16:17:25

标签: .net teamcity version-numbering

我们正在使用TeamCity作为CI服务器,我们一直在考虑如何实现一种安全版本化方法(即人为错误的机会最小),但这也需要尽可能少的努力。到目前为止,以下似乎是最合乎逻辑的:

  1. 创建版本文件(或使用assemblyinfo.cs)。版本信息将采用格式....此文件将被检入我的VCS。
  2. 运行TeamCity构建
  3. TeamCity从步骤1中读取版本文件,挑选出每个单独的数字并设置相应的TeamCity构建参数(因此我可以在以后使用它们来创建nuget包和标签)
  4. TeamCity auto会增加最终的“构建计数”值。
  5. TeamCity将新版本信息保存回版本文件(使用更新的“构建计数”)
  6. TeamCity然后运行其余的构建步骤,构建文件,运行单元测试,设置正确的程序集版本等。
  7. TeamCity最终将文件重新检入VCS
  8. 我们认为以这种方式做事的好处是我们需要修复旧版本,然后版本号将是正确的,TeamCity可以简单地使用旧版本文件,并像往常一样增加构建计数。这确实假设我们正在更新我们的主要/次要/补丁版本。这有望与TeamCity 7.1即将发布的功能很好地配合使用,该功能允许您通过自定义构建对话框选择要构建的分支。

    从我到目前为止已经阅读过的内容中,这些操作应该可以在TeamCity中进行,但是我们正在寻找最简单的根本来解决这个问题,因为我们只是一个双人装,我们负担不起投入大量时间成为Nant或powershell的专家,却发现它可能无法满足我们的需求。

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

    1. 我建议的可能吗?
    2. 如果是,那么考虑到我对Nant,powershell等的有限经验,最好的工具是什么(对于那些命令行和脚本经验扩展到简单的DOS操作和一点VBScript的人来说,这是最快的学习方法。 )
    3. 非常感谢任何帮助。

2 个答案:

答案 0 :(得分:9)

关于你的第一个问题:是的,这是可能的:

  1. 将.git(.svn,.hg等)目录添加到VCS规则
  2. 使用您喜欢的脚本语言在teamcity(命令行运行器)中的构建脚本中读取版本号并进行更新。
  3. 通过interaction protocol
  4. 设置内部版本号
  5. 使用您喜欢的脚本语言更新版本文件中的内部版本号
  6. 执行构建步骤
  7. 执行提交和推送,你可以因为你在最后一步中已经在build dir中有.git(.svn,.hg等)目录
  8. 很抱歉,但我无法回答您的第二个问题,因为我不知道任何适合Windows的工具。在linux上我会使用bash。

答案 1 :(得分:0)

使用 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)']"