8

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

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

考虑将 SVN 存储库转移到开发服务器,然后进行 ssh+svn 推送(这可以通过 Phing 实现吗?)

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

更多信息:

我目前将CodeIgniter用于 MVC 框架,将Phing用于 localhost 部署的自动构建。一些用Java编写的 CRON 脚本也支持 Web 应用程序。

更新:

最终使用 Phing + Jenkins。到目前为止工作良好!

4

3 回答 3

3

我们使用 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 可以自动部署它(例如测试服务器)。

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

于 2011-07-12T22:21:51.413 回答
1

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

配置好 capistrano 后,您所要做的就是:

cap dev deploy 
cap prod deploy

我为此探索的另一个选择是fabric。虽然我没用过,但如果要重新部署一个复杂的应用程序,我会考虑的。界面简单明了。

您可能会考虑的第三种选择是龙门式(请原谅自我推销),它仍处于开发的早期阶段。出于对使用 capistrano 在具有大量移动部件的环境中部署 PHP 应用程序的挫败感,我一直在努力解决这个问题。Capistrano 非常棒,适用于非 PHP 应用程序部署,但是您仍然需要在代码中进行一些操作以了解正在发生的事情并对其进行调整以满足您的需求。这也是为什么我建议让面料看起来不错的原因。

于 2011-07-12T22:38:23.900 回答
0

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

我在 dev 上运行 svn repos。我将 repos 检出到 dev 域的根文件夹中。然后在每次任何开发人员提交时使用提交后挂钩来更新根文件夹。

当我们很高兴并完全测试了代码时,我 ssh 进入 prd 服务器并将 dev 根目录同步到 prd 根目录。

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

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

于 2011-07-28T20:18:50.827 回答