【问题标题】:PHP Build system [closed]PHP构建系统[关闭]
【发布时间】:2010-11-19 11:00:45
【问题描述】:
我正在使用PHPUnderControl,它在 Cruise Control 之上运行,用于我的持续集成和单元测试。我还设置了它来运行 PHPDocumentor 为我生成 phpdoc,它运行 PHP Code Sniffer 来为我强制执行编码标准。但现在我想在同一台服务器(Ubuntu)上设置一些东西,以便更轻松地部署到远程服务器。我已经设置好了,所以每次成功构建后,SVN 导出都会从主干到服务器上项目文件夹中的目录中完成。
我一直在考虑编写一个小的自定义 PHP 脚本,该脚本将通过 SSH 连接到已配置的远程服务器,压缩最新的导出,复制它,解压缩并运行任何迁移。像这样的 PHP 脚本最初不应该太难,除非我最终需要开始扩展到多台服务器。我知道有一些系统,比如Phing、Fabric 等等。
我的问题是,是否有人对这些有任何经验并且可以提供一些优点和缺点?我已经开始在我的服务器上设置 Phing,接下来将尝试使用 Fabric 来使用它们,但想知道是否有人更广泛地使用它们,或者必须扩展它们,可以提供一些反馈。
【问题讨论】:
标签:
php
build-process
build-automation
build-tools
【解决方案1】:
我已经将Capistrano 与 PHP 一起使用(尽管它更像是一个 Rails-y 的东西,因为它是用 Ruby 编写的)。
它使用起来非常简单,但也就是说我不必使用它进行太多扩展。不过,我们确实会部署到各种不同的暂存/生产服务器,并且多阶段扩展在这些场景中非常有用。
然而,与 Ruby 的大多数东西一样,如果您是 Capistrano 的新手并试图用它做一些棘手的事情,那么有很多钩子和“魔法”可能会让人感到困惑。
至于它与其他部署工具的比较,我无法评论。我知道我们曾经使用过 Phing,但我不确定我们为什么改用 Capistrano。
【解决方案2】:
有一个新的构建工具,称为 Bldr。它使用 Yaml 进行配置,而不是像大多数构建系统那样使用 xml,并且它具有高度可扩展性。
http://bldr.io
【解决方案3】:
如果您喜欢 Capistrano,但希望它更像 PHP,请查看 Fredistrano。
我曾经使用 Phing 编写了一个自动构建(SVN 导出、Zend Guard 编码等)和部署系统,但发现使用起来非常痛苦。每当我不得不写一个特殊的任务时,我觉得我必须跳很多圈才能让它工作。
所以,这些天我只是编写简单的 bash 脚本,这些脚本使用 SVN 签出、编码、在 SVN 中创建标签以及通过 rsync 进行部署。它可能技术含量低,Phing 可能有一些优越的功能,但至少它不会妨碍我。
【解决方案4】:
我为此编写了自己的类似 rsync 的工具,因为我在第三世界国家的互联网连接非常糟糕,并且有各种故障和饥饿连接,因此 rsync 不起作用。
在您的远程系统上,您至少应该编写一个在运行迁移之前进行备份的小脚本。
更好的是您在 Web 主机系统上使用完全独立的镜像系统,并在迁移后包含一些小但基本的单元测试。然后进行根切换以使更新的网站上线。这将需要在迁移期间以只读模式运行一些交互式服务(不幸的是,没有多少人实施该功能)。
但首先 - 想想是否真的值得你花时间这样做 - 如果你每季度只更新一次,那么纸上的简单清单就足够了。
【解决方案5】:
我们使用 phing,它派上了用场。我们不会将它用于包装,但让它做你想要的应该不会太难。我们主要将它用于常见任务,例如清除缓存、构建开发站点和其他辅助开发的任务。它帮了大忙,据我所知,它似乎是一个蚂蚁克隆,虽然它可能不具备蚂蚁的所有功能。
【解决方案6】:
如果我要实现这样的部署系统,我可能会选择与您上面概述的略有不同的解决方案。不是让代码在我的系统上本地运行,而是连接到远程服务器列表并在那里“工作”,我会将更新程序模块与其余代码打包并让它按需从我的服务器中提取更新数据(或者更确切地说,当我“告诉”它这样做时)。这样你就不用担心了(你只需要在请求时通过 http 提供更新的代码,其余的由远程服务器处理)。只是我的 2 美分。