在Hudson CI上加速PHP持续集成构建服务器

5

我想加快编译速度,希望您能提供一些建议。目前我使用Hudson作为PHP项目的持续集成服务器。

我使用一个Ant build.xml文件进行构建,类似于Sebastian Bergmann的php-hudson-template。但是由于Hudson崩溃的问题,我只运行phpDocumentorphpcpdphpUnit。同时,phpUnit也会生成Clover代码覆盖率报告。

以下是可能的瓶颈:

  1. phpDocumentor需要180秒。我的项目中包含了一些大型的库,例如awsninjaDirectedEdgeoauthsimplephpMailer。我不确定是否需要为这些库开发文档,也不知道如何在build.xml文件中忽略整个子目录。
  2. phpUnit需要120秒。这是构建中唯一没有作为parallelTask运行的部分。随着编写的测试越来越多,这个时间会变得越来越长。除了可能使用多个Hudson构建从机并将不同的测试套件分配给每个从机之外,我真的不知道该怎么办。
  3. phpcpd需要97秒。我确定可以通过忽略那些包含的库来消除一些解析和转换时间。但是不知道如何在build.xml文件中实现。
  4. 我的服务器:目前我只使用单个Linode服务器。整个过程似乎对它造成了相当大的负担。

如果您能想到其他可能的瓶颈,我会添加到列表中。

有什么方法可以减少编译时间呢?

3个回答

2
  1. phpDocumenter: phpdoc -h 可以查看 -i 选项,允许您指定一个逗号分隔的要忽略的文件/目录列表。这可以添加到您的 phpdoc build.xml 标签的 arguments 标记中。

  2. phpUnit: 我注意到如果我对数据库运行测试,它可能会变得缓慢,但我不知道有什么方法可以改善这种情况。

可能有一件事情可能会有所帮助,那就是不要每次都运行文档生成器,只在每天(或类似的时间)的构建过程中运行它。

我最近才开始使用这些工具,这是我发现的一些问题。


Robin,关于文档方面你提出的想法很好。你介意提供忽略多个目录的语法吗?此外,我注意到针对数据库的测试比其他测试要花费更长时间。你尝试过使用模拟对象或类似的东西吗?就个人而言,我不确定为什么使用模拟对象比使用测试数据库更好... - Josh Smith
phpdoc -h 的输出中: -i --ignore file(s) that will be ignored, multiple separated by ','. Wildcards * and ? are ok在我看来,如果我正在测试一个“MySQL”类,我希望使用测试数据库进行测试,因为这是功能的更真实的测试。如果我正在测试不依赖于数据库的东西,我将使用模拟数据来加快测试速度。 - Robin

2

我并不是PHP专家,但如果需要的话,您应该能够将PHPUnit测试分配到多个Hudson从机上。我建议将测试套件拆分为多个子集,并将每个子集作为单独的、并行的Hudson任务运行。如果您有一台具有多个CPU /核心的计算机,可以在其上运行多个从机。

你没有提到一个显而易见的事情——如何升级你的硬件,或者看看Hudson主机上还运行着什么其他可能占用资源的程序呢?


是的,我提到了我的服务器作为一种可能性。而且这实际上是我现在正在利用的东西。我只运行了512MB的Linode,所以我将其升级到1024MB;我们会看到这会有什么不同。 - Josh Smith
硬件显然是我可以做出的最大和最好的改变。总的文档编制时间减少到了52秒。我感到非常高兴。谢谢! - Josh Smith

0

当我们遇到类似的问题时,我们选择在一个独立的夜间构建中运行文档(以及我们的Selenium功能测试脚本,因为它也非常缓慢)。这样,我们的主要CI构建不会因为生成API文档而减慢速度。

然而,我注意到PHP Documentor现在已经更新到了2版,与旧版本1相比有了显著的速度提升。看起来它大约比v1快两到三倍。这将对您的CI流程产生很大影响。请参阅http://phpdoc.org/获取更多信息。

另外,您还可以看一下apiGenphpDox,它们都是PHPDoc的替代品。它们肯定比PHPDoc v1要快;我还没有与v2进行过比较。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接