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



我正在使用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

你可以走了。

相关内容

  • 没有找到相关文章

最新更新