我们目前使用Subversion进行发布管理,并标记所有版本(包括QA和生产服务器)。但是,我们想要创建一个反映我们最新版本的单一版本目录。这样我们就可以让TeamCity从同一个文件夹中拉出来进行连续构建。此外,如果有人必须快速修复生产错误,他们不会意外地将其转移到错误的分支。
例如,下面是我们当前的结构,添加了'release'文件夹。是否有一种简单的方法可以将标记分支每次移动到'release',或者甚至让'release'成为最新release_ *版本的链接?
澄清
以下是我们的构建/发布流程目前如何运作的示例:
答案 0 :(得分:4)
我会(并且确实)对此采取略微不同的方法。源代码管理主要用于管理源代码,并将其视为跟踪或暗示发布的一种手段,可以使生活变得有点棘手。这实际上是您的持续集成环境的目的,它比SVN做得好得多。
我使用TeamCity作为识别从SVN提取的路径和修订号的方法。在构建运行时定义它很容易,并且始终谨慎地完成任何生产发布(即仔细检查路径和修订)。在绝对最坏的情况下,如果你搞砸了,你总是可以用修改后的参数重新运行构建。
您真的不希望最终将代码更改直接更改为“Releases”文件夹 - 如果主流开发或分支机构适用于您必须调整早期版本的话,这就是主干的用途。这有点击败SVN投入做一些不是其核心力量的事情!在这方面,您可能会发现The 10 commandments of good source control management中的一些提示很有用。
答案 1 :(得分:0)
您可以轻松编写此脚本,以便在构建完成后,您可以将文件或文件夹的内容复制到发布文件夹中。在执行此操作之前,您甚至可以删除发布文件夹的内容。所以,是的,因为svn中的分支或标签是复制操作,所以您可以轻松地完成此操作。
答案 2 :(得分:0)
对于每个项目,我们都有一个Latest
文件夹,其中包含最新版本(通常只是二进制文件)。
这对于持续集成非常有用,尽管我们必须使用自定义MSBuild脚本来实现这一点,例如对内容执行Svn删除,然后将Svn副本删除到最新文件夹。
答案 3 :(得分:0)
您可以使用svn:external
属性将名为release point的文件夹指向其他标记。见svn:external。
svn propset svn:externals 'release http://my_repo/tags/latest_tag' .
每次发布新标记时,您都必须更新属性值以指向最新标记。