如何通过缓存加速 Gitlab CI 配置?

joe*_*inz 4 laravel docker gitlab-ci

这是我第一次使用 gitlab CI,所以如果有一些关于配置的观察结果,很高兴听到它们

我在 gitalb 中有一个 Laravel 项目的 CI 管道配置,在其中,我只是使用 PHPUnit 运行测试套件:

image: php:7.2

cache:
  paths:
    - vendor/
    - node_modules/

before_script:
  - apt-get update -yqq
  - apt-get install git libzip-dev 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
  - docker-php-ext-install mbstring pdo_mysql curl json intl gd xml zip bz2 opcache bcmath
  - pecl install xdebug
  - docker-php-ext-enable xdebug
  - curl -sS https://getcomposer.org/installer | php
  - php composer.phar check-platform-reqs
  - php composer.phar install
  - cp .env.testing .env
  - php artisan key:generate
  - php artisan config:clear

test:
  script:
    - php vendor/bin/phpunit --coverage-text --colors=never

Run Code Online (Sandbox Code Playgroud)

当测试被触发时,持续时间为12 分 20 秒, 有没有办法使用缓存来加速工作?

Yz.*_*Yz. 7

构建您自己的 docker 镜像

在 GitLab CI 中,您可以定义cache:临时存储项目依赖项。在你的 ci.yml 中,你已经这样做了。项目管道的大部分运行时间都浪费在了apt-get install。由于缓存依赖项安装apt-get install会很复杂,因此构建您自己的包含apt-get用于测试的依赖项的 docker 映像会更好。

脚步

  1. 写一个dockerfile
  2. 构建,将你的 docker 镜像推送到某个地方
  3. 替换image: php:7.2ci.yml 中
  4. 提交、推送更改并在 GitLab 中运行管道

Dockerfile

FROM php:7.2

RUN set -eux; \
    apt-get update -yqq; \
    apt-get install git libzip-dev 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; \
    docker-php-ext-install mbstring pdo_mysql curl json intl gd xml zip bz2 opcache bcmath; \
    pecl install xdebug; \
    docker-php-ext-enable xdebug
Run Code Online (Sandbox Code Playgroud)

构建,将图像推送到某个地方

FROM php:7.2

RUN set -eux; \
    apt-get update -yqq; \
    apt-get install git libzip-dev 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; \
    docker-php-ext-install mbstring pdo_mysql curl json intl gd xml zip bz2 opcache bcmath; \
    pecl install xdebug; \
    docker-php-ext-enable xdebug
Run Code Online (Sandbox Code Playgroud)

更新.gitlab-ci.yml

image: registry.example.com/organization/image-name:tag-name

cache:
  paths:
    - vendor/
    - node_modules/

before_script:
  - curl -sS https://getcomposer.org/installer | php
  - php composer.phar check-platform-reqs
  - php composer.phar install
  - cp .env.testing .env
  - php artisan key:generate
  - php artisan config:clear

test:
  script:
    - php vendor/bin/phpunit --coverage-text --colors=never
Run Code Online (Sandbox Code Playgroud)

最后一步

现在,提交更改并推送到您的 GitLab 服务器。