огромных бинарных проприетарных блобов (их нельзя скачать с первоисточника без авторизации прямо из стадий). Блобы предварительно положил в докер образ и запушил в регистри (артифакт 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) Можно ли еще как-то решить задачу установки софта лежащего в докер образе, так чтобы не копировать файлы в собираемый образ (и их не было бы в результирующем образе и его промежуточных слоях)? Монтировать чегото с хоста - это все понятно, это такое себе решение.
Удалось сделать workaround посредством интеграции тулзы crane в stapel и скачивания блобов из самой стадии, когда tmp_dir монтируется корректно. Может быть существует какие-то более красивое решение? Скажите это всеже баг или не баг? Может быть стоит его гдето зарепортить, чтобы как минимум не потерялся?
Обсуждают сегодня