GitLab: монтировать / встраивать образ сборки как tmpfs - PullRequest
0 голосов
/ 31 октября 2018

В нашей среде GitLab CI у нас есть сервер сборки с большим количеством оперативной памяти, но на механических дисках запуск npm установки занимает много времени (я добавил кэш, но ему все еще нужно просматривать существующие пакеты, чтобы кэш не мог решить все это в одиночку ).

Я хочу смонтировать / собрать образ установщика в виде tmpfs, но мне трудно разобраться, куда поместить эту конфигурацию. Могу ли я сделать это в образе самого сборщика или, может быть, в .gitlab-ci.yml для каждого проекта?

В настоящее время мой gitlab-ci.yml выглядит так:

image: docker:latest

services:
  - docker:dind

variables:
  DOCKER_DRIVER: overlay

cache:
  key: node_modules-${CI_COMMIT_REF_SLUG}
  paths:
    - node_modules/

stages:
  - test

test:
  image: docker-builder-javascript
  stage: test
  before_script:
    - npm install
  script:
    - npm test

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Я понял, что это можно решить, используя команду монтирования прямо в разделе before_script, хотя для этого нужно скопировать исходный код, мне удалось значительно сократить время тестирования.

image: docker:latest

services:
  - docker:dind

variables:
  DOCKER_DRIVER: overlay

stages:
  - test

test:
  image: docker-builder-javascript
  stage: test

  before_script:
    # Mount RAM filesystem to speed up build
    - mkdir /rambuild
    - mount -t tmpfs -o size=1G tmpfs /rambuild
    - rsync -r --filter=":- .gitignore" . /rambuild
    - cd /rambuild

    # Print Node.js npm versions
    - node --version
    - npm --version

    # Install dependencies
    - npm ci

  script:
    - npm test

Поскольку теперь я использую команду npm ci вместо npm install, я больше не использую кеш, поскольку он все равно очищает кеш при каждом запуске.

0 голосов
/ 31 октября 2018

Вы, вероятно, хотите, чтобы что-то подобное добавляло том данных на бегун:

volumes = ["/path/to/volume/in/container"]

https://docs.gitlab.com/runner/configuration/advanced-configuration.html#example-1-adding-a-data-volume

Я бы, вероятно, воспользовался вторым вариантом из этой статьи и добавил бы объем данных из контейнера хоста на случай, если ваш кэш по какой-то причине поврежден, поскольку его будет легче очистить.

volumes = ["/path/to/bind/from/host:/path/to/bind/in/container:rw"]

Я уже делал это для кэша композитора, и он работает очень хорошо. Вы должны иметь возможность установить кэш для вашего npm, используя следующую переменную окружения в вашем .gitlab-ci.yaml:

npm_config_cache=/path/to/cache

Другой вариант - использовать артефакты между сборками, как показано здесь: Как мне смонтировать том в док-контейнере в .gitlab-ci.yml?

...