持续集成和自动版本标记的工作流程:.NET项目+ CC.NET + SVN + MSBuild

时间:2012-02-07 20:49:12

标签: svn version-control msbuild continuous-integration

我正在使用SVN + CruiseControl.NET + MSBuild来构建.NET项目。这些是技术细节,以便您了解环境和我的术语,但问题更具一般性。

目前,我的CI工作流程非常简单:

  1. CC.NET检测到SVN中检测到的项目中继的新修订
  2. CC.NET工作副本从SVN更新
  3. MSBuild是针对主干
  4. 上的.proj文件启动的
  5. 运行单元测试
  6. 如果成功,则复制/部署项目
  7. 在第3步,我想将版本号“标记”到构建中;就我而言,在AssemblyInfo.cs文件中,很可能使用类似于msbuildtasks的AssemblyInfo任务。同样,我希望能够在该特定版本号上重复该构建。现在,我想可能在第4步之后,我需要使用标记的AssemblyInfo.cs将项目提交/标记回SVN,但是我无法考虑最直接的方法。< / p>

    如果我将带有标记的AssemblyInfo.cs文件的项目提交回存储库,则它不能进入​​主干,因为这将触发另一个自动构建:无限循环。所以,我认为它需要转到一个新的标签。那么我会标记修订版,将工作副本切换到标记,提交,然后切换回主干。这是常见的方式吗?

    或者我过于复杂了吗?我是否应该担心将此版本提交回仓库或者只是将构建的项目压缩并存储在文件系统中的结构化位置?

2 个答案:

答案 0 :(得分:3)

在我现在和以前的公司。我们在构建期间标记/修改assemblyInfo.cs,并在每次成功构建之后提交assemblyInfo文件。

防止无限循环;我们排除了asssemblyInfo.cs在ccnet配置中触发构建。

缺点:每当我们点击强制按钮时,即使没有修改源代码,新版本也会被提交回主存储库。

我仍在研究更好的方法来版本化assemblyInfo:)

在2小时后添加:

经过一番研究;而不是将assemblyInfo提交回主干;有些人创建工作目录的标签(使用修改后的assemblyInfo) CCNET确实支持这种机制:SVN TagOnSuccess working copy and updated AssemblyInfo.cs

Jeremy Miller使用这种方法http://codebetter.com/jeremymiller/2007/12/06/do-you-really-know-where-that-code-has-been/

缺点:会有很多标签

答案 1 :(得分:1)

您不需要msbuild任务进行版本标记。 CCNET将为您完成此操作。 msbuildtasks样式任务仅适用于没有内置的TFS。

没有理由担心检查assemblyinfo文件。只要有标签(或任何svn称之为),你就可以了。

至于重新运行构建的精确副本,我会说只需将它们压缩并存储实际使用的那些。您不需要存储每个构建。

我一直在做的是有一个CI构建,它运行在每个签入加上一个只为部署手动运行的版本构建。 CI构建根本不会获得版本号,也不会存储在任何位置。版本化版本获取版本号并保存。