2012-02-03 99 views
6

我正在使用PHPUnit和Jenkins测试Zend Framework应用程序。我需要重写APPLICATION_ENV环境变量,它是一个使用PHP访问的getenv在PHPUnit的bootstrap.php文件:在Jenkins上运行时覆盖环境变量

<?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中运行时,如何将变量设置为testing-ci?有什么办法可以在蚂蚁或Phing的build.xml中设置它?

回答

7

第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> 

注:你可能想尝试只是第一步,看蚂蚁会通过环境变量一起执行的子进程,但我认为其他两个步骤是良好的,清楚是什么需要其他开发者。

+0

好吧,这将是很好的,谢谢 – dextervip 2012-02-05 19:00:20

+0

我添加了我在我的设置中使用的代码。 – 2012-02-06 20:19:57

+0

这就是我正在寻找的,它工作正常。谢谢。 – dextervip 2012-02-06 23:49:26

0

好的。

这里是你做了什么......

首先,创建一个名为bootstrap.php中的新文件。

接下来,在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

你很好走。

+0

对不起,我不知道你是否理解我,但我已经有bootstrap.php和phpunit.xml,现在它在我的机器数据库本地工作,但是当去詹金斯这是另一个数据库密码。我需要一个解决方案来更改jenkins配置或build.xml中的env变量,这样不会中断我的本地测试,并且可以在jenkins上运行。 – dextervip 2012-02-04 01:57:32

+0

哦,对不起。我现在正在使用更新的解决方案编辑我的帖子。 – 2012-02-04 03:59:36

+0

这将是一个解决方案,但是在我的情况下,我正在运行一个由xml配置的套件测试用例(phpunit --configuration ./tests/phpunit.xml)。 PHPUnit不接受接收 - 环境,但无论如何谢谢:) – dextervip 2012-02-06 23:53:12