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