我们使用 Phing 进行类似于您所描述的部署。我们还为我们的项目使用 Symfony 框架(这对这个不是很重要,但 Symfony 支持不同环境的概念,所以这是一个加号)。
但是我们仍然需要为数据库、前端控制器等生成不同的配置文件。
所以我们最终得到了一个包含 build.properties 的文件夹,它定义了不同环境的配置(在我们的例子中,也适用于我们将产品运送到的不同客户)。该文件夹使用 svn externals 链接到文件结构(同样不是必需的)。
Phing build.xml 文件然后接受一个属性文件作为命令行上的参数,从中获取值并生成所有必要的配置文件、控制器和其他环境特定文件。我们将配置存储在模板文件中,然后使用 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 可以自动部署它(例如测试服务器)。
如果需要,我很乐意写更多信息。