2012-10-01 24 views
1

在开发/测试设置为Web应用程序,使用DVCS(BZR,GIT)时,为什么会是错误的实际运行从仓库目录的应用程序?为什么不直接从git或bzr存储库部署代码?

我遇到的所有团队都有一个单独的部署脚本,可以将存储库签出导出到另一个目录或服务器,但我真的从不明白原因,并且害怕要求“长大”不要显得“愚蠢”。我的意思是,无论如何,这是一个开发服务器,而不是产品,所以...?

+1

我不知道在SO所允许的冒犯性词语。 –

+0

@Schwern ...对不起,因为在最后的话题咆哮和习惯使用f字。在重读我的q之后,我意识到这是没有意义的,并感谢您对其进行编辑,而不是仅仅删除或降低投票。干杯! – NeuronQ

回答

2

为了澄清,这个问题是不是真正的如何部署,这完全是另外一个问题。更深层的原理是,由于@DaveE提到的原因,测试环境应尽可能接近生产:小的部署差异可能会使测试失效。

听起来真是你认为镜像制作安装为您的测试而开发的工作太多了。有两个解决方案。让您的测试环境与生产不同,不是其中之一。

首先,使生产更容易安装。这可能是一个手动过程(在这里复制文件,运行这些脚本,更改这些权限......)到一个自动化过程。或者它可能实际上减少了部署的功能。如果不知道细节,就不能多说。

如果您没有测试环境,您的开发环境会变为您的测试环境,并且必须遵守在生产之前作为您唯一防线的更严格规则。为了避免这种情况,请创建一个登台服务器进行测试。临时服务器是尽可能多地反映生产的服务器。开发副本首先安装在登台服务器上,并在推向生产之前进行测试。这给你一个两阶段测试系统。您可以在不太确切的开发环境中进行一些测试,并在分级环境中完成全部测试。完整的测试套件不必一直运行,因此登台服务器不必一直更新。因人而异。然后,您可以在开发环境中切入角落以加快开发速度,同时仍然知道在生产之前所有内容都将在完整安装中进行测试。

如果你有资源,一个临时服务器是所有生产的硬件和软件的完美的镜子。你可能没有,所以它可以是虚拟机或只是一个子目录。如果您没有从团队的其他成员那里购买,两者都可以在您的开发机器上运行。

自动执行安装过程加上临时服务器意味着您可以开始执行continuous integration testing。这是“在每次提交时自动在测试服务器上运行测试”的奇特术语。持续集成系统的一个例子是Jenkins。然后,无论您的部署有多复杂,机器人都会为您处理它。

因此,虽然起初它看起来像很多繁琐的工作,但它最终都会结合在一起,以便在没有按下按钮的情况下进行测试。

最终,您的新代码必须在被推送之前在类似于生产的环境中进行测试。有很多方法可以实现,但这是一个坚实的规则。

+0

感谢您的详细解答! ...所以我肯定应该有一个测试服务器/虚拟机/安装程序,这种方式无关紧要,如果开发安装程序是不是很确切(如果我做“愚蠢”的东西,如从开发中的回购安装)。试图理解最简单的解决方案可能会很有趣,这实际上帮助我理解为什么更复杂的设置(如持续集成测试)存在以及为什么他们真的可以帮助: – NeuronQ

4

您是否希望看看路径和权限接近的运行时间,因为任何错误都可能反映真实情况,或者您是否愿意花时间运行古怪问题以解决问题标准部署特性?你知道,像

  • 你是本地管理员,因此所有资源都提供给你,但是当 东西被部署在用户帐户是不是管理员,它 失败
  • 路径克鲁夫特在本地而不是解决罚款部署 安装
  • 是一个新的东西,并没有使之成为 [您|别人的]办理登机手续,所以“!它可以在我的机器”(TM)

或其他任何可减慢速度但无助于提供高质量代码的东西。

TL;博士:什么@Schwern下面说。

+1

这可以概括为:使开发/测试安装尽可能接近生产安装,否则您没有测试与用户使用的相同的东西。就像你在一个平行宇宙中工作一样。 – Schwern

+0

它是有道理的,如果你实际上有一个测试服务器不同于托管主要/中央回购或任何其他风味的开发测试生产单独的3个独立的东西的开发服务器......但如果主要回购是在开发服务器上,没有单独的测试服务器? (并且我已经看到了这种设置...) – NeuronQ

+0

如果绝对必要,您可以在服务器上有回购站,但可以将其部署到非回购场所进行测试。您的回购应该*不在您的网络服务器的部署位置。那只是愚蠢的。 – DaveE

相关问题