我仍然在研究应该使用哪种工具.当我四处寻找时,我注意到他们中没有一个真的有任何新版本:
Xinc
Version 2.0.1 released 02/05/08
Phing
Version 2.3.3 released 12/07/08
phpUnderControl
Version 0.4.4 released 08/09/08
Run Code Online (Sandbox Code Playgroud)
我应该选择phpUnderControl,因为它有最新版本,开发可能还会继续吗?我不想仅仅因为php 5.3附带的某些功能无法由其中一个处理而在半年内切换.
我需要PHP Unit,SVN和Codesniffer支持.
我有一个脚本可以查找并输出或将我当前的版本#写入文本文件.现在唯一的问题是如何将此版本号添加到PHING属性中.
现在我的PHING目标构建build.zip和built.tar,我希望它构建build-1.0.0.zip或者版本脚本决定当前版本的是什么.我怎样才能做到这一点?我是否必须创建自己的"任务"?
我们已经开始使用Hudson,目前的工作流程是:
checkout local> code> run tests> update> run tests> commit
而不是轮询,Hudson只是坐在那里直到我们实例化一个构建.然后:
在本地结账>运行Phing脚本
Phing脚本然后:
svn导出最新版本>运行测试(如果成功)>生成报告等..>压缩导出> scp到生产服务器> ..做魔术使网站生效...
这一切都运行良好和花花公子,但它并没有真正给我们任何类型的"升级"QA的能力,每个构建建立repo头修订.理想情况下,我们希望Hudson轮询或使用post commit hooks构建每个提交,并且:
checkout local>运行Phing任务运行测试,如果成功,生成报告等.
然后,能够手动将自动部署(通过Phing任务)实例化为"使用每个特定构建暂存QA环境或生产.并非每个提交都将部署到QA.
这个工作流程是否可能来自Hudson,或者我们是否需要在之后手动运行我们的部署Phing任务.
我一直在阅读有关Phing和Ant的内容,我不确定这些工具对这种情况最有用.
它可以很容易地调试语句等,但我会给你我们的文字scanario.
我们有一个可下载的PHP应用程序的免费和高级版本,而不是只包含隐藏在某处的变量然后执行:
if($premium == true) {
echo 'some additional functionality';
} else {
echo 'basic functionality';
}
Run Code Online (Sandbox Code Playgroud)
显然,有人可以接受源并更改该变量,然后爆炸 - 他们窃取了我们的代码.像Ioncube之类的东西在我的经验中完全不实用,对托管公司的支持还不够好.
我更喜欢某些东西..或许类似于此:
## if premium ##
echo 'some additional functionality';
## else ##
echo 'basic functionality';
## endif ##
Run Code Online (Sandbox Code Playgroud)
然后我会运行两个构建,一个将premium设置为true,一个设置为false,这将生成两个简单的文件:
echo 'some additional functionality';
Run Code Online (Sandbox Code Playgroud)
和
echo 'basic functionality';
Run Code Online (Sandbox Code Playgroud)
能够仅基于传递给构建应用程序的相同条件包含整个文件也是非常有帮助的.
我找不到办法做到这一点,但如果可能,我愿意接受任何其他想法.
帮助很棒,
UPDATE
使用C预处理器非常棒,看起来它可以完成我需要的一切.但是,我找不到如何做以下3件事.
#1我需要删除生成的输出文件中的注释.以下是这些例子.
# 1 "./index.php"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "./index.php"
Run Code Online (Sandbox Code Playgroud)
我没有在您链接到的手册页中找到如何执行此操作的示例.
#2我需要递归遍历每个发现的文件.当我运行当前代码时,我收到一个错误:../target/./folder/test.php: No such file or directory
所以基本上我有我的'source'文件夹,它包含一个名为'folder'的子文件夹,它不会重新创建它,也不会重新创建它(test.php)
#3我确信这个很容易 - …
我正在使用PHPUnit和Jenkins测试Zend Framework应用程序.我需要覆盖PHPUnit 文件中APPLICATION_ENV使用PHP访问的环境变量:getenvbootstrap.php
<?php
// Define application environment
defined('APPLICATION_ENV')
|| define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'testing'));
... use APPLICATION_ENV to pick database, configuration, etc. ...
Run Code Online (Sandbox Code Playgroud)
我有两个环境:( testing对于本地机器)和testing-ci(对于Jenkins机器).如何将变量设置为testing-ci在Jenkins中运行时?有没有办法build.xml为Ant或Phing 设置它?
有没有办法从phing ad-hoc任务中获得返回值?
例如,我正在尝试从文件中的JSON字符串获取版本号,如下所示:
<target name="get-app-version">
<adhoc-task name="appversion" ><![CDATA[
class AppversionTask extends Task {
private $version;
public function getVersion() {
return $this->version;
}
function main() {
$manifest = file_get_contents("manifest.json");
$manifest_json = json_decode($manifest);
$version = $manifest_json->version;
$this->log("App version: " . $version);
$this->version = $version;
}
}
]]></adhoc-task>
<appversion output="version" />
<echo message="${version}" />
</target>
Run Code Online (Sandbox Code Playgroud)
我只能找到有关设置值的文档,但不能获取值.但是,adhoc typdef任务似乎显示了get语法,所以我想知道是否有某种方法可以做到这一点.
我想设置附加日期和时间的文件名,所以我想创建名为as的文件,behat-20140913-195915.html但下面的示例将名称设置为behat-yyyymmdd-hhiiss.html.有人知道问题的解决方案吗?
我按照这个例子
注意:这两个也不起作用:${DSTAMP} ${TSTAMP}
<?xml version="1.0" encoding="UTF-8"?>
<project name="Sport" default="build-default" basedir=".">
<tstamp>
<format property="TODAY_MY" pattern="yyyymmdd-hhiiss" locale="en,UK" />
</tstamp>
<target name="build" description="Runs everything in order ..." depends="behat-bdd" />
<target name="behat">
<echo msg="Running Behat tests ..." />
<exec logoutput="true" checkreturn="true"
command="bin/behat -f progress --format html --out ${dir-report}/behat-${TODAY_MY}.html" dir="./" />
</target>
</project>
Run Code Online (Sandbox Code Playgroud) 我正在使用PHP构建系统phing来创建phar存档文件.
是否有任何已知的科学将让我在运行期间自动设置phar.readonly为0(允许创建phar知识)phing,但是0在其他所有时间都将其设置为?
我们目前使用 Phing 进行部署,并使用 dbdeploy 应用任何数据库更改。但是,有时我们希望在部署期间进行一些更改,这些更改可以由我们的对象模型更好地处理,因此我们编写了一次使用 PHP 脚本,这些脚本在部署后手动运行。
是否有类似于 dbdeploy 的现有解决方案可以处理正在运行的脚本,更重要的是,跟踪哪些已运行,以便每个脚本只运行一次?
是否有一个选项可以抑制在 Phing 中执行目标时显示的默认输出。我有一个
<foreach param="my_param" absparam="my_abs_param" target="my-target">
<fileset dir="www">
<include name="lots-of-files-here" />
</fileset>
</foreach>
Run Code Online (Sandbox Code Playgroud)
目标对每个目录进行简单检查,其输出根本没有用,但打印大量消息告诉 my-target 被调用:
> my-target:
[foreach] Calling Buildfile 'build.xml' with target 'my-target'.
Run Code Online (Sandbox Code Playgroud)
有没有办法禁用该输出?