Phing是一个可以用来项目发布、部署和持续构建的工具,曾经在持续集成的相关书籍里面看到对他的推荐。Phing安装简单(可PEAR方式安装)、有详细文档说明(官网:http://www.phing.info/trac/wiki/WikiStart),且上手使用简单。
以下是我在某个项目中,回滚发布的配置文件:
<?xml version="1.0" encoding="UTF-8"?> <!-- ============================================ --> <!-- 回滚发布配置文件 --> <!-- @dogstar 20141222 冬至 --> <!-- ============================================ --> <project name="testApp" default="rollback"> <property name="backup_path" value="/home/teatApp" override="true" /> <property name="backup_prefix" value="testApp_backup_" override="true" /> <!-- ============================================ --> <!-- Target: rollback --> <!-- ============================================ --> <target name="rollback" > <unzip file="${backup_path}/${backup_prefix}lastest.zip" todir="." > <fileset dir="."> <include name="*.zip"/> </fileset> </unzip> </target> </project>
然后在目录执行以下命令即可实现回滚发布:
phing -f ./rollback.xml
删除了一些注释后,其主要整体运行代码如下:
try { Phing::startup(); Phing::setProperty('phing.home', getenv('PHING_HOME')); $args = isset($argv) ? $argv : $_SERVER['argv']; // $_SERVER['argv'] seems to not work (sometimes?) when argv is registered array_shift($args); // 1st arg is script name, so drop it Phing::fire($args); Phing::shutdown(); } catch (ConfigurationException $x) { Phing::printMessage($x); exit(-1); // This was convention previously for configuration errors. } catch (Exception $x) { exit(1); }
下面的Phing为同一个类,但由于被调用的场景和层级不一样,这里分开说明,以便理解。
1、对日记纪录使用了观察者模式,从而方式将不同等级的日记存储或者展示在不同的地方;
2、对执行的各个环节,使用了事件侦听的方式,如在开始和结束运行时会回调已注册的事件;
3、从源代码里面明显也可以看到有解析器(语法树)的应用,如对XML文件进行解析;
4、职能链模式:对过滤器使用了职能链来进行管理,以便可以对输出的内容做一些额外的定制操作;
如对输出内容进行tail操作的过滤器TailFilter,其继承体系是:TailFilter -->ChainableReader&BaseParamFilterReader --> FilterReader --> Reader
官方文档提供的示例是:
<filterchain> <tailfilter lines="20" /> </filterchain>
5、适配者模式和代理模式,对Task中有应用,主要是对将被执行的任务的调用进行是否存在/可调用的检测、日记纪录以及异常情况的处理;
6、组合模式;
N、待续。。。
0、整体代码写法很是规范,而且容易理解,思路清晰;其代码规范表现在:没有大的文件、没有长的代码行、注释齐全、风格统一、没有滥用static等等;
1、作为PEAR包,除了按PEAR包的命名方式,也有类的自动加载,但是很多地方都是用了手工的文件包含;
2、待续。。。
这是一个代码风格很好的框架,很值得参考和学习,并且其中应用的设计模式和思想也很多。但我觉得它更大的活动是可以提供给开发人员扩展开发的接口,即可以自己扩展这个框架中三个核心的部分:Tasks、Types和Mappers,文档请见:http://www.phing.info/docs/guide/stable/ch06.html
从Phing中可以看出中间层的再一次应用,即可能编写Shell脚本或者PHP脚本来进行项目的构建可能对于开发比较麻烦,则我们开发人员可以通过熟悉的XML文件配置来实现这些常用部分功能的操作,而成本则是要学习Phing。但成本是相对较低的,因为Phing已经按我们常规的规范去编写了,很容易明白,也很容易上手。
最最为重要的,Phing将带领您进入敏捷开发的国度 -- 有助于持续集成,^_^