使用开源工具设置复杂的舞台环境

时间:2011-07-03 08:07:41

标签: svn version-control release perforce release-management

我已经搜索了一段时间的管子并且没有找到任何关于这个问题的好答案,这通常是因为对读者的问题部分缺乏了解用例是什么,所以我将成为极其详细。例如,这个问题:Create a "label" in subversion indicating what files should be in the next release(5投票答案似乎很接近,但不完全存在),这个问题:Using Subversion Tags to Deploy to Development/Staging/Testing Server与我的相似,只是试图回答的人似乎并不完全理解微妙之处。

我正在为快速发展的项目建立一个更复杂的临时环境。当前环境包括主生产分支和构建分支。构建不是问题,因为我们可以在构建分支的“完成”标记构建分支的头部修订并将其合并回生产中。更微妙的部分是能够设置一个自动化过程,该过程使用标签为每个文件标记任意版本的任意文件集,以便您可以将该标签同步到登台服务器。现在在SCM世界标签被重载所以我将明确说明在这种情况下我在perforce(http://www.perforce.com/perforce/doc.current/manuals/cmdref/label.html)意义上使用标签这个词意味着一组文件的名称,其中文件是任意选择的修订和集合是可变的。

举一个简单的例子:假设我有文件A和B.文件A的头版本是该文件的修订版本13,文件B的头版本是版本4.目前在生产中我们有A @ 10和B @ 2。对文件A的更改已经是QAd,并且已确定它已准备好进行修补。对文件B(修订版3)的第一次更改已准备好进行修补,但业务方已确定更改头文件(修订版4)需要更多工作,因此不应修补并将其推迟到以后的日期。因此,为了修补生产,我们需要标记B @ 3和A @ 13进行发布。所以这就是每个人都说“哦,好用标签”的地方。所以这对20110703夜间补丁来说都很好。但是在舞台环境中,我们还希望能够在状态中测试不一定是头部修订的文件,这些文件最好被描述为“如果我们现在要标记分支,那么这就是它的样子”状态一整天(周,月等)。不要误会我的意思我不想在生产分支中做一堆编码,但有时候这是必要的。

到目前为止,我所掩盖的一点是,还有一个票务系统,其中提交与任务/票证相关联,任务/票证与特定的发布日期相关。因此,工作流是用户创建任务,以变更集的形式将代码附加到其中(具有一个任务到多个变更集的关系),任务通过批准过程进行,并最终被命名为准备好补丁。然后有一系列自动化脚本来确定在第X天将要修补的文件修订版本,并将暂存环境(或生产)同步到适当的文件版本。我遇到问题的具体脚本是给定一组任务的那个,并且通过它们的变更集,准备补丁我们能够将一组文件同步到适当的版本以模拟未来的生产补丁将会是什么看起来像。如果我使用perforce,我可以使用可变的标签完成此操作,并且基本上只保存用户可以同步到的(filename,filerevision)值的集合。但我希望使用开源工具,特别是与Redmine集成的工具(是的,我仍然需要构建ticket-to-changeset关联层)。

所以我的问题是。

  1. 是否有任何开源SCM具有标签的概念?我看起来有点像mercurial和队列扩展,但它再次似乎解决了类似但不完全相同的问题。 (随意纠正我,并说“没有队列完全解决这个问题......”)
  2. 如果没有任何工具以这种方式工作,那么有关如何最好地设置它的任何建议吗?我当然可以编写一个有点伪造标签的脚本,并手动同步每个单独的文件,但这在很多方面看起来很糟糕。
  3. 基本上我要做的是能够允许诸如任务被移出几天或从非补丁状态转换到可修补状态的操作,以便能够影响登台服务器上的代码状态把它们放在“这是我们正在计划修补的状态”状态,在任务改变后没有任何人为干预。

    感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

[这个答案试图总结上述评论中的讨论。]

现代DVCS(例如Git,Mercurial)将更改作为提交序列而不是文件集进行管理。因为如果这种不同的范例,很难想到从特定修订中选择特定文件的“标签”。提交可以触摸多个文件,提交可以触摸给定文件(尽管文件内部的更改可能重叠也可能不重叠)。

要使用Git管理分阶段发布,您可以做的是:

  1. 抓住以前的发布分支。
  2. 拉出每个分支或樱桃选择要在下一个分段测试中进行的每个提交(您可以在开发工作站上执行此操作)。
  3. 推送到临时存储库。
  4. 将其拉入登台服务器。
  5. 当分段检出时,将同一分支拉到生产中。
  6. 在(希望)常见的情况下,如果没有想要的任何更改,则第2步将变为单步合并。如果您不想进行特定更改,那么您可以选择 想要的更改。

    一些有用的资源: