我正在使用PHPUnit和Jenkins测试Zend Framework应用程序。我需要覆盖使用PHPUnit bootstrap.php
文件中的PHP的getenv
访问的APPLICATION_ENV
环境变量:
<?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. ...
我有两个环境:testing
(用于本地机器)和testing-ci
(用于Jenkins机器)。当变量在Jenkins中运行时,如何将其设置为testing-ci
?有没有办法在build.xml
中为Ant或Phing设置它?
步骤1:将环境变量添加到Jenkins。
根据需要打开全局或特定于项目的配置页面,并向下扫描环境变量部分。选中复选框并使用添加按钮添加键/值对。
这些将由Jenkins传递给您的Ant构建脚本。
步骤2:将它们加载到Ant中。
在Ant build.xml
脚本的顶部附近,加载带有env
前缀的所有环境变量,这样它们就不会干扰其他属性。
<property environment="env"/>
现在,所有导入的变量都可以使用env
前缀,例如${env.HOME}
。
步骤3:将它们传递给PHPUnit。
假设您使用<exec>
任务来运行PHPUnit,那么您可以使用<env>
子元素将每个需要的变量传递给它。
<exec taskname="test" executable="phpunit">
<env key="APPLICATION_ENV" value="${env.APPLICATION_ENV}"/>
...
</exec>
注意:您可能只想尝试第一步,看看Ant是否会将环境变量传递给执行的子进程,但我认为其他两步有助于明确其他开发人员的需求。
好。
这是你要做的…
首先,创建一个名为bootstrap.hp.的新文件
接下来,在boostrap.php中,输入以下代码:
if (!empty($argv) &&
($key = array_search('--environment', $argv)) !== FALSE)
{
$env = $argv[$key + 1];
putenv('APPLICATION_ENV=' . $env);
}
将bootstrap.php加载到您的测试套件或(甚至更好的)phpunit.xml。
最后,通过您的CI构建配置,或通过控制台或任何地方,执行您的单元测试,如phpunit UnitTest.php --environment dev
。
你可以走了。