Добрый день. Обнаружил поведение которое кажется неожидаемым. Что делаю: собираю образ из

огромных бинарных проприетарных блобов (их нельзя скачать с первоисточника без авторизации прямо из стадий). Блобы предварительно положил в докер образ и запушил в регистри (артифакт blobs). В результирующем образе (test) категорически не хочется иметь исходные файлы (/blobs) из которых собирался образ, это увеличивает его в 2 раза, он уже очень тяжелый (это unit и e2e тесты 1с в k8s). Поэтому пытаюсь воспользоваться монтированием tmp_dir куда планирую положить временно (на момент инсталяции) блобы.
werf.yaml:
configVersion: 1
project: 1c
---
artifact: blobs
from: alpine:3.16
shell:
beforeInstall:
- mkdir /blobs
- dd if=/dev/random of=/blobs/blob bs=1M count=1
---
image: test
from: alpine:3.16
mount:
- from: tmp_dir
to: /blobs
import:
- artifact: blobs
before: install
add: /blobs
to: /blobs
shell:
install:
- ls -la /blobs
- touch /blobs/install
- ls -la /blobs
beforeSetup:
- ls -la /blobs
- cat /blobs/blob
Вывод werf build:
│ ┌ Building stage test/dependenciesBeforeInstall
│ │ ┌ Store stage into localhost:5000/test
│ │ └ Store stage into localhost:5000/test (0.03 seconds)
│ ├ Info
│ │ name: localhost:5000/test:69ded77eb1377719b6a0989494a3b320202fe78ce2b789d209ee794f-1655360306666
│ │ id: aa90a4623331
│ │ created: 2022-06-16 13:18:26 +0700 +07
│ │ size: 3.7 MiB (+1.0 MiB)
│ └ Building stage test/dependenciesBeforeInstall (0.59 seconds)

│ ┌ Building stage test/install
│ │ test/install total 4
│ │ test/install drwxr-xr-x 2 1000 1000 40 Jun 16 06:18 .
│ │ test/install drwxr-xr-x 1 root root 4096 Jun 16 06:18 ..
│ │ test/install total 4
│ │ test/install drwxr-xr-x 2 1000 1000 60 Jun 16 06:18 .
│ │ test/install drwxr-xr-x 1 root root 4096 Jun 16 06:18 ..
│ │ test/install -rw-r--r-- 1 root root 0 Jun 16 06:18 install
│ │ ┌ Store stage into localhost:5000/test
│ │ └ Store stage into localhost:5000/test (0.03 seconds)
│ ├ Info
│ │ name: localhost:5000/test:226ae218845c86296840c08bb2d6b3b4a66531f09df6aa91403a04c3-1655360307222
│ │ id: 8a61f52e0ab3
│ │ created: 2022-06-16 13:18:27 +0700 +07
│ │ size: 3.7 MiB (+0 B)
│ └ Building stage test/install (0.57 seconds)

│ ┌ Building stage test/beforeSetup
│ │ test/beforeSetup total 4
│ │ test/beforeSetup drwxr-xr-x 2 1000 1000 60 Jun 16 06:18 .
│ │ test/beforeSetup drwxr-xr-x 1 root root 4096 Jun 16 06:18 ..
│ │ test/beforeSetup -rw-r--r-- 1 root root 0 Jun 16 06:18 install
│ │ test/beforeSetup cat: can't open '/blobs/blob': No such file or directory
│ ├ Info
│ └ Building stage test/beforeSetup (0.26 seconds) FAILED
└ ⛵️ image test (2.75 seconds) FAILED
dependenciesBeforeInstall - уже выглядит странно, +1MB. Если запустить образ стадии (id=aa90a4623331) и посмотреть что там внутри: в /blobs лежит файл blob размером 1MB перенесенный из артифакта выше. Т.е. на этой стадии tmp_dir не монтировалась и файлы попали в слой.
install - как видно файла /blobs/blob нет, вероятно поверх него смонтировался tmp_dir.
beforeSetup - файла все так же нет, а вот тестовый файл install успешно перемещается между стадиями сборки по tmp_dir.

Вопросы:
1) Это запланированное поведение? Копировать артифакты игнорируя настройки tmp_dir?
2) Можно ли еще как-то решить задачу установки софта лежащего в докер образе, так чтобы не копировать файлы в собираемый образ (и их не было бы в результирующем образе и его промежуточных слоях)? Монтировать чегото с хоста - это все понятно, это такое себе решение.

1 ответов

8 просмотров
Eugene-Shutov Автор вопроса

Удалось сделать workaround посредством интеграции тулзы crane в stapel и скачивания блобов из самой стадии, когда tmp_dir монтируется корректно. Может быть существует какие-то более красивое решение? Скажите это всеже баг или не баг? Может быть стоит его гдето зарепортить, чтобы как минимум не потерялся?

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

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

Всем здравствуйте!) У меня такой вопрос. Есть два роута, роут1 и роут2. Они связаны с очередью some_queue. По задаче предполагается, что есть два паблиша. Паблиш1 отправляет...
Format
10
А если для werf организовать отдельный репозиторий, а сервисы из проекта подключить как симлинки? И симлинки в гитигнор добавить?
Dmitriy Andreev
13
Ребят, всем привет. Недавно начал знакомиться с werf с целью автоматизировать сборку локальных dev стендов. Прошел гайд, почитал статьи на хабре. Появилось некоторое понимание...
Dmitriy Andreev
6
Всем привет! Хочу скрестить ужа с ежом, но не могу понять как лучше реализовать. Подскажите, пожалуйста. У меня есть кастомный оператор для бандлов werf. Он худо-бедно свою з...
სერგეი ქრისტოვი
6
всем привет, подскажите, может есть способ срендерить чарт с помощью werf, указав при этом реджистри, в который нет доступа? дело в том, что по политике безопасности мне нужно...
Alexandr Alexandr
4
всем привет, не работал с buildah, подскажите что нужно сделать чтобы включить staged: true для докерфайла? Сейчас получаю ошибку: Staged build of Dockerfile is not available ...
Alexandr Alexandr
5
Всем привет!Пытаюсь поставить плагин rabbitmq-delayed-message-exchange:latest Ошибка: Feature flags: stream_single_active_consumer: required feature flag not enabled! It must...
Nex1n [CHECK_BIO]
2
Блин а мне как поумнеть ?
Toxin
191
Еще одну панику поймал: $ 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
Вот такая неприятность на stable и ea версиях: werf helm --namespace s4c upgrade --install --atomic --timeout 5m --set s4c.version=839185f3 --set s4c.deployEnv=staging -f d...
citius
6
Карта сайта