PHP持续集成实践: PHPCI

持续集成(Continuous Integration)作为一种成熟的软件开发实践已经被广大程序员所熟知,Github上大量的开源项目也都纷纷加上Travis-CI来为自己的项目保驾护航。相信很多程序员都有过这样的经历:在与团队协作开发项目时,大部分时间大家都在各自的分支编写不同功能模块的代码,直到下一版本发布前,大家才开始开始着手将自己负责的模块合并到主分支中,这时你往往会发现,要将代码合并到主分支中甚至已经不再是一件简单的事了。自己一段时间前写的代码已经变得有点陌生,合并代码过程中一些小改动也许会在不经意间破坏整个项目,面对突然出现的大量陌生代码(其他程序员提交分支),产品上线的deadline却已经近在咫尺,原本简单的工作现在成了整个团队噩梦。

以上只是一个假想的片段,但这样的场景却又是如此似曾相识,持续集成思想的诞生正是为了解决类似这样的问题。Martin Fowler告诉我,在敏捷的团队,我们是这样工作:在完成手头的工作(并确保新鲜的代码都有测试覆盖时),在本地执行并通过构建(至少是测试)。将主分支的代码合并到本地分支,再次执行构建确保一切OK。将代码提交到主分支版本库,等待CI系统从版本库中检出代码,并再次构建项目。此时你只需要泡一杯咖啡,静静等待CI完成构建,如果构建通过,则证明你提交的代码没有任何问题,至此,一次集成工作已经顺利完成。

phpci

持续集成鼓励程序员们在保证构建通过的前提下,尽可能频繁地将手头的代码集成到主分支中。将代码集成作为一项最普通的日常工作,好处显而易见,团队所有的dev都能在最快时间内获得项目最新的修改,而主分支项目随时都可以上线发布。生活变得不再艰难。

PHPCI是一款专门面向PHP项目开发的持续集成工具。尽管还算不上完美,部分插件还有一些小Bug,文档也有不完善的地方,不过总的来说也还算是差强人意。
why phpci

安装

利用Composer可以非常容易的完成PHPCI的安装:

$ composer create-project block8/phpci phpci --keep-vcs --no-dev
$ cd phpci && ../composer.phar install
$ ./console phpci:install

自动构建

执行命令使PHPCI事件监听器在后台运行,以实现自动构建

$ nohup php ./daemonise phpci:daemonise >/dev/null 2>&1

配置

为使项目支持PHPCI,还需要将phpci.yml配置添加到项目中。

build_settings:
  ignore:
  - "vendor"
 mysql:
  host: "localhost"
 user: "root"
	pass: ""

setup:
  mysql:
	- "DROP DATABASE IF EXISTS test;"
    - "CREATE DATABASE test;"
    - "GRANT ALL PRIVILEGES ON test.* TO test@'localhost' IDENTIFIED BY 'test'; 
  composer:
    action: "install"

test:
  php_unit:
    directory:
      - "src/Test"

complete:
  mysql:
    -  "DROP DATABASE IF EXISTS test;"

为代码库添加PHPCI支持

此处以Github为例:

1.登陆PHPCI
2.点击"Add Project"添加一个项目,并将项目 Public key 添加到Github Deploy key 中。
3.点击项目,并将项目的Webhooks添加到Github的"Webhooks & Services".
4.Webhook默认触发事件为push,将代码push到Github测试PHPCI是否可以自动构建项目。

  • 除Github(或Git)外,PHPCI也支持包括Hg,Svn等多种版本控制工具。
Show Comments