1

在 Web 应用程序的开发/测试设置中,当使用 dvcs (bzr, git) 时,为什么从存储库目录实际运行应用程序是错误的

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

4

2 回答 2

4

您是否愿意查看路径和权限接近的运行时,因为它们将是真实的,因此任何错误都可能反映现实,或者您是否愿意花时间解决将解决非标准部署的古怪问题异能?你知道,像

  • 您是本地管理员,因此您可以使用所有资源,但是当在用户帐户不是管理员的情况下部署某些内容时,它会失败
  • 在本地解决但在部署安装中无法解决的路径杂乱无章
  • 一件没有进入[你|其他人]签到的新东西,所以“它在我的机器上工作!”(tm)

或其他任何减慢速度但无助于交付高质量代码的事情。

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

于 2012-10-01T21:37:56.993 回答
2

澄清一下,问题不在于您如何部署,这是另一个问题。更深层次的原则是您的测试环境应该尽可能接近生产环境,原因@DaveE 提到:小的部署差异会使您的测试无用。

听起来您真的认为镜像生产安装对于您在开发时的测试来说工作量太大了。有两种解决方案。使您的测试环境与生产环境不同并不是其中之一。

首先,使生产安装更容易。这可能会将手动过程(在此处复制文件、运行这些脚本、更改这些权限......)变成一个自动化过程。或者它实际上可能会减少部署的作用。在不知道细节的情况下不能说更多。

如果你没有测试环境,你的开发环境就变成了您的测试环境,并且必须遵循更严格的规则,即在生产之前成为您唯一的防线。为避免这种情况,请创建一个登台服务器进行测试。登台服务器是尽可能多地反映生产的服务器。开发副本首先安装在登台服务器上并在推送到生产之前进行测试。这为您提供了一个两阶段的测试系统。您在不太精确的开发环境中进行了一些测试,并且完整的测试是在暂存环境中完成的。完整的测试套件不必一直运行,因此暂存服务器不必不断更新。YMMV。然后,您可以在开发环境中偷工减料以加快开发速度,同时仍然知道一切都将在生产前的完整安装上进行测试。

如果您有资源,登台服务器是生产中所有硬件和软件的完美镜像。你可能没有那个,所以它可以是一个虚拟机或只是一个子目录。如果您没有得到团队其他成员的支持,两者都可以在您的开发机器上运行。

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

因此,虽然一开始看起来像是很多繁琐的工作,但最终所有这些都可以在您无需按下按钮的情况下进行测试。

最终,您的新代码必须在与生产环境尽可能相似的环境中进行测试,然后才能上线。有很多方法可以做到这一点,但这是一个坚如磐石的规则。

于 2012-10-02T21:48:49.700 回答