我们在我们公司使用SVN。我的整个团队希望我们通过复制一切,每次都进行部署

问题描述:

当前的部署过程需要我们只移动当前SVN修订版和上次部署的SVN修订版之间的差异,这在我的项目中完美无瑕。我们在我们公司使用SVN。我的整个团队希望我们通过复制一切,每次都进行部署

其他项目此方法抱怨,要部署的一切,从开发环境中的每个文件移动到其他环境类似的测试,准备,还是住。

Java团队负责人和PHP团队负责人就此达成一致。我是一名PHP开发人员,发现这种方式效率低下,无用。当我们决定部署复制所有内容时,我们不必使用这么多时间和带宽。

当我们使用SVN差异部署,服务器管理员保存包含所有涉及当前部署的修改文件的压缩文件,所以它更容易恢复当我们想。

我只想给公司的经理提供一些很好的理由,他们在技术上意识到部署过程中存在的问题,只是为了让他明白,部署后某些事情会变得混乱,这是因为开发人员没有做正确的事,并不是因为我们必须部署所有东西才能使事情发挥作用。我想说服他,使用SVN进行部署比在SVN上完全不依赖所有部署(原始复制/粘贴)要好得多。

+0

我认为部署一切都会更好。仅部署自上次部署以来所做的更改依赖于与SVN修订版相同的现有实时版本。如果某个部署出现问题,并且没有人注意到,或者有人直接在活动服务器上进行了快速修复(可能会发生),那么基于差异的部署可能会失败。 – axiac

+0

@axiac从SVN部署时,**不允许**在没有部署的情况下在活动服务器上进行任何更改,您可以在活动服务器上快速完成修复,如果它能正常工作,则撤消修改,然后执行修复SVN并正常部署。 – KarimMesallam

+0

你用什么来更新服务器上的代码? svn up?我不明白你为什么必须保存“包含所有与当前部署相关的修改过的文件的压缩文件”。使用SVN,您可以切换到您需要切换的每个修订版本 –

(我不得不因为没有在评论足够的空间来使用aswer)

有趣的问题。我猜Java开发人员(就像我)每次只用于部署整个应用程序(对于不能从源代码运行的任何类型的语言,也可能是相同的,正如PHP所做的那样)。

在我曾受聘的前公司中,这是发布更新的方式,由于应用程序WAR超过了100 MB,整个过程总是需要几个小时,即使只是一个几个班已经改变了。

在我现在就职的公司中,他们将一个系统与差异结合在一起,所以与您所描述的方式类似(尽管Java类文件必须全部替换掉​​) 。
我认为这是一个更好的方法,更容易和轻量级来应对。

由于PHP依赖的源文件,即使在运行时,我觉得像你已经有一个差别为基础的方法比较好。所以+1你当前的做法。

所以,我认为,更快的部署,更简单的备份和你在你的问题提其他的事情是足够充分的理由保持目前的做法。

当然,从SVN随时可以生成和部署完整功能的版本并且可以在服务器上替换相应的基于增量版的版本是非常重要的(但我相信您已经有)。

关于有对你意见的人:其中你的做法是错误的请他们来证明(与现实世界的例子)。

(这也许会找到一个更适合上programmers.stackexchange.com

我们的部署脚本草图(我们使用的是Git,使用Subversion对算法没有任何影响,只有实际的命令是不同的)。我们使用的是工作副本(本地资源库与Git),并在现场码的下一个版本准备(一种staging如果你喜欢),另一个目录(名为export):

  • 更新的本地副本代码(git pull代表Gitsvn update代表Subversion);
  • 清理export目录,然后将代码复制到其中;我们使用的是rsync而不是cp,因为它更容易为其提供它应该忽略的目录和文件的列表(.git,.svn a.s.o.);
  • 将任何所需的配置设置应用于export目录中的文件; F.E.我们不会将敏感数据(用户,密码)保存到存储在存储库中的代码中,而是保留占位符值;此步骤会将占位符值替换为实际用户,密码,密钥a.s.o.
  • 做其他必要的修正; F.E.我们使用一些符号链接来指向包含用户上传数据的目录;在代码仓库中,我们有它们的空目录;在修复阶段,这些目录将从export中删除,然后创建具有相同名称的符号链接;符号链接指向数据存储位置的Web根外部的永久目录;另外,我们使用符号链接到第三方库 - 它们不存储在回购站中,并且它们的部署遵循不同的模式(它们通常被冻结到项目启动时的版本,以避免不兼容);
  • 使用rsync并使用适当的参数(--archive等)使代码的实时版本与本地export目录中刚准备的版本相同。

您最可能遇到的问题不是因为“每次都复制所有内容”,而是因为将发布的各个文件修复程序发布为发布版本,而不是整个版本发布。最好的做法是捕获整个应用程序或应用程序组件的构建工件,一旦你已经到了这一点,这是不是你是否正在复制所有的文件,或只是自那是改变的文件是无关紧要的现在是部署软件的实现细节(无论这是基本的文件副本,FTP,rsync还是像我公司的产品BuildMaster这样的企业级工具)。