Behat with Jenkins - как да обслужваме PHP приложението?

Наскоро започнах да използвам Behat с Mink на PHP проект, който използва Slim microframework My Behat тестовете работят добре, но бих искал да ги стартирам като част от моята компилация, която използва шаблона Jenkins-PHP от Sebastian Bergmann.

За да направя това, очаквам, че ще трябва да стартирам уеб сървър, който да обслужва приложението Slim. Очевидният отговор изглежда е вграденият уеб сървър на PHP 5.4, но аз съм ограничен до PHP 5.3.

Единствената идея, която имам в момента, е да има фаза на разгръщане, при която, ако изграждането на Ant премине, Дженкинс разгръща работно пространство на сървър и след това изпълнява тестовете на Behat срещу него. Това изглежда като много работа и може да е нестабилно, плюс това ще изисква завъртане на друга виртуална машина, което бих предпочел да избегна. Търсим да наемем Бехат в голям брой разнообразни проекти, така че нещо „за еднократна употреба“ би било за предпочитане.

Какъв е най-добрият начин за решаване на този проблем?


person gavD_UK    schedule 06.08.2012    source източник


Отговори (4)


Решението, което избрахме в крайна сметка, е подобно на предложението на Jakub - нашият екземпляр на Jenkins генерира vhost файлове на Apache в conf.d за всяко работно пространство, което използва Behat, използвайки скрипт нещо като следното:

# Set up a host file entry if none exists
hostFileEntry="127.0.0.1 ${JOB_NAME}.loc"
if fgrep -i "$hostFileEntry" /etc/hosts
then
        echo "${hostFileEntry}" already in hosts file
else
        echo $hostFileEntry >> /etc/hosts
fi

# Set up a virtual host for this job
echo "<VirtualHost *:80>" > /etc/httpd/conf.d/${JOB_NAME}.conf
echo "    ServerName ${JOB_NAME}.loc" >> /etc/httpd/conf.d/${JOB_NAME}.conf
echo "    DocumentRoot ${WORKSPACE}/public" >> /etc/httpd/conf.d/${JOB_NAME}.conf
echo "        <Directory ${WORKSPACE}/public>" >> /etc/httpd/conf.d/${JOB_NAME}.conf
echo "            AllowOverride all" >> /etc/httpd/conf.d/${JOB_NAME}.conf
echo "            Order allow,deny" >> /etc/httpd/conf.d/${JOB_NAME}.conf
echo "            Allow from all" >> /etc/httpd/conf.d/${JOB_NAME}.conf
echo "        </Directory>" >> /etc/httpd/conf.d/${JOB_NAME}.conf
echo "</VirtualHost>" >> /etc/httpd/conf.d/${JOB_NAME}.conf

# Reload Apache
sudo /sbin/service httpd reload

След това изпълняваме Behat срещу тези работни пространства и извеждаме във формат JUnit, за да интегрираме резултатите с нашите компилации. Изискваше известна промяна на разрешенията, но това работи много добре за нас, толкова много благодаря за помощта ви :-)

person gavD_UK    schedule 22.08.2012
comment
Благодаря за това. Опитвам това решение, като предоставям пакет, който вгражда този скрипт. Не е абстрактно за всички сървърни дистрибуции, но идеята е тук. github.com/prestaconcept/meta-ci. - person DEY; 25.10.2013

Може да можете да използвате Rack на Ruby, за да обслужвате PHP: https://github.com/jimeh/php-rack

person ghr    schedule 07.08.2012

Друг вариант би бил прилагането на Slim framework драйвер за Mink (точно както Symfony има такъв). Няма да имате нужда от уеб сървър, за да изпълнявате вашите сценарии, стига да няма сценарии на javascript.

За сценарии с javascript просто инсталирах уеб сървър и php на моя екземпляр на jenkins. Виртуалният хост се създава като част от изграждането и сочи към работното пространство на jenkins.

person Jakub Zalas    schedule 07.08.2012

Можете да разположите скитнически сървър с php 5.3. Това е „още една виртуална машина“, но е невероятно за еднократна употреба.

person Patrick Cummins    schedule 26.06.2013