Heim  >  Artikel  >  php教程  >  PHP开源项目使用Travis CI进行持续集成

PHP开源项目使用Travis CI进行持续集成

WBOY
WBOYOriginal
2016-06-06 19:47:381225Durchsuche

一个项目如何保证代码质量是开发中非常重要的环节,对于开源项目来说更是如此,因为开源项目要面对的是来自不同水平开发者提交的代码。所以围绕开源做持续集成(Continuous Integration)变得越来越重要,而目前使用最广泛的免费CI工具当数Travis CI,以我的

一个项目如何保证代码质量是开发中非常重要的环节,对于开源项目来说更是如此,因为开源项目要面对的是来自不同水平开发者提交的代码。所以围绕开源做持续集成(Continuous Integration)变得越来越重要,而目前使用最广泛的免费CI工具当数Travis CI,以我的项目EvaThumber为例,来介绍一下如何在PHP开源项目中配合Travis CI进行持续集成

Travis CI能做的最主要工作是自动运行项目的单元测试并生成报告。例如进入EvaThumber的Travis CI页面,可以看到最新版本的测试情况,默认设置下,每次对项目进行Push时,都会触发Travis CI运行一次测试,测试环境包括PHP5.3与PHP5.4两个主流版本。Travis CI同时提供了一个项目状态图标,可以放置在项目主页告知用户当前的测试情况:

EvaThumber Master分支: PHP开源项目使用Travis CI进行持续集成

PHP项目的目录结构

如何开始一个PHP项目的持续集成,首先从项目的目录结构说起。目前的PHP项目一般都会遵守PHP-FIG制订的PSR规范,可以根据实际项目与团队的情况选择规范的严格程度,如果是新项目建议尽可能选择PSR-2或以上级别。

遵守规范的意义在于你的项目可以非常容易的集成到其他项目中,同时因为有了相同的代码书写约定,别人也更加容易阅读你的代码。所以越是优秀的PHP项目,越能严格的遵守规范,这会让整个PHP社区进入一个良性循环。

那么一个遵循PSR-2规范的PHP项目进行CI,推荐目录结构以及必须的文件如下:

<code>src/
    EvaThumber/
        Thumber.php
tests/
    EvaThumberTest/
        ThumberTest.php
    Bootstrap.php
    phpunit.xml.dist
vendor/
.travis.yml
composer.json
LICENSE
</code>
  • src目录用于存放项目源代码,文件夹命名必须与命名空间一致,以便可以进行类的自动载入
  • tests 目录放置单元测试代码,推荐与src目录保持一样的结构,在文件夹与文件名后缀Test以避免重名。
  • tests/Bootstrap.php 不是必须的,但一般都会存在,主要用于初始化类的自动载入功能
  • tests/phpunit.xml.dist 是PHPUnit的配置文件,一般来说可以简单配置一下要测试的目录以及Bootstrap.php的位置,详细的可配置项参考官网说明
  • vendor 目录用于放置项目依赖的第三方类库。
  • .travis.yml 是Travis CI的配置文件,在这个文件中可以设置项目语言,测试环境等。可以参考Travis CI详细设置
  • composer.json 是Composer管理第三方类库依赖关系的配置文件,参考Composer详细文档
  • LICENSE 内文是当前项目使用的许可证

依赖管理并加入启动文件

EvaThumber依赖一些第三方项目,所以最终composer.json的内容如下:

<code>{
    "<span>name</span>": <span><span>"AlloVince/EvaThumber"</span></span>,
    "<span>description</span>": <span><span>"EvaThumber"</span></span>,
    "<span>license</span>": <span><span>"BSD-3-Clause"</span></span>,
    "<span>homepage</span>": <span><span>"http://avnpc.com/"</span></span>,
    "<span>require</span>": <span>{
        "<span>php</span>": <span><span>">=5.3.3"</span></span>,
        "<span>imagine/Imagine</span>": <span><span>"dev-master"</span>
    }</span></span>,
    "<span>require-dev</span>": <span>{
        "<span>rmccue/Requests</span>": <span><span>"dev-master@dev"</span></span>,
        "<span>aferrandini/phpqrcode</span>": <span><span>"dev-master@dev"</span></span>,
        "<span>symfony/process</span>": <span><span>"dev-master@dev"</span>
    }</span></span>,
    "<span>autoload</span>": <span>{
        "<span>psr-0</span>": <span>{
            "<span>Requests</span>": <span><span>"library/"</span></span>,
            "<span>PHPQRCode</span>": <span><span>"lib/"</span>
        }</span>
    }</span>
}</span>
</code>

这个配置文件中首先定义了EvaThumber自己的名称,然后规定php运行环境必须大于等于5.3.3,并且列出了所有依赖项目的名称,autoload栏目则对PSR-0的项目的自动加载单独进行了处理。最终当EvaThumber项目被使用时,只需要在项目目录下运行

<code>composer install
</code>

即可安装依赖。安装完毕后会生成vendor/autoload.php文件,由于单元测试也需要自动加载的支持,我们编写tests/Bootstrap.php为:

<code><span><?php </span>
<span>$loader</span> = <span>include</span> __DIR__ . <span>'/../vendor/autoload.php'</span>;
<span>$loader</span>->add(<span>'EvaThumber'</span>, __DIR__ . <span>'/../src'</span>);
</span></code>

配置单元测试

有了单元测试的启动文件,为了在每次运行测试时加载,需要编写tests/phpunit.xml.dist为:

<code><span>phpunit</span> <span>bootstrap</span>=<span>"./Bootstrap.php"</span> <span>colors</span>=<span>"true"</span>>
    <span>testsuites</span>>
        <span>testsuite</span> <span>name</span>=<span>"EvaThumber Test Suite"</span>>
            <span>directory</span>>./EvaThumberTest<span><span>directory</span>></span>
        <span><span>testsuite</span>></span>
    <span><span>testsuites</span>></span>
    <span>filter</span>>
        <span>whitelist</span>>
            <span>directory</span>>../src/EvaThumber/<span><span>directory</span>></span>
            <span>exclude</span>>
                <span>directory</span>>../vendor/<span><span>directory</span>></span>
            <span><span>exclude</span>></span>
        <span><span>whitelist</span>></span>
    <span><span>filter</span>></span>
<span><span>phpunit</span>></span>
</code>

主要配置了三点:

  1. 指定启动文件为同目录下的Bootstrap.php
  2. 指定单元测试用例目录为同目录下的EvaThumberTest
  3. 指定测试代码路径,并将vendor目录排除,因为vendor目录为第三方依赖,无需测试

配置好之后在tests目录下运行

<code>phpunit -v
</code>

即可

PHPUnit安装

如果没有安装PHPUnit,ubuntu下可以很简单的用以下指令安装:

<code>apt-get install php-pear
pear channel-<span><span>update</span> pear.php.net
pear upgrade-<span>all</span>
pear channel-discover pear.phpunit.de
pear install -a phpunit/PHPUnit
</span></code>

配置并运行Travis CI

由上面的配置可以知道,如果想测试EvaThumber,必须要安装第三方依赖,同时进入tests目录运行phpunit -v。所以Travis CI的配置文件.travis.yml如下:

<code>language: php
php:
  - 5.3
  - 5.4
before_script:
  - composer install
  - cd tests
script: phpunit -v
</code>

Travis CI会自动完成Git Clone的工作,before_script很好理解,一一录入在开始测试前需要运行的指令即可。

最后进入Travis CI主页,用Github帐号直接登录。点击自己的名字后,会将自己的开源项目全部列举出来。选择要进行测试的项目,将右边的开关设为On就会自动开始测试。

接收外部的提交

如果其他人Fork了EvaThumber并发起了Pull Request,同样会触发Travis CI自动运行,如果提交进来的代码无法通过单元测试,Travis CI会自动回复Pull Request并显示测试报告,这样就能保证已有代码的API不会被破坏。

而如果是Bug Fix或者新功能的添加,那么可以要求提交者配套对应的单元测试,否则不予以Merge。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:PHP精选数组函数Nächster Artikel:测试驱动开发(TDD)For PHP