Вопрос по кешированию, собирается node js, в докерфайле есть строчка

начинающаяся с
RUN npm run build && ...
При сборке этот слой берется из кеша, несмотря на то что код поменялся и надо бы чтобы эта строчка отработала.. Куда копнуть?

14 ответов

22 просмотра

При изменении кода должны пересобираться инструкции ADD/COPY с соответствующими файлами + последующие стадии.

DVG_Lab- Автор вопроса
Aleksei Igrychev
При изменении кода должны пересобираться инструкци...

Ну да, а эта стадия почему-то берется из кеша. frontend/dockerfile Step 9/31 : RUN npm run build && rm -rf node_modules && NODE_ENV=production npm install ↵ frontend/dockerfile --production && node-prune frontend/dockerfile ---> Using cache frontend/dockerfile ---> ad16e168a166 Тут вероятно werf не видит что изменились файлики?

Aleksei Igrychev
При изменении кода должны пересобираться инструкци...

- Нет, аналога/поддержки secret сейчас нету И воркэраунда тоже никакого нет?

DVG_Lab- Автор вопроса
Aleksei Igrychev
При изменении кода должны пересобираться инструкци...

Вот полный код, что тут может быть не так? Там все стадии берутся из кеша.. FROM node:18.19.1-alpine3.18 as builder WORKDIR /tmp SHELL ["/bin/ash", "-eo", "pipefail", "-c"] RUN apk add --no-cache curl git && \ curl -#L https://github.com/tj/node-prune/releases/download/v1.0.1/node-prune_1.0.1_linux_amd64.tar.gz | tar -xvzf- && \ mv -v node-prune /usr/local/bin WORKDIR /web COPY frontend/package*.json ./ RUN npm config set registry https://nexus.k8s.domain.ru/repository/npm-proxy/ && npm i -g npm && npm i COPY frontend ./ RUN npm run build && \ rm -rf node_modules && \ NODE_ENV=production npm install \ --production && \ node-prune

DVG_Lab- Автор вопроса
Aleksei Igrychev
какие файлы изменились?

Вот эти два файла. frontend/components/index/MobileIndexSlider.vue frontend/components/product/ProductItemDesktop.vue Сам werf.yaml выглядит вот так project: frontend configVersion: 1 --- image: frontend {{ if eq $.Env "dev" }} dockerfile: .docker/Dockerfile-dev {{ else }} dockerfile: Dockerfile {{ end }} target: frontend --- image: nginxfrontend dockerfile: Dockerfile target: nginxfrontend

DVG_Lab
Вот эти два файла. frontend/components/index/Mobil...

В таком случае, вот эти две инструкции должны пересобраться: COPY frontend ./ RUN npm run build && \ rm -rf node_modules && \ NODE_ENV=production npm install \ --production && \ node-prune Если из кеша, то с наибольшей вероятностью слои были собраны ранее — проверьте файлы в образе, чтобы убедиться в этом.

DVG_Lab- Автор вопроса
Aleksei Igrychev
В таком случае, вот эти две инструкции должны пере...

Вот и я тоже так думаю должны были пересобраться.. предыдущие стадии пайплайна это sast/compliance и прочие тесты где сборка контейнера не предусматривается. Сами файлики во временной папке раннера проверил, они на месте в нужной версии. Попробую пока зачистить все промежуточные имеджи на раннере и в репо. Хотелось бы причину найти конечно..

DVG_Lab
Вот и я тоже так думаю должны были пересобраться.....

А вы проверяли сам образ, собранный на коммите?

DVG_Lab- Автор вопроса
Aleksei Igrychev
А вы проверяли сам образ, собранный на коммите?

Кстати интересно посмотреть в какой версии файлы на этом коммите, спасибо, гляну.

Aleksei Igrychev
какие файлы изменились?

- args или маунты с секретами args как раз попадают в открытом виде в образ. а что имеется в виду под маунты с секретами - как это сделать с werf?

Sergey
- args или маунты с секретами args как раз попада...

Это выглядит стрёмно, но работает — нет пересборок при изменении секрета и он не сохраняется в образе (надо следить, чтобы он не добавлялся в COPY/ADD ☝️) # werf.yaml project: test configVersion: 1 --- image: test dockerfile: Dockerfile contextAddFiles: - sourceme # werf-giterminism.yaml giterminismConfigVersion: 1 config: dockerfile: allowContextAddFiles: - sourceme FROM alpine RUN --mount=type=bind,source=sourceme,target=sourceme source sourceme; echo $SECRET # .gitignore sourceme echo "export SECRET=$(date)" > sourceme

Sergey
- args или маунты с секретами args как раз попада...

Для stapel образа есть директива mount.fromPath, с которой можно сделать аналогичным образом.

Похожие вопросы

Обсуждают сегодня

Всем привет. Подскажите. Следующая ошибка при выполнении команды werf ci-env github --as-file - "unable to get synchronization client id: unable to get repo ghcr.io/*** tags: ...
2
pika.exceptions.ChannelClosedByBroker: (406, "PRECONDITION_FAILED - inequivalent arg 'x-message-ttl' for queue 'amo-crm.q' in vhost '/': received the value '60000' of type 'si...
Sergey
9
Еще одну панику поймал: $ werf helm repo add --username gitlab --password ${CI_JOB_TOKEN} helm-werf ${HELM_REPO_V2_URL} "helm-werf" has been added to your repositories $wer...
citius
1
WERF_COMMIT_HASH если я правильно понимаю только внутри стапель сборки работает?
citius
2
Всем привет 👋 может кто подсказать? Как мне добавить файлик без коммита в сборку stapel? С докерфайлом понятно Там allowContextAddFiles А как тоже самое сделать со stapel?
Sergeevich
5
Вот такая неприятность на stable и ea версиях: werf helm --namespace s4c upgrade --install --atomic --timeout 5m --set s4c.version=839185f3 --set s4c.deployEnv=staging -f d...
citius
6
Всем привет! Прохожу этот самоучитель. Дошел до # Настроим подключение к MinIO. mc alias set minio http://minio:9000 minioadmin minioadmin # Получим содержимое сохранённого...
Aleksandr
7
Всем доброго времени суток! Перестал запускаться сервер RabbitMQ, вижу по логам, что ругается на плагин, но по какой причине не могу понять. Можете помочь разобраться, куда ко...
Александр Семенов
2
https://habr.com/ru/companies/domclick/articles/500978/ Добрый день, подскажите, пожалуйста, насколько хорошая практика сделать вот такую структуру эксчейнджей и очередей для...
Sergey
5
Блин а мне как поумнеть ?
Toxin
191
Карта сайта