Php 2台云服务器,1台开发人员,1台产品;什么';这是一个好的部署过程吗?

Php 2台云服务器,1台开发人员,1台产品;什么';这是一个好的部署过程吗?,php,apache,deployment,build-process,phing,Php,Apache,Deployment,Build Process,Phing,当前正在为我的web应用程序使用LAMP堆栈。我的dev和prod位于同一个云实例中。现在我得到了一个新实例,希望将开发/测试环境移动到新实例,将其与prod环境分离 它曾经是一个简单的Phing脚本,可以将SVN导出到prod目录(由我的vhost.conf指向)。在环境分离的情况下,我现在如何创建一个好的构建过程 考虑将SVN存储库传输到dev服务器,然后执行ssh+SVN推送(使用Phing可以吗?) 这种设置的最佳/常见做法是什么 更多信息: 我目前正在为MVC框架使用CodeIgnit

当前正在为我的web应用程序使用LAMP堆栈。我的dev和prod位于同一个云实例中。现在我得到了一个新实例,希望将开发/测试环境移动到新实例,将其与prod环境分离

它曾经是一个简单的Phing脚本,可以将SVN导出到prod目录(由我的vhost.conf指向)。在环境分离的情况下,我现在如何创建一个好的构建过程

考虑将SVN存储库传输到dev服务器,然后执行ssh+SVN推送(使用Phing可以吗?)

这种设置的最佳/常见做法是什么

更多信息:

我目前正在为MVC框架使用CodeIgniter,为本地主机部署的自动化构建使用Phing。该web应用程序还受一些用Java编写的CRON脚本的支持

更新:


最终使用了Phing+Jenkins。到目前为止工作得很好

我们使用Phing进行类似于您所描述的部署。我们的项目也使用Symfony框架(这一点并不重要,但Symfony支持不同环境的概念,因此它是一个加号)

但是,我们仍然需要为数据库、前端控制器等生成不同的配置文件

因此,我们最终拥有了一个包含build.properties的文件夹,该文件夹定义了不同环境的配置(在我们的案例中,也定义了我们产品运送到的不同客户机的配置)。此文件夹使用svn externals链接到文件结构(同样不需要)

然后,Phing build.xml文件接受属性文件作为命令行上的参数,从中获取值并生成所有必要的配置文件、控制器和其他特定于环境的文件。 我们将配置存储在模板文件中,然后使用Phing中的复制/筛选功能将模板中的占位符替换为特定值

然后,配置给定环境的整个任务可以像下面这样简单:

phing configure-environment -DpropertyFile=./build_properties/build.properties.prod
在生成文件中,检查指定属性文件的
propertyFile
属性是否已定义,并使用
加载文件。然后,您只需根据需要对这些值进行任何处理

您仍然可以使用svn签出/更新,并将所有生成的配置文件放入svn ignore(您将使用phing生成它们)。实际上,我们在Phing中使用了额外的步骤。这些步骤最终生成一个Linux shell安装自部署包。这是在詹金斯自动生成的。然后我们将包发送给我们的客户,或者支持团队可以从Jenkins那里获取包,他们可以通过执行包来完成整个部署(我们仍然喜欢手动部署而不是生产服务器),或者Jenkins可以自动部署包(例如测试服务器)

如果需要的话,我很乐意写更多的信息。

我建议使用(看起来他们在移动站点后没有更新文档)和进行部署。最终,您可能需要添加更多的应用程序框,并在部署过程中运行其他任务,因此选择一个支持此功能的框架可以在将来为您节省大量时间。我已经将capistrano用于两个PHP部署(一个小的和一个大的),尽管它并不完美,但它工作得很好。它还处理所有代码签出/更新、将符号链接移动到位以及在出现问题时回滚

配置capistrano后,您只需执行以下操作:

cap dev deploy 
cap prod deploy
我探索过的另一个方法是。虽然我还没有使用它,但是如果我不得不再次部署一个复杂的应用程序,我会考虑它。界面简单明了


第三种选择是(请原谅自我推销),你可以看看它是否仍处于开发的早期阶段。这是我一直在做的事情,因为我对使用capistrano在一个有很多移动部件的环境中部署PHP应用程序感到失望。Capistrano非常好,适用于非PHP应用程序部署,但您仍然需要在代码中进行一些探索,以了解正在发生的事情,并对其进行调整以满足您的需要。这也是为什么我建议给织物一个好的外观。

我现在使用类似的配置。Lamp+SVN+codeigniter+prd和dev服务器

我在dev上运行svn repos。我将repos签出到dev域的根文件夹中。然后使用post-commit钩子在每次开发人员提交时更新根文件夹

当我们很高兴并且已经完全测试了代码时,我将ssh放到prd服务器中,并将dev根目录rsync到prd根目录

这是我针对不同配置的解决方案。在根文件夹之外,我有一个config.ini文件。我在codeigniter constants.php脚本中解析该文件。这意味着prd和dev服务器可以有单独的设置,而不必在REPO中


如果您需要提交后的帮助,请告诉我rsync和ini代码。

cool。我们使用CodeIgniter,并且有一个类似的设置,使用模板进行配置,并在推送时使用Phing对这些模板进行复制/过滤。那么Jenkins能够推送到远程服务器吗?你觉得phpUnderControl怎么样?这些工具与MVC框架php(特别是单元测试部分)配合得好吗?我不知道你在这里说的到底是什么意思。我想不出用svn做“推送”的方法。也许使用post-commit钩子。GIT可能会更好。否则Phing只能做SVN能做的(或更少)。另一个选项可能是rsync。关于Jenkins,它同样使用其他工具来完成任务,因此它可以运行phing目标来完成任何必要的工作。我没有尝试过phpUnderControl,但据我所知,这个概念类似于Jenkins。poisson提到使用Jenkins。像Capistrano这样的工具是C语言的一部分吗