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

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

14 ответов

51 просмотр

При изменении кода должны пересобираться инструкции 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, с которой можно сделать аналогичным образом.

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

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

Всем привет. Понимаю, что, наверное, сто раз поднимали эту тему, но по ключевым словам не смог найти. Как передать в values.yaml зависимого хелм-чарта теги образов, собираемых...
Vitalik Petrov
4
@aigrychev, @ilya_lesikov добрый день! а поддерживает ли werf helm xxxx или werf bundle xxxx работу с сабчартами через http-прокси? (сработает ли использование HTTP_PROXY/HTTP...
Сергей Голод
4
Всем привет. Werf v2.10.5 При удалении релиза вместе с неймспейсом (werf dismiss --namespace namespace_name) Сыпятся ошибки ┌ Waiting for resources elimination: namespaces/rel...
Vitalik Petrov
1
Добрый день! Удалил все файлы с переменными из проекта, получил Error: release deploy: process resources: error validating adoptable resources: adoption validation failed: re...
Evgheni Mad
2
Привет! Вопрос про werf helm Приложение деплоится через werf helm upgrade --atomic Иногда(все условия для воспроизведения до конца непонятны, но есть версия, что это происходи...
𝓐𝓵͢͢͢𝓮𝔁 C
2
Всем привет. Сегодня добавили в приложение дополнительный образ nginx, в который докидывается системная статика прям в образ. При деплое бандлами деплоилось 200+ джоб(клиентов...
Владимир Муковоз
6
Добрый день, после перехода с версии 1.2 на 2.10 werf cleanup начал удалять использующиеся теги, и до и после обновления использовались дефолтные политики keepPolicies Подскаж...
Дмитрий
29
Блин а мне как поумнеть ?
Toxin
191
Друзья, добрый день. Прошу подсказать с базовым вопросом по использованию CI переменных gitlab в werf.yaml. Хочу в beforeInstall использовать env переменную с токеном. Мне нуж...
Anton Zol
10
Вопросик не совсем werf. Но вдруг мы подскажите воркэраунд или ещё что-нибудь. Могу ли я как-нибудь в моменте деплоя внутри heml рендера получить хэшсумму файла шаблона (./tem...
Alex Подрябинкин
11
Карта сайта