Переопределение переменной среды при запуске на Jenkins

Я тестирую приложение Zend Framework с помощью PHPUnit и Jenkins. Мне нужно переопределить APPLICATION_ENV переменная среды, доступ к которой осуществляется с помощью PHP getenv в PHPUnit :

<?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 (для машины Дженкинс). Как установить переменную в testing-ci, когда он работает в Jenkins? Есть ли способ установить его в build.xml для муравья или Phing?

2 ответов


Шаг 1: добавьте переменные среды в Jenkins.

откройте страницу глобальной или конкретной конфигурации проекта в зависимости от ваших потребностей и отсканируйте переменные среды. Установите флажок и используйте добавить кнопка для добавления пар ключ / значение.

они будут переданы Дженкинсом вашему сценарию сборки Ant.

Шаг 2: загрузите их в 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 передавать переменные среды вместе с выполняемыми дочерними процессами, но я думаю, что два других шага хороши для того, чтобы прояснить, что требуется другим разработчикам.


OK.

вот что вы делаете...

сначала создайте новый файл под названием bootstrap.РНР.

далее в boostrap.php, поставьте следующий код:

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

загрузить загрузчик.php в ваш testsuite или (еще лучше) phpunit.XML.

наконец, через конфигурацию сборки CI или через консоль или где угодно выполните модульные тесты, такие как phpunit UnitTest.php --environment dev.

вы хорошо идти.