Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

hofmannsven's avatar

GitLab has a public repository on GitHub with a default setup for the .gitlab-ci.yml file for Laravel applications which works out of the box:

https://github.com/gitlabhq/gitlabhq/blob/master/vendor/gitlab-ci-yml/Laravel.gitlab-ci.yml

# Official framework image. Look for the different tagged releases at:
# https://hub.docker.com/r/library/php
image: php:latest

services:
  - mysql:latest

variables:
  MYSQL_DATABASE: project_name
  MYSQL_ROOT_PASSWORD: secret

# This folder is cached between builds.
# http://docs.gitlab.com/ce/ci/yaml/README.html#cache
cache:
  paths:
  - vendor/
  - node_modules/

# This is a basic example for a gem or script which doesn't use
# services such as redis or postgres.
before_script:
  # Update packages.
  - apt-get update -yqq
  
  # Install dependencies.
  - apt-get install git nodejs libcurl4-gnutls-dev libicu-dev libmcrypt-dev libvpx-dev libjpeg-dev libpng-dev libxpm-dev zlib1g-dev libfreetype6-dev libxml2-dev libexpat1-dev libbz2-dev libgmp3-dev libldap2-dev unixodbc-dev libpq-dev libsqlite3-dev libaspell-dev libsnmp-dev libpcre3-dev libtidy-dev -yqq

  # Install php extensions.
  - docker-php-ext-install mbstring pdo_mysql curl json intl gd xml zip bz2 opcache

  # Install & enable Xdebug for code coverage reports.
  - pecl install xdebug
  - docker-php-ext-enable xdebug

  # Install Composer and project dependencies.
  - curl -sS https://getcomposer.org/installer | php
  - php composer.phar install

  # Copy over testing configuration.
  # Don't forget to set the database config in .env.testing correctly.
  - cp .env.testing .env

  # Generate an application key. Re-cache.
  - php artisan key:generate
  - php artisan config:cache

  # Run database migrations.
  - php artisan migrate

  # Run database seed.
  - php artisan db:seed

test:
  script:
  # Run laravel tests.
  - php vendor/bin/phpunit --coverage-text --colors=never 
2 likes
geneowak's avatar

@MYTHOS33 - I had the same issue and the solution here worked for me. It's gitlab's documentation on how to do CI/CD for Laravel. I found using docker image registry (the method used in that documentation much convenient) It was written for Laravel 5.4 so you'll find some issues while trying to install mcrypt, with the docker-php-ext-install mcrypt command, if you want to use PHP7.1.* and above (as was the case with me being that I am using Laravel 5.7) as it was removed. Fortunately mcrypt can still be installed using PECL

After some digging, i managed to create a docker file that worked for me: See below

# Set the base image for subsequent instructions
FROM php:7.2

# Update packages
RUN apt-get update

# Install PHP and composer dependencies
RUN apt-get install -qq git curl libmcrypt-dev libjpeg-dev libpng-dev libfreetype6-dev libbz2-dev libmcrypt-dev libpq-dev

# Clear out the local repository of retrieved package files
RUN apt-get clean

# Install and enable mcrypt extension
RUN pecl install mcrypt-1.0.1
RUN docker-php-ext-enable mcrypt

# Install needed extensions
# Here you can install any other extension that you need during the test and deployment process
# RUN docker-php-ext-install mcrypt pdo pdo_mysql zip
RUN docker-php-ext-install pdo pdo_pgsql zip

# Install Composer
RUN curl --silent --show-error https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

# Install Laravel Envoy
RUN composer global require "laravel/envoy=~1.0"

I am using postgres as my db so my .gitlab-ci.yml file looks like this on the part of services

...

services:
    - postgres:latest

variables:
  POSTGRES_DB: test_db
  POSTGRES_USER: postgres
  POSTGRES_PASSWORD: "secret"
  DB_HOST: postgres
  DB_USERNAME: postgres

...

the rest is as described in the documentation I shared above.

Hope it helps.

Previous

Please or to participate in this conversation.