Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

GitlabCi slow build with docker and mysql service

I´m using gitlab-ci-multirunner 9.3.0 and the GitLab Community Edition 9.3.5

When i´m running my php-unit test on my local virtual box environment, the total test (30) just need about:

Time: 5 minutes, Memory: 96.00MB

Running the same tests on my gitlab host, it needs a total of

Time: 41.68 minutes, Memory: 97.75MB

The tests require mysql and do a database create and fixture load on each test.

My DockerFile:

FROM tetraweb/php:5.6

# Install additional packages
RUN apt-get clean && apt-get -qq update
RUN apt-get -qq upgrade -y
RUN apt-get install -qq -y apt-utils
RUN apt-get install -qq -y mysql-client libmagickwand-dev libgeoip-dev -y --no-install-recommends
RUN pecl install imagick apcu-4.0.11 geoip
RUN docker-php-ext-enable exif gd gettext intl mcrypt mysql mysqli opcache pdo_mysql zip memcache apcu imagick geoi

my gitlab-ci.yml:

variables:
  TIMEZONE: Europe/Berlin
  MYSQL_DATABASE: test
  MYSQL_ROOT_PASSWORD: test-root
  MYSQL_USER: test
  MYSQL_PASSWORD: asecurething
  SYMFONY_ENV: "test"

stages:
  - test
  - deploy

test:
  image: test-image-php:5.6
  services:
    - mariadb:latest
  stage: test
  only:
    - branches
  except:
    - master
  script:
      - export COMPOSER_CACHE_DIR=x/cache/composer
      - SYMFONY_ENV=test composer install --no-progress --no-interaction
      - chmod +x bin/console
      - php vendor/phpunit/phpunit/phpunit --coverage-text --colors=never

I really think thats the mysql service fault who creates the big difference. Whats the best way to increase the performance of my phpunit tests?

like image 871
develth Avatar asked Jul 13 '17 13:07

develth


Video Answer


1 Answers

I am using gitlab-ci 10.3.0 where my tests on the server took 40 minutes but on the Mac took 2 minutes. The server outspecs the Mac except for the hard disk where the Mac is using SSD.

Not sure if appropriate solution but I modified my runner configs to match the one in Docker Executor - Mounting a directory in RAM.

I have added the following in the config.toml:

[runners.docker]
# For the main container
[runners.docker.tmpfs]
    "/var/lib/mysql" = "rw,noexec"

# For services
[runners.docker.services_tmpfs]
    "/var/lib/mysql" = "rw,noexec"

I managed to reduce the build time to 2 minutes as well on the server.

like image 75
i906 Avatar answered Sep 23 '22 12:09

i906