У меня есть монорепо в gitlab с angular интерфейсом и гнездом js. У меня есть пакет. json для каждого из них и 1 в root. Мой конвейер состоит из нескольких этапов, подобных этим:
stages:
- build
- verify
- test
- deploy
И у меня есть работа на этапе .pre
, которая устанавливает зависимости. Я хотел бы кэшировать их между заданиями, а также между ветвями, если какой-либо из package-lock.json
изменился, но также, если в настоящее время нет кэшированных node_modules
. У меня есть задание, которое выглядит следующим образом:
prepare:
stage: .pre
script:
- npm run ci-deps # runs npm ci in each folder
cache:
key: $CI_PROJECT_ID
paths:
- node_modules/
- frontend/node_modules/
- backend/node_modules/
only:
changes:
- '**/package-lock.json'
Теперь проблема в том, что если кэш был каким-то образом очищен или я не внес изменения в package-lock.json
с первым пу sh, я выиграл ' эта работа вообще не выполняется и, следовательно, все остальное не будет выполнено, потому что для этого требуется node_modules
. Если я удалю changes:
оттуда, то он запускает работу для каждого конвейера. Конечно, тогда я все еще могу поделиться им между заданиями, но если я сделаю еще один коммит и pu sh, то для установки всех зависимостей потребуется почти 2 минуты, даже если я ничего не изменил в отношении того, что должно быть там ... что-то упустил? Как я могу кэшировать его таким образом, чтобы он только переустанавливал зависимости, если кеш устарел или не существует?