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

我们目前正在使用一个比较复杂的部署设置,它包括一个远程SVN服务器,3个SVN分支,用于DEV,STAGE和PROD,通过补丁等方式在它们之间促进代码。我不知道你在小型开发团队情况下如何部署?

0
额外 编辑
意见: 1

11 答案

一个简单的树干分支包含最新的代码,然后每当我们开始生活时剪下一个分支。这似乎工作非常有效。只要您为实时系统剪切的当前分支出现故障,您就可以轻松地转到上一个分支。此外,修复当前分支上的错误很容易,并且由于分支在切割新分支时有效死亡,因此只需要处理一个真正的分支(然后将修复从那里合并到活分支)。

0
额外

我们使用发布分支 - 这对我们来说似乎比我们正在做的功能分支更有效。

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

0
额外

当我在一个小型开发团队(小意思是我,另一个程序员和老板)工作时,这真是一团糟。然而,我们发现分配一个“看门人”类型的过程对我们有效。

看门人是在应用程序上做了大部分工作的人(在这种情况下,我有2个项目是从头开发的,他有4个)。

基本上,每当他必须在我的项目上工作时,他会通知我他正在做的工作,我会确保该存储库是最新的和可构建的,然后他将下拉,进行更改,然后提交。他会告诉我,它已经完成,我会撤下,建立和部署。如果有数据库更改,我们有一个DB Change文件夹,其中包含可更正数据库的所有脚本。

它显然有很多漏洞,但这个过程为我们工作,并阻止我们彼此建立。

0
额外

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

Environmental differences can be handled by having different versions of the relevant files in the trunk. i.e. database.yml & database.yml.prod. The deployment process should be environmentally aware and simply copy the per-environment files over the default ones.

0
额外

我的工作与你目前的情况类似。我的任务是找到一个更好的?解决方案,它沿着以下方向运行。

实时分支表示处于当前状态的服务器。

任何开发工作都应该在现场采取的分支中完成。这可能是一个半小时工作或一年多团队项目。经常喜欢改变生活可以合并到这些发展分支。

在一项工作上线之前,实时更改会再次合并,并将其标记为潜在发布。此版本在分段环境中进行测试,如果通过测试,新标签将从标签中取出。

如果效果更好,可以将几件作品合并到一个版本中。

这意味着保持开发分支与实时保持一致是相当简单的,并且如果开发中的一部分工作被丢弃,那么最小的整理工作就可以完成。

要从一个项目改为另一个项目,开发人员只需简单地将他们的本地工作环境切换到另一个分支。

我们在系统中遇到的问题之一就是DEV可以很快与PROD过时,因此您不会直接面对现场发展,直到舞台发现交叉依赖并不容易。上述解决方案解决了这些问题,同时仍然保持相当轻量级。

0
额外

我亲自在本地工作(开发),添加/修复功能,并且当我认为它已经准备就绪时,我会致力于主干(生产)。在生产服务器上,我只是做一个svn更新。

0
额外

我们不使用分支来分期处理与网络有关的东西;仅用于测试需要很长时间(阅读:超过一天)的实验性事物才能合并回干线。主干以“持续整合”的风格代表了一个(希望)正在工作的现状。

因此,大多数变化都直接提交给主干。 CruiseControl.NET服务器会自动更新一台也运行IIS并拥有所有额外站点可用资源的最新副本的机器,因此可以对站点进行全面,全面的内部测试。测试之后,文件将被上传到公共服务器。

我不会说这是完美的方法,但它很简单(因此适合我们相对较小的员工)并且相对安全,而且工作得很好。

0
额外

发展的主干,以及生产材料的分支(生产)。

在我的本地机器上,我有一个指向中继分支的VirtualHost来测试我的更改。

任何提交到中继触发一个提交钩子,执行svn导出并同步到在线服务器的开发URL - 所以如果该网站是stackoverflow.com,那么这个钩子自动更新dev.stackoverflow.com

然后,我使用svnmerge在我的本地结账中将选定的修补程序从主干合并到生产中。我的本地机器上再次有一个VirtualHost指向生产分支。

当我将合并的更改提交到生产分支时,SVN导出钩子再次更新生产(实时)导出,并且该站点正在运行!

0
额外
我喜欢这个,但是如何让你的数据库更新符合这种方法?
额外 作者 cgreeno,
网站代码处理来自管理URL的数据库更新,并且存在数据库的“版本号”以知道何时升级。
额外 作者 Thomas Vander Stichele,

中继包含当前的“主要”开发代码库。

开发人员通常会为任何中长期项目创建一个单独的分支,这可能会影响中继代码库并妨碍其他开发人员的工作。当他完成后,他会重新回到后备箱。

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

要部署到生产中,我们正在执行SVN导出到分段。如果这是令人满意的,我们使用一个简单的rsync来发布到生产群集。

0
额外

我对普通标签/分支/主干组织没有任何问题。

一般持续发展发生在干线。

生产版本的维护发生在适当的发布分支中。

与主干仍然相关的释放分支的变化被合并。

When a new version is ready for deployment it is tagged from trunk, then a branch is created from that tag. The new release branch is checked out to the server, parallel to the current release. When it's time to switch, the paths are juggled ("mv appdir appdir.old && mv appdir.new appdir").

支持产品发布的开发人员然后svn将他们的工作副本切换到新的分支,或者从中进行新的结算。

0
额外

我强烈建议您使用持续交付这本书(目前处于粗略剪切状态),其中描述了一个完整的软件管理流程交付,基于持续集成原则(等等)。

我非常不喜欢分支和合并的方法,因为它可能变得非常混乱,而且非常浪费,因为你最终花时间在实际上没有提供任何新价值的活动上。您已经开发,测试并修复了一次代码,为什么会创建一个情况(将代码复制到另一个分支),这需要您重做此项工作?

无论如何,避免分支和合并的方式是从主干构建可部署的文物,并在通过测试,分期等时促进构建的人工制品(而不是源代码)。这样,您就可以100%确定所要做的事情投入生产是你测试过的同样的东西。

如果你有不同的功能可能需要按照不同的时间表发布,那么改变你的实现方式(使功能可配置,或更好的模块化)可以帮助你保持单一的开发中继。

0
额外
这本书现在已经出来了,从我读到的内容看起来很好。
额外 作者 Andrew Swan,