2012-02-03 34 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