我大部分时间都是单独的开发人员,从事一些大型的,主要是基于PHP的项目.我希望专业化和自动化如何处理代码库的更改,并创建一个持续集成过程,使过渡在团队中工作,而不必进行根本性的更改.
我现在正在做的是,我为每个项目都有一个本地测试环境; 我为每个项目使用SVN; 更改在本地进行测试,然后通常通过FTP传输到联机版本.API文档是从源代码手动生成的; 单元测试是我慢慢进入的,它还不是我日常工作的一部分.
我想象的"构建周期"将执行以下操作:
在本地测试后,变更集将被检入SVN.
我开始构建过程.SVN HEAD修订版将被检出,必要时进行修改,并准备上传.
API文档会自动生成 - 如果我还没有详细设置,使用默认模板,扫描整个代码库.
新修订通过FTP部署到远程位置(包括一些目录重命名,chmodding,导入数据库,和喜欢.)这是我已经喜欢phing非常多,但我很开放的,当然选择.
运行驻留在预定义位置的单元测试.我被告知他们使用电子邮件,RSS或(最好)HTML输出的失败或成功,我可以抓取并放入网页.
(可选)预定义位置的最终用户"changelog"文本文件使用提交消息的预定义部分进行更新("现在可以同时过滤"foo"和"bar"此消息不一定与SVN提交消息相同,后者可能包含更多内部信息.
像代码指标,代码样式检查等等东西现在不是我的主要关注点,但从长远来看,它们肯定会.带来这种开箱即用的解决方案非常受到关注.
我在寻找
来自或处于类似情况的人的反馈和经验,并已成功实施此解决方案
特别是,关于如何设置它的好的分步教程和演练
提供尽可能多的自动化的解决方案,例如为每个新项目创建框架API,测试用例等.
并且
我忙于工作,所以我倾向于简单的解决方案.另一方面,如果缺少一个功能,我会因为它太有限而哭泣.:)欢迎使用点击式解决方案.我也是可以使用PHP项目的商业产品推荐.
我的设置
我在本地工作Windows(确切地说是7),大多数客户端项目都在LAMP堆栈上运行,通常在共享主机上运行(=没有远程SSH).我正在寻找可以在我自己的环境中运行的解决方案.我准备为此设置一个Linux VM,没问题.托管解决方案对我来说很有意思,只要它们提供了所描述的所有方面,或者足够灵活,可以与流程的其他部分进行交互.
赏金 我接受了我觉得会给我最多里程的答案.这里有很多很棒的输入,我希望我能接受不止一个答案.感谢大家!
我正在尝试使用phpunit运行SeleniumTestCase,但我无法使用phpunit.bat脚本运行它.
我的目标是在CruiseControl和phpUnderControl中使用带有Selenium RC的phpunit.这是测试的样子:
require_once 'PHPUnit/Extensions/SeleniumTestCase.php';
class WebTest extends PHPUnit_Extensions_SeleniumTestCase
{
protected function setUp()
{
$this->setBrowser('*firefox');
$this->setBrowserUrl('http://www.example.com/');
}
public function testTitle()
{
$this->open('http://www.example.com/');
$this->assertTitleEquals('Example Web Page');
}
}
Run Code Online (Sandbox Code Playgroud)
我还在include_path中添加了PEAR,并在Selenium扩展中安装了PHPUnit.我用pear安装程序安装了这些,所以我猜这不是问题所在.
任何帮助将非常感谢.
谢谢,雷米
我正在使用php undercontrol和代码浏览器报告每个setter/getter上的一些CRAP索引错误,即这样的代码
public function getFoo()
{
return $this->_foo;
}
Run Code Online (Sandbox Code Playgroud)
getter/setter由单元测试覆盖,复杂性为none,因为没有if/for/switch/foreach.那么为什么我得到该代码的CRAP索引为1?
PS:自我回答可能是因为复杂性没有,但我的主要问题是每个getter/setter因为CRAP索引而生成警告所以无论如何都要告诉phpunit/php代码覆盖率使CRAP等于0表示功能具有0复杂度指数.
我正在尝试为php代码嗅探器编写自定义ruleset.xml,但是从命令行调用它而不将其放在默认文件夹中似乎不起作用.
由于文件似乎陈述,否则我想问我在这里做错了什么
:~/$ phpcs --standard=/home/edo/custom_ruleset.xml source/
===>
ERROR: the "/home/edo/custom_ruleset.xml" coding standard is not installed.
The installed coding standards are PEAR, PHPCS, Zend, Squiz and MySource
Run Code Online (Sandbox Code Playgroud)
如果这不起作用:有关如何使用您的来源发送您自己的编码标准的任何建议?谢谢
有没有人让这些无缝合作?我试过,在http://phing.info/trac/wiki/Users/Documentation/CruiseControl上使用插件取得了一些成功,但未能:
除了我的phing构建脚本之外,是否还必须(可以)运行任何其他特定于Ant的命令?
此外,报告部分的首页转储了一堆日志信息,我也试图摆脱它.
为任何帮助干杯......我们正在运行phing 2.3.0和phpUnderControl 0.4.7.
保罗
所以我为我的PHP项目设置了以下内容:
我在cruisecontrol项目目录中创建了一个新项目,并设置了一个轮询器,每2分钟检查一次git repo上的更改.我在这个Cruisecontrol实例中运行了2个项目,我设置的第一个项目运行得很好.
我在Platform项目中遇到的问题在错误日志中如下所示:
2010-02-04 06:07:27,076 [Thread-14061] INFO Project - Project platform: bootstrapping 2010-02-04 06:07:27,077 [Thread-14061] INFO ProjectController - platform Controller: build progress event: bootstrapping 2010-02-04 06:07:27,496 [Thread-14061] INFO GitBootstrapper - Already up-to-date. 2010-02-04 06:07:27,500 [Thread-14061] INFO Project - Project platform: checking for modifications 2010-02-04 06:07:27,500 [Thread-14061] INFO ProjectController - platform Controller: build progress event: checking for modifications 2010-02-04 06:07:27,583 [Thread-14063] WARN Git - warning: Log for '' only goes back to Tue, 26 Jan 2010 13:43:11 -0500. …
我仍然在研究应该使用哪种工具.当我四处寻找时,我注意到他们中没有一个真的有任何新版本:
Xinc
Version 2.0.1 released 02/05/08
Phing
Version 2.3.3 released 12/07/08
phpUnderControl
Version 0.4.4 released 08/09/08
Run Code Online (Sandbox Code Playgroud)
我应该选择phpUnderControl,因为它有最新版本,开发可能还会继续吗?我不想仅仅因为php 5.3附带的某些功能无法由其中一个处理而在半年内切换.
我需要PHP Unit,SVN和Codesniffer支持.
phpUnderControl有内置的代码浏览器吗?如果是这样,我如何更改它以使用PHP_CodeBrowser?
我正在尝试使用Phing进行自动化:
我认为在我的项目中添加一个构建文件夹并将所有构建配置文件和db deltas放在该文件夹中是有意义的.并将所有这些提交到SVN存储库中.所以每个开发人员在从svn签出时都会获得更新的构建文件.并能够运行构建以使用新更改更新其数据库.
在生产服务器上:我打算在那里添加另一个构建文件,以获取svn中的最新Tagged版本并执行CSS和JS压缩.
我计划使用PHPUnderControl实现持续集成,因此我可以跟踪每个构建的结果,并在构建失败时收到通知.
所以,你认为这一切都有意义,或者你还有其他更好的建议吗?
我在尝试确定我们网站上的代码覆盖率时遇到了一个问题。在我们的三个应用程序上运行我们的单元测试时,我让 PHPUnit 生成了一个 html 代码覆盖率报告。我们有一个公共应用程序、一个管理应用程序和一个报告应用程序。由于应用程序共享代码,我想以某种方式将它们组合成一份代码覆盖率报告。
似乎代码覆盖率仅计算测试“接触”的文件的覆盖率,因此计算中没有使用完全未经测试的文件。有谁知道如何将这些未使用的文件拉入计算中?有没有办法告诉覆盖率生成器使用某些目录进行计算,以便它拉入未触及的文件?我在配置文件中为 phpunit 设置了一个白名单,该白名单设置为我们项目的根目录。欢迎所有评论,答案和建议。
我build.xml在phpUnderControl中设置了以下文件.
<target name="phpunit">
<exec executable="phpunit" dir="${basedir}/httpdocs" failonerror="on">
<arg line="--log-junit ${basedir}/build/logs/phpunit.xml
--coverage-clover ${basedir}/build/logs/phpunit.coverage.xml
--coverage-html ${basedir}/build/coverage
--colors
${basedir}/httpdocs/qc/unit/CalculatorTest.php" />
</exec>
</target>
Run Code Online (Sandbox Code Playgroud)
出于某些未知原因,构建总是失败并显示以下消息.
phpunit:
[exec] PHPUnit 3.4.15 by Sebastian Bergmann.
[exec]
BUILD FAILED
/opt/cruisecontrol-bin-2.8.3/projects/citest.local/build.xml:30: exec returned: 255
Run Code Online (Sandbox Code Playgroud)
我在单元目录中手动运行非常简单的单元测试,PHPUnit返回.
PHPUnit 3.4.15 by Sebastian Bergmann.
.
Time: 0 seconds, Memory: 5.25Mb
OK (1 test, 1 assertion)
Run Code Online (Sandbox Code Playgroud)
当所有测试都没问题时,有谁知道它为什么一直失败?
我的构建脚本确实有一个删除和记录文件的干净方法,所以不是这样.我还手动删除了日志文件,以防它是该脚本.并更改了日志目录的所有者,以便它们可写.
如果它有任何不同,运行PHPUnit后phpunit.xml为空.
谢谢.
更新:顺便说一句,如果我删除failonerror="on"它的工作,显然,但PHPUnit仍然返回255,我确实希望它失败任何错误,问题是没有任何错误,但它仍然失败!
使用"build /"文件夹可以放置和"构建"所有源代码有什么好处?
也许这是一个愚蠢的问题,但我正在尝试理解与PHP的持续集成.用于phing的build.xml的任何示例都使用这样的构建/文件夹,但是对于PHP来说有一点意义,其中签出的项目不需要编译,只需要基本配置.复制所有到构建/只会复杂的事情,因为你已经翻番文件和文件夹+1到Web根路径(如果你想有web用户界面来运行Selenium测试)
特别是我需要phing两种情况:
1)让新用户设置他的第一次安装(或更新旧),正确的工作副本
2)运行unit/func-tests,phpcc,phpcs,phpdoc等(通常在CI服务器上) )
我应该为第二项任务"建立/"吗?PHP的最佳实践是什么?
phpundercontrol ×12
php ×9
phpunit ×6
phing ×5
build ×1
codesniffer ×1
git ×1
metrics ×1
selenium ×1
unit-testing ×1
xinc ×1