目前在我的Web应用程序中使用LAMP堆栈。我的开发人员和产品都在同一个云实例中。现在,我正在获得一个新实例,并希望将开发/测试环境移至新实例,并将其与生产环境分离。
它曾经是一个简单的Phing脚本,可以将SVN导出到prod目录(由我的vhost.conf指向)。现在如何在环境分开的情况下进行良好的构建过程?
考虑将SVN信息库转移到开发服务器,然后执行ssh + svn推送(使用Phing可以吗?)
这种设置的最佳/常见做法是什么?
更多信息:
我目前正在将 CodeIgniter 用于MVC框架,将 Phing 用于本地主机部署的自动构建。该Web应用程序还受一些用 Java 编写的CRON脚本支持。
更新:
最终使用了Phing + Jenkins。到目前为止运作良好!
最佳答案
我们使用Phing进行与您描述的部署类似的部署。我们也为我们的项目使用Symfony框架(对此并不是很重要,但是Symfony支持不同环境的概念,所以这是一个加分项)。
但是,我们仍然需要为数据库,前端 Controller 等生成不同的配置文件。
因此,我们最终有了一个带有build.properties的文件夹,该文件夹定义了针对不同环境的配置(在我们的情况下,还针对我们将产品运送到的不同客户)。该文件夹使用svn externals链接到文件结构(同样不需要)。
然后,Phing build.xml文件在命令行上接受属性文件作为参数,从中获取值并生成所有必要的配置文件, Controller 和其他特定于环境的文件。
我们将配置存储在模板文件中,然后使用Phing中的复制/过滤器功能将模板中的占位符替换为特定值。
这样,配置给定环境的整个任务就可以像这样简单:
phing configure-environment -DpropertyFile=./build_properties/build.properties.prod
在构建文件中,检查是否定义了指定属性文件的
propertyFile
属性,并使用<property file="./build_properties/build.properties.prod" override="true" />
加载该文件。然后,您可以根据需要对值进行任何魔术操作。您仍然可以使用svn checkout/update并将所有生成的配置文件放入svn ignore(您将通过phing生成它们)。实际上,我们在Phing中使用了其他步骤。最终,这些步骤将产生一个Linux Shell安装自部署包。这是在 Jenkins 自动生成的。然后,我们将软件包发送给我们的客户,或者支持团队可以从Jenkins那里获取该软件包,他们可以仅通过执行它来进行整个部署(我们仍然偏爱将其手动部署到生产服务器),或者Jenkins可以自动部署(例如进行测试服务器)。
如果需要,我很乐意写更多信息。