在Jenkins上运行时覆盖环境变量

时间:2012-02-03 12:30:58

标签: ant continuous-integration phpunit jenkins phing

我正在使用PHPUnit和Jenkins测试Zend Framework应用程序。我需要覆盖使用PHPUnit APPLICATION_ENV文件中的PHP getenv访问的bootstrap.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. ...

我有两个环境:testing(对于本地计算机)和testing-ci(对于Jenkins计算机)。如何在Jenkins中运行时将变量设置为testing-ci?有没有办法在build.xml中为Ant或Phing设置它?

2 个答案:

答案 0 :(得分: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>

注意:您可能只想尝试第一步,看看Ant是否会将环境变量传递给已执行的子进程,但我认为其他两个步骤有助于明确说明什么是其他开发人员所必需的。

答案 1 :(得分:0)

行。

这是你做的......

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

接下来,在boostrap.php中,输入以下代码:

if (!empty($argv) && 
    ($key = array_search('--environment', $argv)) !== FALSE)
{
    $env = $argv[$key + 1];
    putenv('APPLICATION_ENV=' . $env);
}

将bootstrap.php加载到您的testsuite或(甚至更好的)phpunit.xml。

最后,通过您的CI构建配置,或通过控制台或任何地方,执行您的单元测试,如phpunit UnitTest.php --environment dev

你很高兴。