Переопределить переменную среды при работе на Jenkins - PullRequest
6 голосов
/ 03 февраля 2012

Я тестирую приложение Zend Framework, используя PHPUnit и Jenkins. Мне нужно переопределить переменную окружения APPLICATION_ENV, которая является доступом с использованием PHP getenv в файле PHPUnit 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). Как я могу установить переменную на testing-ci, когда она работает в Jenkins? Есть ли способ установить его в build.xml для Ant или Phing?

Ответы [ 2 ]

7 голосов
/ 05 февраля 2012

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

0 голосов
/ 04 февраля 2012

ОК.

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

Сначала создайте новый файл с именем 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.

Вы готовы идти.

...