Gitlab Ci使用docker和mysql服务进行缓慢构建

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Gitlab Ci使用docker和mysql服务进行缓慢构建相关的知识,希望对你有一定的参考价值。

我正在使用gitlab-ci-multirunner 9.3.0和GitLab Community Edition 9.3.5

当我在我的本地虚拟盒环境中运行我的php-unit测试时,总测试(30)只需要:

Time: 5 minutes, Memory: 96.00MB

在我的gitlab主机上运行相同的测试,它总共需要

Time: 41.68 minutes, Memory: 97.75MB

测试需要mysql并在每次测试时执行数据库创建和夹具加载。

我的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

我的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

我真的认为那是创造巨大差异的mysql服务错误。什么是提高我的phpunit测试性能的最佳方法?

答案

我正在使用gitlab-ci 10.3.0,我在服务器上的测试耗时40分钟,但在Mac上需要2分钟。服务器超出了Mac,除了Mac使用SSD的硬盘。

不确定是否有合适的解决方案,但我修改了我的跑步者配置以匹配Docker Executor - Mounting a directory in RAM中的那个。

我在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"

我设法在服务器上将构建时间减少到2分钟。

以上是关于Gitlab Ci使用docker和mysql服务进行缓慢构建的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Windows 服务器上使用 docker 为 gitlab-ci 运行构建

自托管gitlab CI / CD推送注册表到ECS服务

Gradle bootBuildImage 使用 docker:dind 服务在 GitLab CI/CD 中失败并显示“未找到摘要”

gitlab+gitlab-ci+docker自动化部署

Elasticsearch服务无法启动gitlab - docker容器已在使用中

使用 gitlab-ci.yml 的 Docker 内部的 Docker