начинающаяся с
RUN npm run build && ...
При сборке этот слой берется из кеша, несмотря на то что код поменялся и надо бы чтобы эта строчка отработала.. Куда копнуть?
При изменении кода должны пересобираться инструкции ADD/COPY с соответствующими файлами + последующие стадии.
Ну да, а эта стадия почему-то берется из кеша. 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 не видит что изменились файлики?
- Нет, аналога/поддержки secret сейчас нету И воркэраунда тоже никакого нет?
Вот полный код, что тут может быть не так? Там все стадии берутся из кеша.. 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
какие файлы изменились?
Вот эти два файла. 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
В таком случае, вот эти две инструкции должны пересобраться: COPY frontend ./ RUN npm run build && \ rm -rf node_modules && \ NODE_ENV=production npm install \ --production && \ node-prune Если из кеша, то с наибольшей вероятностью слои были собраны ранее — проверьте файлы в образе, чтобы убедиться в этом.
Вот и я тоже так думаю должны были пересобраться.. предыдущие стадии пайплайна это sast/compliance и прочие тесты где сборка контейнера не предусматривается. Сами файлики во временной папке раннера проверил, они на месте в нужной версии. Попробую пока зачистить все промежуточные имеджи на раннере и в репо. Хотелось бы причину найти конечно..
А вы проверяли сам образ, собранный на коммите?
Кстати интересно посмотреть в какой версии файлы на этом коммите, спасибо, гляну.
- args или маунты с секретами args как раз попадают в открытом виде в образ. а что имеется в виду под маунты с секретами - как это сделать с werf?
Это выглядит стрёмно, но работает — нет пересборок при изменении секрета и он не сохраняется в образе (надо следить, чтобы он не добавлялся в 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
Для stapel образа есть директива mount.fromPath, с которой можно сделать аналогичным образом.
Обсуждают сегодня