我正在使用Phing在Hudson中完成构建任务.
我想生成包含自上次成功构建Hudson以来所有提交的更改日志.但看起来哈德森和哈德森的Git插件都没有提供%last_build_time%变量.
这将是令人满意的解决方案,(但如何获得时间?):
git log --pretty="%s" --since="%last_build_time%"
Run Code Online (Sandbox Code Playgroud)
我现在看到的唯一方法是从作业xml文件中提取它,但我不知道是否可以使用Phing.
如何生成更改日志?
在我的构建脚本中,我正在尝试将日期和SVN修订号输出到构建目录中的文件.我想在单独的行上的日期和修订号,但无法获得输出到文件的换行符.我尝试过各种各样的方法:
<echo file="${build.dir}\build.txt">DATE = ${DATE} \r\n \\\r\\\n PHP_EOL</echo>
<echo msg="DATE: ${DATE} \r\n \\\r\\\n PHP_EOL 0x0D0A SVN revision: ${svn.lastrevision} . PHP_EOL" file="${build.dir}\build.txt" append="true" />
Run Code Online (Sandbox Code Playgroud)
有没有其他人设法通过Phing提交换行?我查看了phing中的代码,它使用了fwrite.我只能猜测我的build.xml中的字符串在被fwrite处理之前会以某种方式被转义?
我想我可能不得不求助于使用ExecTask?
当我在控制台中列出它时,我有大约25个phing目标.
但是其他目标只需要其中5个,我永远不会单独触发它们.
是否有可能隐藏它们?
例如:
有目标:cms.cc cc-config cc-content cc-service
全部弹出我的列表,但"cc"-target是我将触发的唯一一个.
谢谢!
Max OS X 10.7 ..当我运行时,phing -v我得到以下错误:
Warning: require_once(phing/Project.php): failed to open stream: No such file or directory in /usr/lib/php/pear/phing/Phing.php on line 22
Fatal error: require_once(): Failed opening required 'phing/Project.php' (include_path='.:') in /usr/lib/php/pear/phing/Phing.php on line 22
Run Code Online (Sandbox Code Playgroud)
pear config-set auto_discover 1
pear install phing/phing
Run Code Online (Sandbox Code Playgroud)
include_path = ".:/Applications/MAMP/bin/php/php5.3.6/lib/php"
Run Code Online (Sandbox Code Playgroud)
bash-3.2$ whereis php
/usr/bin/php
bash-3.2$ whereis pear
/usr/bin/pear
bash-3.2$ whereis phing
/usr/bin/phing
Run Code Online (Sandbox Code Playgroud)
? pear config-get php_dir
/usr/lib/php/pear
Run Code Online (Sandbox Code Playgroud)
检查此文件夹,system.php并且phing.php都存在于此路径中.
我们使用phing来构建和测试我们的项目.我想尽可能地删除PEAR上的依赖项,这样我就可以为不同的项目运行不同版本的包.我创建了一个composer.json文件,它安装了所有必需的包
{
"require": {
"php": ">=5.3.3",
"zendframework/zendframework": "2.2.*",
"doctrine/doctrine-orm-module": "*",
"phpoption/phpoption": "*"
},
"require-dev": {
"phing/phing": "*",
"phpunit/phpunit": "*",
"pdepend/pdepend": "*",
"phpmd/phpmd": "*",
"phploc/phploc": "*",
"phpdocumentor/phpdocumentor": "*",
"squizlabs/php_codesniffer": "*",
"mayflower/php-codebrowser": "*",
"sebastian/phpcpd": "*",
"zendframework/zftool": "dev-master",
"zendframework/zend-form": "*",
"hounddog/doctrine-data-fixture-module": "*",
"pear/console_commandline": "dev-trunk",
"pear/log": "dev-master",
"pear/pear_exception": "dev-master"
},
"config": {
"bin-dir": "vendor/bin/"
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个phing build.xml
<?xml version="1.0" encoding="UTF-8"?>
<project name="SolExactConnector" default="build">
<property name="basedir" value="." override="true"/>
<property name="source" value="${basedir}/module"/>
<fileset dir="${source}" id="sourceWithoutTests">
<include name="**/*.php"/>
<exclude name="*/test/"/>
<exclude name="*/Module.php"/>
<exclude name="*/config/module.config.php"/>
<exclude name="*/test/Bootstrap.php"/> …Run Code Online (Sandbox Code Playgroud) 我们目前使用手动设置和配置脚本以及手动连续集成脚本来构建和部署我们的应用程序.我正在考虑使用专为这些目的而设计的第三方系统来正式化这一点.
我之前看过Phing,我知道它基本上就像Ant.但是,我的Ant体验有点受限,所以对我没有多大帮助.(我所做的大部分Java工作都是作为jar文件部署的).
之前我已经研究过Cruise Control,我知道phpUnderControl是CC的一个插件.但是,Phing说它也适用于CC.所以我不清楚这里的重叠.我是否需要使用Phing和phpUnderControl来使用CruiseControl,还是它们是相互排斥的?
我需要的是能够:
现在,我们以这种或那种形式提供所有这些.但是,将它全部自动化并在一个过程中捆绑在一起会很不错.
我的问题基本上是两个问题,但由于它们密切相关,我认为让它们成为有意义的是有道理的.
案例:
我正在运行Web应用程序,该应用程序分布在AWS Elastic Load Balancer后面的多个AWS EC2实例上
预期目标:
a)在部署新的应用程序代码(php)时,它应自动分发到所有EC2实例.
b)当添加新的EC2实例时,它们应该使用最新的应用程序代码自动"引导"
到目前为止我的想法:
ad a)
phing(http://phing.info)可能是这一部分的答案.我可能会为每个EC2实例添加多个目标,并且在运行部署时,它将部署到所有计算机.可能不幸的是没有并行.但是,当以负载均衡器中的EC2实例"暂停",再次升级,"取消暂停"并再次运行到下一个实例的方式编写脚本时,这可能甚至是有益的.
ad b)
不确定我将如何实现这一目标.在传统的"基于硬件的设置"中,我可能在网络存储设备上有一个"应用程序代码"卷,并且当添加新服务器时,我只需附加该卷.在部署新的appcode时,我只对该卷进行了一次部署操作.所以我需要一些"中央存储",从新引导的机器/实例下载它的应用程序代码.我考虑过git,但毕竟git不是一个部署工具,可能不应该被强制用作一个.
我很高兴看到你为这些任务设置的设置,并听取你对这种情况的提示和想法.
谢谢,
约书亚
<?xml version="1.0" ?>
<project name="first" basedir="." default="build-skeleton">
<property name="dirName" value="module" />
<property name="fileName" value="config" />
<target name="build-skeleton" description="Making folders">
<mkdir dir="./${dirName}/Block" />
<touch file="./${dirName}/etc/${fileName}.xml" />
</target>
</project>
Run Code Online (Sandbox Code Playgroud)
phing -f mage_module.xml -DdirName=moduleX,fileName=config
phing -f mage_module.xml -DdirName=moduleX fileName=config
两者都抛出错误 - 毫不奇怪.
是否可以通过命令行在Phing中设置多个属性?
我正在第一次尝试设置Jenkins来构建和运行我的CakePHP项目的单元测试/代码覆盖.到目前为止,我已经成功地让Jenkins从我的BitBucket存储库中自动获取和构建 - 这本身就是一个小小的胜利.
我想要发生的下一件事是运行单元测试并填充代码覆盖率报告.
这是我的build.xml,它使用(仅)构建命令在Jenkins中执行 phing -f $WORKSPACE/build.xml
<?xml version="1.0" encoding="UTF-8"?>
<project name="Consumer Love" default="phpunit">
<target name="phpunit">
<exec command="cake test app --coverage-clover logs/reports/clover.xml"></exec>
</target>
</project>
Run Code Online (Sandbox Code Playgroud)
我认为问题是,当你运行cake test app它要求提示你要运行哪些特定测试时,我一直无法找到运行我所有 CakePHP应用程序单元测试的方法.
我正在尝试检查Phing中是否存在目录或文件,但我甚至无法使用基础知识.
例如:
<project name="test" default="help" basedir="./">
<target name="clean" description="Deletes directory">
<available file="/testy" type="dir" property="dir.Exists" />
<if>
<isset property="dir.Exists"/>
<then>
<echo>Yep</echo>
</then>
</if>
</target>
<phingcall target="clean" />
</project>
Run Code Online (Sandbox Code Playgroud)
我得到一个奇怪的错误:
Error reading project file [wrapped: \build.xml:22:18: Error initializing nested
element <echo> [wrapped: phing.tasks.system.IfTask doesn't support the 'echo'
creator/adder.]]
Run Code Online (Sandbox Code Playgroud)
最终,如果目录存在,我想添加一个条件是/否来继续.
PS.该错误与"嵌套元素回声"无关,据我所知,因为如果我删除它仍然发送相同的错误,实际上我认为这是一个默认语法相关的错误消息或其他东西.
phing ×10
php ×6
amazon-ec2 ×1
bash ×1
build ×1
cakephp ×1
composer-php ×1
deployment ×1
file ×1
git ×1
hudson ×1
jenkins ×1
line-breaks ×1
pear ×1
phpunit ×1
target ×1
unit-testing ×1
windows ×1
xml ×1