首页 php教程 php手册 PHP开源项目使用Travis CI进行持续集成

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

Jun 06, 2016 pm 07:47 PM
php w 使用 开源 进行 集成 项目

一个项目如何保证代码质量是开发中非常重要的环节,对于开源项目来说更是如此,因为开源项目要面对的是来自不同水平开发者提交的代码。所以围绕开源做持续集成(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。

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

CakePHP 项目配置 CakePHP 项目配置 Sep 10, 2024 pm 05:25 PM

在本章中,我们将了解CakePHP中的环境变量、常规配置、数据库配置和电子邮件配置。

适用于 Ubuntu 和 Debian 的 PHP 8.4 安装和升级指南 适用于 Ubuntu 和 Debian 的 PHP 8.4 安装和升级指南 Dec 24, 2024 pm 04:42 PM

PHP 8.4 带来了多项新功能、安全性改进和性能改进,同时弃用和删除了大量功能。 本指南介绍了如何在 Ubuntu、Debian 或其衍生版本上安装 PHP 8.4 或升级到 PHP 8.4

CakePHP 日期和时间 CakePHP 日期和时间 Sep 10, 2024 pm 05:27 PM

为了在 cakephp4 中处理日期和时间,我们将使用可用的 FrozenTime 类。

CakePHP 文件上传 CakePHP 文件上传 Sep 10, 2024 pm 05:27 PM

为了进行文件上传,我们将使用表单助手。这是文件上传的示例。

CakePHP 路由 CakePHP 路由 Sep 10, 2024 pm 05:25 PM

在本章中,我们将学习以下与路由相关的主题?

讨论 CakePHP 讨论 CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP 是 PHP 的开源框架。它的目的是使应用程序的开发、部署和维护变得更加容易。 CakePHP 基于类似 MVC 的架构,功能强大且易于掌握。模型、视图和控制器 gu

如何设置 Visual Studio Code (VS Code) 进行 PHP 开发 如何设置 Visual Studio Code (VS Code) 进行 PHP 开发 Dec 20, 2024 am 11:31 AM

Visual Studio Code,也称为 VS Code,是一个免费的源代码编辑器 - 或集成开发环境 (IDE) - 可用于所有主要操作系统。 VS Code 拥有针对多种编程语言的大量扩展,可以轻松编写

CakePHP 创建验证器 CakePHP 创建验证器 Sep 10, 2024 pm 05:26 PM

可以通过在控制器中添加以下两行来创建验证器。

See all articles