我们目前使用的部署设置有些复杂,其中涉及远程 SVN 服务器、用于 DEV、STAGE 和 PROD 的 3 个 SVN 分支,通过补丁等方式在它们之间提升代码。我想知道在小型开发团队的情况下您使用什么进行部署?

有帮助吗?

解决方案

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

在我的本地计算机上,我有一个指向主干分支的 VirtualHost,以测试我的更改。

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

然后,我使用 svnmerge 将选定的补丁从主干合并到本地结账中的生产环境中。我的本地计算机上再次有一个 VirtualHost 指向生产分支。

当我将合并的更改提交到生产分支时,SVN 导出挂钩再次更新生产(实时)导出,并且站点已上线!

其他提示

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

看门人是在应用程序上完成最多工作的人(在本例中,我有 2 个从头开始开发的项目,他有大约 4 个)。

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

显然它有很多漏洞,但这个过程对我们来说是有效的,并且防止我们互相建立。

我在通用标签/分支/主干组织方面没有遇到任何问题。

一般持续的开发发生在主干中。

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

仍与主干相关的发布分支的更改将被合并。

当新版本准备好部署时,它会从主干标记,然后从该标记创建分支。新版本分支将与当前版本并行签出到服务器。当需要切换时,路径会发生变化(“mv appdir appdir.old && mv appdir.new appdir”)。

支持生产版本的开发人员然后 svn 将他们的工作副本切换到新分支,或者从中进行新的签出。

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

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

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

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

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

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

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

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

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

为了部署到生产环境,我们正在执行 SVN 导出到暂存。当效果令人满意时,我们使用简单的 rsync 来推广到生产集群。

我强烈推荐这本书(目前正在粗剪) 持续交付, ,它描述了基于持续集成原则(等等)的管理软件交付的完整流程。

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

无论如何,避免分支和合并的方法是从主干构建可部署的工件,并在通过测试、登台等时推广构建的工件(而不是源)。这样您就可以 100% 确定您投入生产的东西与您测试过的东西是一样的。

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

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

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

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

我的工作情况与您目前的情况类似。我的任务是寻找一个“更好”的解决方案,它的运行过程如下。

live 分支代表当前状态的服务器。

任何开发工作都应该在实时分支中完成。这可能是一个人半小时的工作,也可能是长达一年的多团队项目。只要愿意,生活的变化就可以合并到这些开发分支中。

在一项工作上线之前,现场所做的更改会再次合并,并将其标记为潜在版本。此版本在临时环境中进行了测试,如果通过测试,则从标签中获取新的实时版本。

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

这意味着让开发分支保持最新状态是相当简单的,如果开发中的一项工作被放弃,则只需要做很少的整理工作。

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top