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