2012-08-06 15 views
5

Ho recentemente iniziato a utilizzare Behat con Mink su un progetto PHP che utilizza i microfilmmi Slim. I test My Behat funzionano bene, ma mi piacerebbe eseguirli come parte della mia build, che utilizza il modello Jenkins-PHP di Sebastian Bergmann.Behat with Jenkins: come servire l'app PHP?

Per fare ciò, mi aspetto che sia necessario eseguire un server Web per servire l'app Slim. La risposta ovvia sembrerebbe essere il web server di PHP 5.4, ma sono limitato a PHP 5.3.

L'unica idea che ho al momento è di avere una fase di distribuzione in cui, se passa la generazione di Ant, Jenkins distribuisce uno spazio di lavoro su un server e poi esegue i test Behat contro quello. Sembra che ci sia molto lavoro e potrebbe essere traballante, in più richiederebbe la rotazione di un'altra VM, che preferirei evitare. Stiamo cercando di impiegare Behat in un gran numero di progetti diversi, quindi sarebbe preferibile qualcosa di "usa e getta".

Qual è il modo migliore per risolvere questo problema?

risposta

7

La soluzione siamo andati con, alla fine, è molto simile a Jakub suggerito - il nostro esempio Jenkins genera file Apache vhost in conf.d per ogni area di lavoro che utilizza Behat, utilizzando un qualcosa di script come il seguente:

# 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 

Quindi eseguiamo Behat contro questi spazi di lavoro e produciamo in formato JUnit per integrare i risultati con le nostre build. Ha richiesto qualche ritocco delle autorizzazioni, ma questo funziona molto bene per noi, così tante grazie per il tuo aiuto :-)

+0

Grazie per quello. Sto provando questa soluzione fornendo un pacchetto che incorpori questo script. Non è astratto per tutte le distro server, ma l'idea è qui. https://github.com/prestaconcept/meta-ci. – DEY

1

Un'altra opzione sarebbe quella attuando conducente quadro Slim per Mink (proprio come Symfony ha uno). Non avresti bisogno di un server web per eseguire i tuoi scenari finché non ci sono scenari javascript.

Per gli scenari javascript ho semplicemente installato web server e php sulla mia istanza di jenkins. L'host virtuale viene creato come parte della build e punta allo spazio di lavoro di jenkins.

+0

Grazie, entrambi sono ottimi suggerimenti –

0

È possibile distribuire un server vagabondo con php 5.3. È "un'altra VM" ma è incredibilmente usa e getta.