2012-08-06 7 views
5

Ich habe vor kurzem begonnen, Behat mit Mink auf ein PHP-Projekt zu verwenden, das die Slim microframework My Behat Tests funktioniert gut, aber ich möchte sie als Teil meiner Build ausführen, die die Jenkins-PHP-Vorlage von Sebastian Bergmann verwendet.Behat mit Jenkins - wie PHP-App zu bedienen?

Um dies zu tun, erwarte ich, dass ich einen Webserver ausführen müsste, um die Slim-App zu bedienen. Die offensichtliche Antwort scheint der eingebaute Webserver von PHP 5.4 zu sein, aber ich bin auf PHP 5.3 beschränkt.

Die einzige Idee, die ich im Moment habe, ist eine Bereitstellungsphase, bei der Jenkins einen Arbeitsbereich auf einem Server bereitstellt und dann die Behat-Tests dagegen ausführt. Das fühlt sich an, als wäre es eine Menge Arbeit und könnte flockig sein, außerdem würde es eine weitere VM erfordern, die ich lieber vermeiden würde. Wir wollen Behat in einer Vielzahl von Projekten einsetzen, daher ist etwas "Wegwerfbares" vorzuziehen.

Was ist der beste Weg, um dieses Problem zu lösen?

Antwort

7

Die Lösung, die wir mit am Ende gingen ist ähnlich wie Jakub vorgeschlagen - unsere Jenkins Instanz Apache vhost Dateien in conf.d für jeden Arbeitsbereich erzeugt, die Behat verwendet, ein Skript in etwa wie folgt verwendet:

# 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 

Dann führen wir Behat gegen diese Arbeitsbereiche aus und geben sie im JUnit-Format aus, um die Ergebnisse in unsere Builds zu integrieren. Es erforderte einige Feinabstimmungen der Berechtigungen, aber das funktioniert sehr gut für uns, also vielen Dank für Ihre Hilfe :-)

+0

Danke dafür. Ich versuche diese Lösung, indem ich ein Paket zur Verfügung stelle, das dieses Skript einbettet. Es ist nicht abstrakt für alle Server-Distributionen, aber die Idee ist hier. https://github.com/prestaconcept/meta-ci. – DEY

1

Eine weitere Option Schlanke Rahmen Treiber für Mink würde implementieren (wie Symfony man hat). Sie benötigen keinen Webserver, um Ihre Szenarien auszuführen, solange es keine JavaScript-Szenarien gibt.

Für Javascript-Szenarien habe ich einfach Webserver und PHP auf meiner Jenkins-Instanz installiert. Der virtuelle Host wird als Teil des Builds erstellt und verweist auf den Arbeitsbereich von jenkins.

+0

Danke, beide sind ausgezeichnete Vorschläge –

0

Sie könnten einen vagrant Server mit php 5.3 bereitstellen. Es ist "eine andere VM", aber es ist unglaublich verfügbar.