Size: a a a

Node.js — русскоговорящее сообщество

2021 March 30

AS

Artem Soroka in Node.js — русскоговорящее сообщество
Andrey Kartashov
ну и node_modules в докер впихивать это пиздец, извините за выражение :)
А вы что тут пытались только что сделать?
источник

AK

Andrey Kartashov in Node.js — русскоговорящее сообщество
Artem Soroka
А вы что тут пытались только что сделать?
у воркеров монтируется хомяк, сам образ для CI разумеется содержит только инструменты сборки
источник

AK

Andrey Kartashov in Node.js — русскоговорящее сообщество
Ilya Sinkin
yarn pnp мб попробуете?
спс, помог ваш совет, прочитал про pnp и понял что можно использовать node_modules выше по файлухе
источник

AS

Artem Soroka in Node.js — русскоговорящее сообщество
Andrey Kartashov
у воркеров монтируется хомяк, сам образ для CI разумеется содержит только инструменты сборки
И как в итоге yml выглядит?
источник

AK

Andrey Kartashov in Node.js — русскоговорящее сообщество
Artem Soroka
И как в итоге yml выглядит?
скрипт сборки в смысле?
источник

AS

Artem Soroka in Node.js — русскоговорящее сообщество
Andrey Kartashov
скрипт сборки в смысле?
У вас ci на чём?
источник

AK

Andrey Kartashov in Node.js — русскоговорящее сообщество
Artem Soroka
У вас ci на чём?
buildkite. Но это неважно, могу логику рассказать
источник

AK

Andrey Kartashov in Node.js — русскоговорящее сообщество
* есть пул воркеров, которые используют один образ для CI, в котором есть собственно агент buildkite, git, node,yarn, gcc, etc..
* у каждого воркера свой персистентный volume который монтируется в $HOME
* логика сборки:
- делается git checkout куда-то в дебри $HOME, скажем $HOME/project - в чистую диру
- запускаются вышеуказанные пассы, которые позволяют использовать ссылку $HOME/project/.../ui/node_modules -> $HOME/node_modules
- запускается yarn install и yarn build которые используют $HOME/node_modules
источник

AK

Andrey Kartashov in Node.js — русскоговорящее сообщество
обычно я раньше использовал всякие плагины для кэширования node_modules по ключу от checksum yarn.lock - но в данном случае это не очень подошло
источник

AK

Andrey Kartashov in Node.js — русскоговорящее сообщество
очевидный минус - у каждого воркера свой "кэш". Но использование шаредного кэша, на котором хранились архивы с node_modules и другими промежуточными артефактами я уже пробовал (NFS/S3) - получалось сильно медленно из-за больших архивов с кучей мелких файлов
источник

AS

Artem Soroka in Node.js — русскоговорящее сообщество
Andrey Kartashov
* есть пул воркеров, которые используют один образ для CI, в котором есть собственно агент buildkite, git, node,yarn, gcc, etc..
* у каждого воркера свой персистентный volume который монтируется в $HOME
* логика сборки:
- делается git checkout куда-то в дебри $HOME, скажем $HOME/project - в чистую диру
- запускаются вышеуказанные пассы, которые позволяют использовать ссылку $HOME/project/.../ui/node_modules -> $HOME/node_modules
- запускается yarn install и yarn build которые используют $HOME/node_modules
В гитлаб примонтированные разделы ещё не завезли, но это решается созданием базовых образов, в которых home содержит зависимости проекта
источник

AK

Andrey Kartashov in Node.js — русскоговорящее сообщество
один из промежуточных архивов был размером в 1ГБ и 5ГБ после распаковки - его скачивание/распаковка/обновление занимало сравнимое с компиляцией время
источник

AK

Andrey Kartashov in Node.js — русскоговорящее сообщество
Artem Soroka
В гитлаб примонтированные разделы ещё не завезли, но это решается созданием базовых образов, в которых home содержит зависимости проекта
в образе нельзя хранить кэш сборки, потому что его надо обновлять
источник

AK

Andrey Kartashov in Node.js — русскоговорящее сообщество
ну и в образе совсем нет кода
источник

AK

Andrey Kartashov in Node.js — русскоговорящее сообщество
даже если было бы можно - вы думаете докер регистри будет эффективнее в хранении кэша, чем стоящий рядом NFS или S3?
источник

AK

Andrey Kartashov in Node.js — русскоговорящее сообщество
очень сильно сомневаюсь
источник

AS

Artem Soroka in Node.js — русскоговорящее сообщество
Andrey Kartashov
в образе нельзя хранить кэш сборки, потому что его надо обновлять
В образе не хранится результат сборки, только зависимости
источник

AK

Andrey Kartashov in Node.js — русскоговорящее сообщество
Artem Soroka
В образе не хранится результат сборки, только зависимости
эти зависимости меняются при изменении package.json/yarn.lock
источник

AS

Artem Soroka in Node.js — русскоговорящее сообщество
Andrey Kartashov
эти зависимости меняются при изменении package.json/yarn.lock
Да, я в курсе ) просто есть ci помимо buildkite
источник

AK

Andrey Kartashov in Node.js — русскоговорящее сообщество
это да :)
источник