设为首页 收藏本站
查看: 925|回复: 0

[经验分享] 使用 PHP 的 Phing 项目部署工具

[复制链接]

尚未签到

发表于 2017-3-31 10:50:14 | 显示全部楼层 |阅读模式
  Phing 是一个基于 Apache Ant 开源项目的 PHP 项目构建工具。
  “Phing”是一个递归的缩写词,全称为“Phing Is Not GNU make”,是 PHP 自动部署应用程序的一种方法。它还可以让我们与 SVN 服务器集成,还可以采用 PHPUnit 自动化方式执行单元测试,并且还可以实现文件复制这样的安装、部署任务。
  Phing 官方网站是 http://www.phing.info/。
  一、安装:
  Phing 随 PERA 扩展包发布,需要使用 PEAR 包管理程序来安装。
  执行命令:
  pear channel-discover pear.phing.info
pear install --alldeps phing/phing
  PEAR 可以与 SVN(Subversion) 进行集成,但 Phing 对 SVN 的支持是可选的,所以必须获得 PEAR 包 VersionControl_SVN。但用 pear install pear/VersionControl_SVN 命令安装的话,由于它还是个处于测试状态的包,我们不能成功安装。
所以,必须使用完整的频道 URI 来安装它:
  pear install channel://pear.php.net/VersionControl_SVN-0.3.3
  二、Phing 部署脚本 build.xml 文件
  Phing 使用了 XML 格式的配置文件来定义部署脚本,从中可以获得工程信息,定义操作组(target)。作为示例,我们将会创建一个基本的 Phing 部署脚本,其中定义了4个目标:
  1,工程(project)
定义工程名字,是 build.xml 文件的最外层标签。比如:
  <project name="MyPhingPrj" basedir="." default="install">
  name定义工程名称,还可以定义 basedir 等属性。default 表示,当在命令行下运行 phing.exe 文件时,若不带参数指定“目标”(Target),则以default的值指定的目标作为默认值。
  2,目标(target)
build.xml 文件是以目标作为分组的,phing 命令也以目标作为部署脚本执行的起点。目标的定义标签:
<target name="……" depends="another_target1,another_target2"></target>
目标之间可以互相依赖(depends),被依赖的目标会先被执行。当一个目标依赖多个目标的时候,目标名之间以英文半角逗号分隔。
  3,任务(task)
任务即脚本的行为或动作,有许多标签来定义。例如:
<echo msg="……" /> 显示提示信息
<copy></copy> 拷贝文件夹或文件
<mkdir dir="……" /> 创建文件夹
<delete dir="……" /> 删除文件夹
<exec command="……" dir="……" /> 执行外部脚本命令
<phpunit></phpunit> 、执行PHPUnit单元测试
<svnupdate svnpath="……" todir="……" /> 操作SVN版本控制服务
  4,其它
  属性(property):
<property name="……" value="……" />
  数据类型(Types):
除过 strings, integer, booleans等,还有:
  定义文件集:
<fileset dir="……" id="……"></fileset>
dir 的值中,使用**表示递归包含,而单个*则表示不是递归包含的。这样便创建了文件的一种数组,它们可以在被其它任务,比如复制任务所使用。
  定义文件列表:
<filelist dir="base/" files="file1.txt,file2.txt,file3.txt"/> 或
<filelist dir="base/" listfile="files_to_process.txt"/>
  一个示例 build.xml 部署脚本文件:
  <?xml version="1.0" encoding="UTF-8"?>
  <project name="MyPhingPrj" basedir="." default="install">
  <property name="package" value="${phing.project.name}" override="true" />
<property name="installdir" value="install" override="true" />
<property name="srcdir" value="${project.basedir}" override="true" />
  <!-- ============================================ -->
<!-- Fileset: codefiles -->
<!-- ============================================ -->
<fileset dir="${srcdir}" id="codefiles">
<include name="**" />
</fileset>
  <!-- ============================================ -->
<!-- Target: prepare -->
<!-- ============================================ -->
<target name="prepare">
<echo msg="Making directory ${installdir}" />
<mkdir dir="${installdir}" />
</target>
  <!-- ============================================ -->
<!-- Target: get -->
<!-- ============================================ -->
<target name="get">
<svnupdate svnpath="file://D:/svn/myfirstrepo" todir="${srcdir}" />
</target>
  <!-- ============================================ -->
<!-- Target: phpunit -->
<!-- ============================================ -->
<target name="phpunit">
<phpunit haltonfailure="true" printsummary="true">
<batchtest>
<fileset dir="./tests">
<include name="*Test.php" />
</fileset>
</batchtest>
</phpunit>
</target>
  <!-- ============================================ -->
<!-- Target: install -->
<!-- ============================================ -->
<target name="install" depends="phpunit,prepare">
<copy todir="${installdir}" overwrite="true">
<fileset refid="codefiles" />
</copy>
<copy file="./build.xml" tofile="./${installdir}/build.xml" overwrite="true" />
</target>
  </project>
  在以上 build.xml 部署脚本文件中,定义了 4 个目标:
  - prepare 目标做一些初始准备工作,创建一个文件夹;
- get 目标将从Subversion存储库中导出最新版本的文件;
- phpunit 目标将执行单元测试,它会从 tests 文件夹寻找与 *Test.php 文件名匹配的文件,调用 phpunit 进行单元测试。自然需要首先安装了 PHPUnit 相关类库;
- install 目标将会把文件安装到指定文件夹(例如网站的跟文件夹),本例是拷贝到 install 文件夹。还可以拷贝单个文件;
  其中,install 是默认执行的目标,它依赖 phpunit 和 prepare 两个目标。目标 phpunit 没有依赖别的目标。目标 get 没有被任何目标依赖,所以除过在 phing 命令行后指定,它不会自动被别的目标调用执行。
  Phing 有些特性需要操作系统的支持,比如文件的打包和压缩任务,只能在 Unix/Linux 下运行:
<tar destfile="./build.tar.gz" compression="gzip">
<fileset dir="./install">
<include name="*" />
</fileset>
</tar>
  三、执行 Phing
  在 DOS 命令行或 Linux 的 Shell 下执行 Phing 命令,格式:
  phing [目标名]
  不指定目标名时,会执行工程中指定的默认目标。
  默认地,Phing 会在当前路径下查找一个名叫 build.xml 的 XML 文件。
  本例中,运行 phing 或 phing install 命令,会把 id 等于“codefiles”的 fileset 下定义的所有文件,根据 todir 的值,拷贝到指定文件夹下。
  C:\Program Files\Zend\Apache2\htdocs\phing>phing install
Buildfile: C:\Program Files\Zend\Apache2\htdocs\phing\build.xml
  BUILD FAILED
Error reading project file [wrapped: C:\Program Files\Zend\Apache2\htdocs\phing\build.xml:13:18: No memory]
Total time: 0.4898 seconds
  运行以上命令,并没有成功,报告“…… No memory”错误,即内存不足。需要内存大小,是根据 build.xml 文件的大小来确定的。
  解决内存不足的问题,可以修改 php.ini 中的 memory_limit 的值:
  memory_limit = 128M ;Maximum amount of memory a script may consume (128MB)
  改为 memory_limit = 256M,重启 Web 服务。再次运行 phing 命令:
  C:\Program Files\Zend\Apache2\htdocs\phing>phing
Buildfile: C:\Program Files\Zend\Apache2\htdocs\phing\build.xml
  MyPhingPrj > phpunit:
[phpunit] Tests run: 2, Failures: 0, Errors: 0, Incomplete: 0, Skipped: 0, Time elapsed: 0.07960 s
  MyPhingPrj > prepare:
[echo] Making directory install
[mkdir] Created dir: C:\Program Files\Zend\Apache2\htdocs\phing\install
  MyPhingPrj > install:
[copy] Created 2 empty directories in C:\Program Files\Zend\Apache2\htdocs\phing\install
[copy] Copying 5 files to C:\Program Files\Zend\Apache2\htdocs\phing\install
[copy] Copying 1 file to C:\Program Files\Zend\Apache2\htdocs\phing\install
  BUILD FINISHED
Total time: 1.4857 second
  
附录-1:
  运行命令 pear channel-discover pear.phing.info:
  C:\Program Files\Zend\ZendServer\bin>pear channel-discover pear.phing.info
Adding Channel "pear.phing.info" succeeded
Discovery of channel "pear.phing.info" succeeded
  附录-2:
  运行命令 pear install --alldeps phing/phing:
  C:\Program Files\Zend\ZendServer\bin>pear install --alldeps phing/phing
Failed to download pear/VersionControl_SVN within preferred state "stable", latest release is version 0.3.3, stability "alpha",
use "channel://pear.php.net/VersionControl_SVN-0.3.3" to install Failed to download pear/Console_ProgressBar within preferred state "stable",
latest release is version 0.5.2beta, stability "beta", use "channel://pear.php.net/Console_ProgressBar-0.5.2beta" to install
Failed to download pear/XML_Serializer within preferred state "stable", latest release is version 0.20.0, stability "beta",
use "channel://pear.php.net/XML_Serializer-0.20.0" to install
WARNING: "pear/HTML_Common" is deprecated in favor of "pear/HTML_Common2"
phing/phing can optionally use package "pear/VersionControl_SVN" (version >= 0.3.2)
pear/PHP_CompatInfo can optionally use package "pear/Console_ProgressBar" (version >= 0.5.2beta)
pear/PEAR_PackageFileManager_Plugins requires package "pear/XML_Serializer" (version >= 0.18.0)
pear/PEAR_PackageFileManager requires package "pear/PEAR_PackageFileManager_Plugins"
pear/PEAR_PackageFileManager2 requires package "pear/PEAR_PackageFileManager_Plugins"
downloading phing-2.4.1.tgz ...
Starting to download phing-2.4.1.tgz (365,217 bytes)
........done: 365,217 bytes
downloading phingdocs-2.4.1.tgz ...
Starting to download phingdocs-2.4.1.tgz (114,405 bytes)
...done: 114,405 bytes
downloading xdebug-2.1.0.tgz ...
Starting to download xdebug-2.1.0.tgz (301,354 bytes)
...done: 301,354 bytes
downloading PHP_CompatInfo-1.9.0.tgz ...
Starting to download PHP_CompatInfo-1.9.0.tgz (180,340 bytes)
...done: 180,340 bytes
downloading Console_Table-1.1.3.tgz ...
Starting to download Console_Table-1.1.3.tgz (9,253 bytes)
...done: 9,253 bytes
downloading Console_Getargs-1.3.4.tgz ...
Starting to download Console_Getargs-1.3.4.tgz (17,796 bytes)
...done: 17,796 bytes
downloading File_Find-1.3.0.tgz ...
Starting to download File_Find-1.3.0.tgz (7,941 bytes)
...done: 7,941 bytes
downloading Event_Dispatcher-1.1.0.tgz ...
Starting to download Event_Dispatcher-1.1.0.tgz (8,500 bytes)
...done: 8,500 bytes
downloading Var_Dump-1.0.3.tgz ...
Starting to download Var_Dump-1.0.3.tgz (16,342 bytes)
...done: 16,342 bytes
downloading HTML_Table-1.8.3.tgz ...
Starting to download HTML_Table-1.8.3.tgz (16,994 bytes)
...done: 16,994 bytes
downloading Console_Color-1.0.2.tgz ...
Starting to download Console_Color-1.0.2.tgz (4,727 bytes)
...done: 4,727 bytes
downloading HTML_Common-1.2.5.tgz ...
Starting to download HTML_Common-1.2.5.tgz (4,585 bytes)
...done: 4,585 bytes
install ok: channel://pear.phing.info/phing-2.4.1
install ok: channel://pear.phing.info/phingdocs-2.4.1
66 source files, building
WARNING: php_bin C:\Program Files\Zend\ZendServer\bin\.\php.exe appears to have
a suffix .exe, but config variable php_suffix does not match
ERROR: The DSP xdebug.dsp does not exist.
install ok: channel://pear.php.net/Console_Table-1.1.3
install ok: channel://pear.php.net/Console_Getargs-1.3.4
install ok: channel://pear.php.net/File_Find-1.3.0
install ok: channel://pear.php.net/Event_Dispatcher-1.1.0
install ok: channel://pear.php.net/Var_Dump-1.0.3
install ok: channel://pear.php.net/Console_Color-1.0.2
install ok: channel://pear.php.net/HTML_Common-1.2.5
install ok: channel://pear.php.net/PHP_CompatInfo-1.9.0
install ok: channel://pear.php.net/HTML_Table-1.8.3
  附录-3:
  没有安装VersionControl_SVN-0.3.3 时,运行 phing:
  C:\Program Files\Zend\Apache2\htdocs\phing>phing t
Buildfile: C:\Program Files\Zend\Apache2\htdocs\phing\build.xml
[PHP Error] include_once(VersionControl/SVN.php): failed to open stream: No such file or directory [line 59 of
C:\Program Files\Zend\ZendServer\bin\PEAR\phing\tasks\ext\svn\SvnBaseTask.php]
[PHP Error] include_once(): Failed opening 'VersionControl/SVN.php' for inclusion
(include_path='.;C:\Program Files\Zend\ZendServer\bin\pear;C:\Program Files\Zend\ZendServer\share\ZendFramework\library')
[line 59 of C:\Program Files\Zend\ZendServer\bin\PEAR\phing\tasks\ext\svn\SvnBaseTask.php]
  BUILD FAILED
Error reading project file [wrapped: The SVN tasks depend on PEAR VersionControl_SVN package being installed.]
Total time: 7.4325 seconds
  附录-4:
  安装 VersionControl_SVN-0.3.3:
  C:\Program Files\Zend\ZendServer\bin>pear install channel://pear.php.net/VersionControl_SVN-0.3.3
downloading VersionControl_SVN-0.3.3.tgz ...
Starting to download VersionControl_SVN-0.3.3.tgz (33,630 bytes)
.........done: 33,630 bytes
install ok: channel://pear.php.net/VersionControl_SVN-0.3.3
  作者:张庆(网眼) 西安 PHP 教育培训中心 2010-7-13
来自“网眼视界”:http://blog.why100000.com
作者微博:http://t.qq.com/zhangking
“十万个为什么”电脑学习网:http://www.why100000.com

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-358061-1-1.html 上篇帖子: php 5.3带来了什么(二) 下篇帖子: php 5.2 内存管理器
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表