2012-02-03 10 views
6

Sto testando un'applicazione Zend Framework utilizzando PHPUnit e Jenkins. Ho bisogno di ignorare la variabile APPLICATION_ENV ambiente che è di accesso utilizzando di getenv nel file PHPUnit bootstrap.php PHP:Ignora la variabile di ambiente durante l'esecuzione su 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. ... 

Ho due ambienti: testing (per le macchine locali) e testing-ci (per la macchina Jenkins). Come posso impostare la variabile su testing-ci quando viene eseguita in Jenkins? C'è un modo per impostarlo in build.xml per Ant o Phing?

risposta

7

Passaggio 1: Aggiungere le variabili di ambiente a Jenkins.

Aprire la pagina di configurazione globale o specifica del progetto in base alle proprie esigenze ed eseguire la scansione in basso per la sezione Variabili d'ambiente. Seleziona la casella di controllo e utilizza il pulsante Aggiungi per aggiungere coppie chiave/valore.

Questi saranno passati da Jenkins al tuo script di build Ant.

Passaggio 2: Caricalo in Ant.

Nella parte superiore dello script Ant build.xml, caricare tutte le variabili d'ambiente con un prefisso env in modo che non interferiscano con altre proprietà.

<property environment="env"/> 

variabili Ora tutto importati saranno disponibili utilizzando il prefisso env, per esempio ${env.HOME}.

Passaggio 3: Passarli a PHPUnit.

Supponendo che si stia utilizzando l'attività <exec> per eseguire PHPUnit, è possibile passare ogni variabile necessaria utilizzando l'elemento figlio <env>.

<exec taskname="test" executable="phpunit"> 
    <env key="APPLICATION_ENV" value="${env.APPLICATION_ENV}"/> 
    ... 
</exec> 

Nota: Si potrebbe desiderare di provare solo il primo passo per vedere se Ant passerà le variabili di ambiente insieme ai processi figli eseguiti, ma penso che le altre due fasi sono buoni per rendere chiaro ciò che è richiesto ad altri sviluppatori.

+0

Ok sarebbe bello, grazie – dextervip

+0

Ho aggiunto il codice che sto usando nel mio setup. –

+0

Questo è quello che stavo cercando, funziona bene. Grazie. – dextervip

0

OK.

Ecco quello che fai ...

In primo luogo, creare un nuovo file chiamato bootstrap.php.

successiva, in boostrap.php, inserire il codice seguente:

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

Caricare il bootstrap.php nella vostra suite di test o (ancora meglio) phpunit.xml.

Infine, tramite la configurazione di configurazione CI, o tramite la console o ovunque, eseguire i test dell'unità come phpunit UnitTest.php --environment dev.

Sei pronto per partire.

+0

Scusa non so se mi hai capito ma ho già bootstrap.php e phpunit.xml, oggi funziona localmente sul mio database macchina ma quando va a jenkins è un'altra password del database. Ho bisogno di una soluzione per cambiare la variabile env nella configurazione di jenkins o nel build.xml in modo che non interrompa il mio test locale e funzioni su jenkins. – dextervip

+0

Oh mi dispiace. Sto modificando il mio post ora con una soluzione aggiornata. –

+0

Sarebbe una soluzione, tuttavia nel mio caso sto eseguendo una suite test case configurata da xml (phpunit --configuration ./tests/phpunit.xml). PHPUnit non accetta ricevere --environment ma comunque grazie :) – dextervip