2012-02-03 37 views
6

Tôi đang thử nghiệm một ứng dụng Zend Framework bằng cách sử dụng PHPUnit và Jenkins. Tôi cần phải ghi đè lên các biến APPLICATION_ENV môi trường đó là truy cập sử dụng PHP của getenv trong file PHPUnit bootstrap.php:Ghi đè biến môi trường khi chạy trên 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. ... 

Tôi có hai môi trường: testing (đối với máy cục bộ) và testing-ci (đối với máy Jenkins). Làm thế nào tôi có thể đặt biến thành testing-ci khi nó chạy trong Jenkins? Có cách nào để đặt nó trong build.xml cho Ant hoặc Phing không?

Trả lời

7

Bước 1: Thêm biến môi trường vào Jenkins.

Mở trang cấu hình toàn cầu hoặc dự án cụ thể tùy thuộc vào nhu cầu của bạn và quét xuống phần Biến môi trường. Chọn hộp kiểm và sử dụng nút Thêm để thêm cặp khóa/giá trị.

Chúng sẽ được chuyển qua Jenkins cho tập lệnh xây dựng Ant của bạn.

Bước 2: Tải chúng vào Ant.

Gần đầu tập lệnh Ant build.xml của bạn, tải tất cả các biến môi trường với tiền tố env để chúng không ảnh hưởng đến các thuộc tính khác.

<property environment="env"/> 

biến Bây giờ tất cả nhập khẩu sẽ có sẵn bằng cách sử dụng tiền tố env, ví dụ ${env.HOME}.

Bước 3: Chuyển chúng sang PHPUnit.

Giả sử bạn đang sử dụng nhiệm vụ <exec> để chạy PHPUnit, bạn có thể chuyển từng biến cần thiết cho nó bằng cách sử dụng phần tử con <env>.

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

Lưu ý: Bạn có thể muốn thử chỉ là bước đầu tiên để xem nếu Ant sẽ vượt qua các biến môi trường cùng với tiến trình con thực hiện, nhưng tôi nghĩ rằng hai bước khác là tốt để làm cho nó rõ ràng là những gì cần thiết cho các nhà phát triển khác.

+0

Ok nó sẽ là tốt đẹp, nhờ – dextervip

+0

Tôi đã thêm mã tôi đang sử dụng trong thiết lập của mình. –

+0

Đó là những gì tôi đang tìm kiếm, Nó hoạt động tốt. Cảm ơn bạn. – dextervip

0

OK.

Dưới đây là những gì bạn làm ...

Đầu tiên, tạo một file mới có tên gọi bootstrap.php.

Tiếp theo, trong boostrap.php, đặt đoạn mã sau:

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

Nạp bootstrap.php vào TestSuite hoặc (thậm chí tốt hơn) phpunit.xml.

Cuối cùng, thông qua cấu hình xây dựng CI của bạn hoặc thông qua bảng điều khiển hoặc ở bất cứ đâu, thực hiện các kiểm tra đơn vị của bạn như phpunit UnitTest.php --environment dev.

Bạn nên đi.

+0

Xin lỗi tôi không biết nếu bạn hiểu tôi nhưng tôi đã có bootstrap.php và phpunit.xml, nowdays Nó hoạt động cục bộ trên cơ sở dữ liệu máy của tôi nhưng khi đi đến jenkins nó là một mật khẩu cơ sở dữ liệu khác. Tôi cần một giải pháp để thay đổi biến env trong cấu hình jenkins hoặc trong build.xml để không phá vỡ thử nghiệm cục bộ của tôi và sẽ hoạt động trên jenkins. – dextervip

+0

Ồ tôi xin lỗi. Tôi đang chỉnh sửa bài đăng của mình ngay bây giờ bằng giải pháp được cập nhật. –

+0

Nó sẽ là một giải pháp tuy nhiên trong trường hợp của tôi tôi đang chạy một trường hợp thử nghiệm bộ cấu hình bởi xml (phpunit - configuration ./tests/phpunit.xml). PHPUnit không chấp nhận nhận - môi trường nhưng dù sao cảm ơn :) – dextervip

Các vấn đề liên quan