All the php projects I work on, have tests. For some projects, we use PHPUnit as testing framework, but for more recent projects, I prefer to use Codeception, because it has an elegant way to write acceptance tests. We also use gitlab for our projects, and by adding a nifty
.gitlab-ci.yml file to our source code, we made gitlab run our test suite every time new commits are pushed to the repository.
In a first attempt, I tried to start all the containers needed for our application, running
docker-compose up from the ci like we do it for local development. This worked sometimes, but after a couple of builds the docker networks used by our gitlab runners got completely messed up, which was hard to fix.
In a second attempt, I tried to use Gitlab CI Services for all the containers in our
docker-compose.yml file. I gave up before I completely configured that, because I noticed the networking problems wouldn't go away.
After days of swearing, I finally got it running. I think the networking problems were caused by the nginx-container I tried to use for the web tests. But actually I didn't need a container for nginx. It turned out I could just juse the php built-in development server to run the tests.
So I ended up by adding a service for selenium with chrome and a service for mysql (the project I was trying this on, didn't really need other services), and I just added a
php -S statement to the script that ran the tests, and that was all.
I created a small demo project on gitlab that runs a couple of browser tests from the gitlab runners, for a small vue.js application with codeception. You can find the source code on gitlab: https://gitlab.com/johanv/codeception-ci-demo.