2个云服务器,一个开发,一个产品; 什么是良好的部署过程?

lam*_*ler 8 php apache phing deployment build-process

目前正在为我的网络应用程序使用LAMP堆栈.我的dev和prod在同一个云实例中.现在我得到一个新实例,并希望将dev/test环境移动到新实例,将其与prod环境分开.

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

考虑将SVN存储库转移到开发服务器,然后执行ssh + svn推送(这可能是Phing吗?)

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

更多信息:

我目前正在使用CodeIgniter用于MVC框架,Phing用于本地主机部署的自动构建.一些用Java编写的CRON脚本也支持Web应用程序.

更新:

结束使用Phing + Jenkins.到目前为止运作良好!

poi*_*son 3

我们使用 Phing 进行类似于您所描述的部署。我们还在我们的项目中使用 Symfony 框架(这对此并不那么重要,但 Symfony 支持不同环境的概念,所以这是一个优点)。

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

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

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

配置给定环境的整个任务可以像这样简单:

phing configure-environment -DpropertyFile=./build_properties/build.properties.prod
Run Code Online (Sandbox Code Playgroud)

在构建文件中,您检查是否propertyFile定义了指定属性文件的属性,并使用<property file="./build_properties/build.properties.prod" override="true" />. 然后你就可以根据需要对这些值进行任何魔法。

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

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