Я довольно новичок в GitLab CI и пробовал разные подходы к использованию каталога node_modules
во всем моем конвейере.Из того, что я прочитал в официальных документах , кеш и артефакты кажутся подходящими подходами для передачи файлов между заданиями:
кеш используется для указания списка файлови каталоги, которые должны кэшироваться между заданиями.Вы можете использовать только пути, которые находятся в рабочей области проекта.
Однако моя проблема с методом кэширования заключается в том, что node_modules
будет сохраняться между конвейерами по умолчанию:
*Кэш 1013 * может быть установлен глобально и для каждого задания. из GitLab 9.0, кэширование включено и используется по умолчанию для конвейеров и заданий.
Iне хочу сохранять node_modules
между конвейерами.Что я на самом деле хочу, так это запустить новую установку с npm на моем этапе установки, а затем разрешить всем последующим работам в конвейере использовать эти модули.Поэтому я начал использовать артефакты вместо кэша, который описывается аналогично:
артефакты используются для указания списка файлов и каталогов, которые должны быть присоединены к заданию после успешного завершения.[...]
Артефакты будут отправлены в GitLab после успешного завершения задания и будут доступны для загрузки в пользовательском интерфейсе GitLab.Функция зависимости должна использоваться вместе с артефактами и позволяет вам определять артефакты для передачи между различными заданиями.
Метод зависимости от артефакта, кажется, пригоден для использования в моем случае.Однако и кеш, и артефакты крайне неэффективны и работают медленно.node_modules
установлены и используются, но весь каталог затем загружается куда-то и перезагружается между каждым заданием.(Мне бы очень хотелось узнать, что здесь происходит ... Куда идут модули?)
Есть ли лучший способ запустить npm install
только один раз в начале конвейера, а затем сохранить node_modules
в конвейере в течение всего времени выполнения?Я не хочу сохранять node_modules
после завершения всех заданий, поэтому их не нужно нигде загружать или скачивать.
Пример файла конфигурации конвейера для воспроизведения поведения:
image: node:lts
stages:
- setup
- build
- test
node:
stage: setup
script:
- npm install
artifacts:
paths:
- node_modules/
build:
stage: build
script:
- npm run build
dependencies:
- node
test:
stage: test
script:
- npm run lint
- npm run test
dependencies:
- node