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

Недавно я начал использовать Behat с Mink на PHP-проект, в котором используется микрофреймворк Slim. Мои тесты Behat работают нормально, но я хотел бы запустить их как часть моей сборки, в которой используется шаблон Jenkins-PHP Себастьяна Бергманна.

Я ожидаю, что для этого мне потребуется запустить веб-сервер для обслуживания приложения Slim. Очевидным ответом может быть встроенный веб-сервер PHP 5.4, но я ограничен PHP 5.3.

Единственная идея, которая у меня есть на данный момент, состоит в том, чтобы иметь фазу развертывания, на которой, если сборка Ant проходит успешно, Дженкинс развертывает рабочую область на сервере, а затем запускает тесты Behat для этого. Такое ощущение, что это потребует много работы и может быть нестабильным, плюс потребуется запустить еще одну виртуальную машину, чего я бы предпочел избежать. Мы хотим использовать Бехата в большом количестве разнообразных проектов, поэтому предпочтительнее было бы что-то «одноразовое».

Каков наилучший способ решения этой проблемы?


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


Ответы (4)


Решение, к которому мы пришли в конце концов, очень похоже на то, что предложил Якуб: наш экземпляр Jenkins генерирует файлы Apache vhost в 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