2012-02-03 38 views
6

üzerinde çalışırken ortam değişkenini geçersiz kılma PHPUnit ve Jenkins kullanarak bir Zend Framework uygulamasını test ediyorum. Ben kullanarak erişim APPLICATION_ENV ortam değişkeni geçersiz kılmak için gereken PHP en getenv PHPUnit bootstrap.php dosyada: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. ... 

İki ortamları vardır: testing ve (Jenkins makine için) testing-ci (yerel makinalar için). Jenkins'de çalışırken, değişkeni testing-ci olarak nasıl ayarlayabilirim? Ant veya Phing için build.xml içinde ayarlamak için herhangi bir yolu var mı?

cevap

7

Adım 1: Ortam değişkenlerini Jenkins'e ekleyin.

İhtiyaçlarınıza göre global veya projeye özel yapılandırma sayfasını açın ve Ortam değişkenleri bölümü için aşağıya doğru tarayın. Onay kutusunu işaretleyin ve anahtar/değer çiftleri eklemek için Add düğmesini kullanın.

Bunlar, Jenkins tarafından Ant derleme betiğinize geçirilecektir.

Adım 2: Ant içerisine yükleyin.

Ant'iniz build.xml komut dosyanızın üst kısmına yakın bir yerde, tüm ortam değişkenlerini env öneki ile yükleyin, böylece diğer özelliklerle çakışmazlar.

<property environment="env"/> 

Artık tüm ithal değişkenler env öneki kullanılarak sunulacak, örneğin ${env.HOME}.

Adım 3: PHPUnit onları geçmek.

PHPUnit'i çalıştırmak için <exec> görevini kullandığınızı varsayarak, <env> alt öğe öğesini kullanarak gereken her değişkeni ona geçirebilirsiniz.

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

Not: Ant idam alt süreçlere boyunca çevre değişkenleri geçecek olmadığını görmek için sadece ilk adımı denemek isteyebilirsiniz, ama diğer iki adım ne açıkça belirttiler için iyi olduğunu düşünüyorum diğer geliştiriciler için gerekli.

+0

Tamam güzel olurdu, teşekkürler – dextervip

+0

Kurulumumu kullanıyorum kodu ekledim. –

+0

Aradığım şey bu, iyi çalışıyor. Teşekkür ederim. – dextervip

0

Tamam.

Burada

Yapman gereken ...

Öncelikle bootstrap.php adlı yeni bir dosya oluşturun. senin testsuite veya (daha iyi) phpunit.xml içine

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

Yük bootstrap.php:

Sonraki, boostrap.php içinde aşağıdaki kodu koydu.

Son olarak, CI oluşturma yapılandırmanız aracılığıyla veya konsol veya herhangi bir yerden, phpunit UnitTest.php --environment dev gibi birim testlerinizi gerçekleştirin.

Gitmek üzeresiniz.

+0

Maalesef beni anladın mı bilmiyorum ama ben zaten bootstrap.php ve phpunit.xml var, nowdays Yerel olarak makine veritabanımda çalışıyor ama jenkins'a gittiğinde başka bir veritabanı şifresi. Jenkins yapılandırmasında veya build.xml dosyasındaki env değişkenini değiştirmek için bir çözüme ihtiyacım var, bu yüzden yerel testlerimi bozmayacak ve jenkins üzerinde çalışacak. – dextervip

+0

Oh Üzgünüm. Gönderiyi güncellenmiş bir çözümle şimdi düzenliyorum. –

+0

Bu bir çözüm olurdu, ancak benim durumumda xml (phpunit --configuration ./tests/phpunit.xml) tarafından yapılandırılan bir paket test vakası çalıştırıyorum. PHPUnit alma kabul etmez --çevre ama yine de teşekkürler :) – dextervip