11

我正在使用在 Cruise Control 之上运行的PHPUnderControl进行持续集成和单元测试。我还设置了它来运行 PHPDocumentor 为我生成 phpdoc,它运行 PHP Code Sniffer 来为我强制执行编码标准。但现在我想在同一台服务器(Ubuntu)上设置一些东西,以便更轻松地部署到远程服务器。我已经设置好了,所以在每次成功构建后,SVN 导出都是从主干到服务器上项目文件夹中的一个目录中完成的。

我一直在考虑编写一个小的自定义 PHP 脚本,它将通过 SSH 连接到配置的远程服务器,压缩最新的导出,复制它,解压缩并运行任何迁移。像这样的 PHP 脚本最初不应该太难,除非我最终需要开始扩展到多台服务器。我知道那里有像PhingFabric等系统。

我的问题是,是否有人对这些有任何经验并且可以提供一些优点和缺点?我已经开始在我的服务器上设置 Phing,接下来将尝试使用 Fabric 来使用它们,但想知道是否有人更广泛地使用它们,或者必须扩展它们,可以提供一些反馈。

4

6 回答 6

8

我已经将Capistrano与 PHP 一起使用(尽管它更像是 Rails-y 的东西,因为它是用 Ruby 编写的)。

它使用起来非常简单,但这说明我不必用它进行太多扩展。不过,我们确实部署到了各种不同的登台/生产服务器,并且多阶段扩展在这些场景中很有用。

然而,像大多数 Ruby 一样,如果您是 Capistrano 的新手并试图用它做一些棘手的事情,那么有很多钩子和“魔法”可能会让人感到困惑。

至于它与其他部署工具的比较,我无法评论。我知道我们曾经使用过 Phing,但我不确定我们为什么改用 Capistrano。

于 2009-08-18T23:36:35.570 回答
2

如果你喜欢 Capistrano,但希望它更像 PHP'ish,请查看Fredistrano

我曾经使用 Phing 编写了一个自动构建(SVN 导出、Zend Guard 编码等)和部署系统,但发现使用起来非常痛苦。每当我不得不写一个特殊的任务时,我觉得我必须跳很多圈才能让它工作。

所以,这些天我只是编写简单的 bash 脚本,这些脚本使用 SVN 签出、编码、在 SVN 中创建标签并通过 rsync 进行部署。它可能技术含量低,Phing 可能有一些优越的功能,但至少它不会妨碍我。

于 2009-08-23T08:57:08.087 回答
2

有一个新的构建工具,称为 Bldr。它使用 Yaml 进行配置,而不是像大多数构建系统那样使用 xml,并且它具有高度可扩展性。

http://bldr.io

于 2014-03-23T05:44:15.443 回答
1

我们使用 phing,它已经派上用场了。我们不会将它用于包装,但让它做你想要的应该不会太难。我们主要将它用于常见任务,例如清除缓存、构建开发站点和其他辅助开发的任务。这是一个很大的帮助,据我所知,它似乎是一个蚂蚁克隆,尽管它可能没有蚂蚁拥有的所有功能。

于 2009-08-19T02:14:39.167 回答
0

如果我要实现这样的部署系统,我可能会选择与您上面概述的略有不同的解决方案。不是让代码在我的系统上本地运行,而是连接到远程服务器列表并在那里“工作”,我会将更新程序模块与其余代码打包并让它按需从我的服务器中提取更新数据(或者更确切地说,当我“告诉”它这样做时)。这样你就不用担心了(你只需要在请求时通过 http 提供更新的代码,其余的由远程服务器处理)。只是我的2美分。

于 2009-08-18T18:21:37.953 回答
0

我为此编写了自己的类似 rsync 的工具,因为我在第三世界国家的互联网连接非常糟糕,并且有各种故障和饥饿连接,因此 rsync 不起作用。

在您的远程系统上,您至少应该编写一个在运行迁移之前进行备份的小脚本。

更好的是您在 Web 主机系统上使用完全独立的镜像系统,并在迁移后包含一些小但基本的单元测试。然后进行根切换以使更新的网站上线。这将需要在迁移期间以只读模式运行一些交互式服务(不幸的是,这个功能没有多少人实现)。

但首先——想想这样做是否真的值得你花时间——如果你每季度只更新一次,那么一个简单的纸质清单就足够了。

于 2009-08-21T08:39:17.203 回答