我如何改进我的开发和部署策略?

Oli*_*nde 6 svn lamp workflow

我正在开发一个在LAMP堆栈(Linux Apache Mysql PHP)上运行的Web应用程序,并希望有关改进我的工作流程的建议.

我有3个环境:

  1. 我的本地机器AKA我的开发环境
  2. 我的专用服务器上的暂存帐户,以便我可以测试Web应用程序
  3. 我的专用服务器上的生产帐户

我在本地计算机上进行所有开发,并使用位于我的专用服务器上的subversion服务器.我设置了一个钩子脚本,这样每当我提交时,我的"登台"帐户都会使用新代码进行更新.

偶尔我会确保暂存帐户中的所有内容都能正常工作,并通过一个小脚本将更改推送到我的生产帐户.

这在大多数情况下运作良好,但有一些烦恼:

  • 我的域名在几个地方都是硬编码的,这使得在环境之间切换非常耗时.我可以手动修改我的主机文件,但它不是很快,它不适用于同一台服务器上的2个帐户(prod/staging).

  • 我无法在所有三种环境中使数据库保持最新状态.我可以在所有环境中使用相同的数据库,但我必须承担破坏生产环境的风险.

所以,我的问题是:我该怎么做才能缓解这些问题?

更新:硬编码域问题由第三方软件引入,因此,"不硬编码"目前不是一种选择.

Dar*_*don 1

理想情况下,您希望登台是生产的精确复制品。这样,您就可以对在制作中看到的内容充满信心。当您提交时自动推送到暂存不会执行此操作,因为您通过提交引入的任何错误都会立即发送到暂存。

您可能想要的是设置另一个环境并将其称为测试。这将是您在提交时自动推送到的位置。使用该环境进行质量检查,然后您可以打包代码并将其推送到暂存区以进行最终测试。如果一切顺利,则将包推向生产。

至于域名问题,如果可以的话,我建议不要对它们进行硬编码。或者至少对不同的环境使用子域,以便更轻松地以编程方式确定您所处的环境。

为了使数据库在不同环境中保持最新,您可能需要考虑定期从生产环境中进行转储,并使用该转储更新暂存、测试和开发环境。每天一次应该有效。这样,您就可以根据用户在生产中看到的内容进行开发和测试。