您最喜欢的SVN web应用部署工作流是什么?

您最喜欢的SVN web应用部署工作流是什么?,svn,deployment,Svn,Deployment,我们目前正在使用一个有点复杂的部署设置,包括一个远程SVN服务器、3个SVN分支(用于开发、阶段和产品)以及通过修补程序在它们之间升级代码等。我想知道在小型开发团队的情况下,您使用什么来部署?一个简单的主干分支包含最新的代码,然后我们一上线就砍一根树枝。这似乎相当有效。只要为实时系统剪切的当前分支出现故障,就可以轻松转到上一个分支。此外,修复当前处于活动状态的分支上的bug也很容易,而且由于当您剪切一个新分支时,该分支实际上会消亡,因此您只需要处理一个真正的分支(然后将修复从那里合并到活动分支)

我们目前正在使用一个有点复杂的部署设置,包括一个远程SVN服务器、3个SVN分支(用于开发、阶段和产品)以及通过修补程序在它们之间升级代码等。我想知道在小型开发团队的情况下,您使用什么来部署?

一个简单的主干分支包含最新的代码,然后我们一上线就砍一根树枝。这似乎相当有效。只要为实时系统剪切的当前分支出现故障,就可以轻松转到上一个分支。此外,修复当前处于活动状态的分支上的bug也很容易,而且由于当您剪切一个新分支时,该分支实际上会消亡,因此您只需要处理一个真正的分支(然后将修复从那里合并到活动分支)。

当我在一个小型开发团队工作时(small意味着我、另一个程序员和老板),这是一片混乱。然而,我们发现分配一个“看门人”类型的流程对我们来说是有效的

守门员是在应用程序上做了最多工作的人(在本例中,我有两个项目是从头开发的,他有4个)

基本上,每当他必须处理我的项目时,他都会通知我他正在工作,我会确保存储库是最新的,并且是可构建的,然后他会下拉,进行更改,然后提交。他会告诉我已经完成了,我会拆除、建造和部署。如果有数据库更改,我们会有一个数据库更改文件夹,其中包含所有用于更正数据库的脚本


很明显,它有很多漏洞,但这个过程对我们很有效,并阻止了我们彼此重叠。

三个分支听起来像是额外的工作


环境差异可以通过在主干中具有不同版本的相关文件来处理。i、 e.database.yml和database.yml.prod。部署过程应该具有环境意识,只需将每个环境的文件复制到默认文件上即可。

我们不使用分支来暂存与web相关的内容;仅用于测试需要很长时间(阅读:超过一天)才能合并回主干的实验性内容。主干采用“持续集成”风格,表示(希望)工作的当前状态

因此,大多数更改直接提交到主干。CruiseControl.NET服务器将在同时运行IIS的计算机上自动更新,并具有所有可用额外站点资源的最新副本,因此该站点可以在内部进行全面、干净的测试。测试后,文件将上载到公共服务器


我不认为这是一种完美的方法,但它很简单(因此适合我们相对较小的员工),也相对安全,而且效果很好。

主干用于开发,分支(生产)用于生产人员

在我的本地机器上,我有一个指向主干分支的虚拟主机来测试我的更改

任何对主干的提交都会触发一个提交钩子,该钩子执行svn导出并同步到在线服务器的dev URL-因此,如果站点是stackoverflow.com,则该钩子会自动更新dev.stackoverflow.com

然后,我在本地签出中使用svnmerge将选定的补丁从主干合并到生产。我的本地机器上又有一个虚拟主机指向生产分支


当我将合并的更改提交到生产分支时,SVN导出钩子会再次更新生产(实时)导出,并且站点是实时的

我们使用发布分支-这似乎比我们所做的功能分支更有效


不要为不同的环境创建不同的分支。

主干包含当前的“主要”开发代码库

开发人员通常会为任何中长期项目创建单独的分支,这些分支可能会阻塞主干代码库并妨碍其他开发人员。当他完成后,他会合并回树干

每次将代码推送到生产环境时,我们都会创建一个带标签的版本。/tags中的文件夹只是版本号


要部署到生产环境中,我们需要将SVN导出到暂存环境中。当这是令人满意的,我们使用一个简单的rsync推出到生产集群

我个人在本地(开发)工作,添加/修复功能,当我认为它准备好时,我会致力于主干(生产)。在生产服务器上,我只进行了一次svn更新。

我处理的情况与您当前的情况类似。我的任务是找到一个“更好”的解决方案,它按照下面的思路运行

live分支表示处于当前状态的服务器

任何开发工作都应该在取自live的分支中完成。这可以是一个人半小时的工作,也可以是一个为期一年的多团队项目。只要喜欢,对生活的改变可以被合并到这些开发分支中

在一项工作投入使用之前,来自活动的更改将再次合并,并将其标记为潜在版本。此版本在登台环境上进行测试,如果通过测试,则从标记中获取新的live

如果效果更好,可以将多个工作合并到一个版本中

这意味着用live保持开发分支的最新状态是相当简单的,如果开发中的一项工作被删除,那么只需进行最少的整理

要从一个项目转换到另一个项目,开发人员只需将本地工作环境切换到另一个分支即可


正如您所描述的,我们在系统中遇到的一个问题是,开发人员可能会很快与PROD脱节,因此您没有针对实时开发,并且在开发阶段之前不容易发现交叉依赖关系。上面的解决方案解决了这些问题,同时仍然保持了相当的轻量级。

我在使用通用标记/分支/主干组织时没有遇到任何问题

一般正在进行的开发发生在主干中

维护者