GitLab CI - Minimum requirements for PHPUnit

CI/CD Sep 16, 2020

I do most of my coding in PHP. Always have, likely always will. Yes, I dabble in other technology, but I am getting to a point where I spend more time planning the structure of software and doing code reviews. Basically, I'm becoming a manager! But as I keep coding and come up with other projects to build, I inevitably come up against needing a new CI pipeline. This is so I can run the unit tests via PHPUnit.

Normally copy and paste comes in at this point, or looking at creating a template to include. My latest projects (more about that another time) saw me start by copying an existing template for the setup script.  The before_script section of the file looked like

before_script:
  - DEBIAN_FRONTEND=noninteractive apt update
  - DEBIAN_FRONTEND=noninteractive apt-get -y install zip unzip wget apache2 curl php7.4 libapache2-mod-php php7.4-mysql php7.4-dom php7.4-mbstring php7.4-zip php7.4-xdebug php7.4-curl mysql-client php7.4-redis php7.4-gd
  - curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

Great. It works, but there's a lot there which this project doesn't require. In fact, I figured I only needed PHP, Curl, and XDebug (for code coverage), so I chopped it down to:

before_script:
  - DEBIAN_FRONTEND=noninteractive apt update
  - DEBIAN_FRONTEND=noninteractive apt-get -y install curl php php-xdebug php-curl
  - curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

Simple. Everything was there to run. It worked on my machine (doesn't it always!), and I was ready for my first pipeline success...

GitLab output for a failed pipeline when stripping back the before_script part

Ok, not what I hoped for, but there we are. A little look at the error, and we've missed some of the extensions which are required by PHPUnit. I added those, and the updated YAML section became:

before_script:
  - DEBIAN_FRONTEND=noninteractive apt-get update
  - DEBIAN_FRONTEND=noninteractive apt-get -y install curl php php-xdebug php-curl php-dom php-json php-mbstring php-pdo
  - curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
GitLab output for failed pipeline following an update to the before_script

Gah! Not again! I was sure I was on to a winner that time, but thankfully the console output helps.

composer install console output, showing missing zip and unzip libraries

Following that message, I added zip, unzip, and php-zip to the install line, making the before_script become:

before_script:
  - DEBIAN_FRONTEND=noninteractive apt-get update
  - DEBIAN_FRONTEND=noninteractive apt-get -y install curl php php-xdebug php-curl php-dom php-json php-mbstring php-pdo zip unzip php-zip
  - curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

Once committed, the pipeline ran, with the following result:

The GitLab CI/CD pipeline success result after adding zip and unzip to the before_script

Success! There we have it, the minimum amount to install for PHPUnit to run a successful pipeline on GitLab is:

  • curl
  • php
  • php-xdebug (this is actually optional - but I needed it)
  • php-curl
  • php-dom
  • php-json
  • php-mbstring
  • php-pdo
  • zip
  • unzip
  • php-zip

Make sure they are part of your installation (either as part of a script, or as part of the docker image), and you should be able to get a successful pipeline running quickly and easily.

Tags

Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.