использование кэша nuget внутри docker сборки с ядром. net в автономном режиме - PullRequest
1 голос
/ 22 марта 2020

Находясь в новой области в зоне блокировки, я сейчас имею доступ только к тарифам на SIM-карты с завышенными ценами, и я ищу способ минимизировать пропускную способность.

У меня есть приложение, которое имеет обычный сборочный файл для сборки, но он будет go онлайн для восстановления пакетов каждый раз.

Я нахожусь на MacOS, и процесс сборки не должен быть переносимым.

Так как у меня есть локальный кеш пакетов nuget (~ / .nuget / packages), я хотел бы использовать это и повторно использовать эти файлы.

Во-первых, я хотел бы отметить, что при публикации sh из моего IDE и использование этого результата не подходит для этого проекта, мне действительно нужно собрать его из исходного кода.

Также ведутся многочисленные дискуссии как о прямой, так и частично связанной ситуации, и несколько сообщений в блоге, и ни одна из них, кажется, не придумать идеальное решение. Я сделал довольно обширный поиск. Если вы считаете, что это дубликат существующего сообщения с правильным решением, пожалуйста, внимательно посмотрите.

Вещи, на которые я смотрел:

  • Могу ли я подключить кэш .nuget в том и используйте его во время процесса сборки docker. Похоже, что нет, так как в docker build нет опции -v / --volume.
  • Можно ли установить локальный сервер nuget? единственное верное решение для MacOS, которое я нашел, - это BaGet, и, пытаясь заставить его работать, я заметил открытую заявку, в которой говорится, что зависимости пакета не извлекаются при использовании его в качестве кэша, поэтому это недопустимое решение.
  • Могу ли я восстановить все пакеты один раз в одном слое сборки docker. Возможно, но это сложно, потому что импортируется много подпроектов, и это означает, что пакеты будут регулярно реимпортироваться при изменениях.

В настоящее время я смотрю на:

  • сделать папку .nuget частью папки сборки с помощью символической ссылки
  • найти все файлы fsproj для включения и затем скопировать их в один слой docker build
  • сделать do tnet восстановить, используя символическую ссылку в качестве источника пакета
  • сделать сборку, в качестве следующего слоя

одна проблема заключается в том, что я не могу жестко закодировать зависимости fsproj и невозможно найти все файлы проекта внутри dockerfile. В одном сообщении в блоге предлагается предварительная обработка, в которой файлы найдены, помещены в архив и развернуты в докер-файле. проблема раньше? или придумали хорошее чистое решение?


edit:

docker не получит доступ к символическим ссылкам, указывающим вне каталога сборки

1 Ответ

1 голос
/ 30 марта 2020

Одно предложение, которое я должен изучить Docker BuildKit , если вы еще этого не сделали. BuildKit добавляет поддержку монтирования Dockerfile. Он поддерживает различные типы монтирований , один из которых представляет собой кеш , предназначенный для этого точного сценария - создания артефактов кеша, таких как пакеты NuGet.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...