和Jenkins一起玩 - 如何提供PHP应用程序?

gav*_*_UK 5 php continuous-integration jenkins behat mink

我最近开始在一个使用Slim微框架My Behat测试工作正常的PHP项目中使用BehatMink,但我想将它们作为我的构建的一部分运行,它使用Sebastian Bergmann的Jenkins-PHP模板.

为此,我希望我需要运行一个Web服务器来提供Slim应用程序.显而易见的答案似乎是PHP 5.4内置的Web服务器,但我仅限于PHP 5.3.

我目前唯一的想法就是有一个部署阶段,如果Ant构建通过,Jenkins会在服务器上部署一个工作区,然后针对它运行Behat测试.这感觉就像它需要做很多工作而且可能是片状的,而且还需要启动另一个VM,我宁愿避免.我们希望在大量不同的项目中使用Behat,因此"一次性"更适合.

解决这个问题的最佳方法是什么?

gav*_*_UK 8

我们最终使用的解决方案与Jakub建议的非常相似 - 我们的Jenkins实例在conf.d中为每个使用Behat的工作区生成Apache vhost文件,使用类似如下的脚本:

# 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
Run Code Online (Sandbox Code Playgroud)

然后,我们针对这些工作空间运行Behat并以JUnit格式输出,以将结果与我们的构建集成.它需要一些权限的调整,但这对我们来说非常好,非常感谢你的帮助:-)