Docker – Как Кэшировать Сторонние Ресурсы В Конвейере Сборки?

  • Автор темы I AM
  • Обновлено
  • 22, Oct 2024
  • #1

Часто требуется доступ к сторонним ресурсам, помимо исходного кода артефактов, которые он предназначен для создания. Каждый из этих сторонних ресурсов привносит в сборки фактор риска, например:

  • Репозитории дистрибутива временно недоступны, поэтому установка дистрибутива временно невозможна.

  • Репозитории дистрибутива постоянно недоступны, такие же и даже хуже, чем раньше.

  • Некоторые пакеты бесплатного программного обеспечения NPM перестают существовать, поскольку их автор потребовал отзыва.

  • Некоторые исходные файлы или специальные двоичные пакеты для сторонних инструментов больше недоступны.

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

Как лучше всего охватить два следующих случая при построении докер изображения:

  1. Кэширование файлов, загруженных с помощью завиток или wget.
  2. Кэширование пакетов Debian.

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

(В этом вопросе я бы рассматривал совместное использование кеша между несколькими единицами конвейера сборки как вопрос второстепенного значения.)

#build-pipeline #docker #build-pipeline

I AM


Рег
23 Jul, 2011

Тем
403760

Постов
400028

Баллов
2418908
  • 25, Oct 2024
  • #2

Я не слишком хорошо знаком с Docker, но это очень похоже на проблемы, которые могут возникнуть при создании обычного .NET-приложения или Java-приложения с необходимостью хранить их внешние зависимости (DLL или jar).

Чтобы решить эту проблему, я очень люблю артефакты. Двумя наиболее популярными являются сонатипы. Нексус и JFrog's Артефабрика. Оба предлагают бесплатную версию с открытым исходным кодом, и оба будут иметь возможность хранить настроенный пакет или использовать его в качестве исходного хранилища. Есть и другие варианты, я просто перечислил эти два, потому что уже работал с ними и знаю, что они сделают то, что вам нужно. В качестве бонуса вы также можете использовать их для непосредственного управления образом докера.

Есть и другие, о которых стоит упомянуть, вы можете найти сравнительная таблица для них вы получите лучшее представление об их возможностях. (спасибо Карлу Харнаги за ссылку)

Обратите внимание, что для некоторых из этих опций может потребоваться та или иная платная версия YMMV.

Некоторые системы непрерывной интеграции также поддерживают концепцию артефактов (по опыту Дженкинса и Team-City, хотя и другие тоже могут это делать), что должно позволить вам напрямую достигать аналогичных результатов.

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

Надеюсь, это поможет

 

Puwok


Рег
24 Sep, 2016

Тем
76

Постов
194

Баллов
614
  • 25, Oct 2024
  • #3

Похоже, вы ищете не столько кэширование, сколько зеркалирование. Поскольку ваши требования связаны с постоянно недоступными пакетами, вам необходимо самостоятельно сохранять пакеты в чем-то более постоянном, чем кэш. Раньше мы хранили посылки в постоянных облачных хранилищах, таких как S3. Однако ничто не мешает вам настроить собственное хранилище файлов на сервере сборки.

Говоря конкретнее, вероятно, проще всего настроить прокси-службу, которая ищет ресурс в вашем файловом хранилище (S3) и возвращает пакет, если он найден. В противном случае он просто запросит ресурс из восходящего потока, заполнит ваше хранилище файлов и вернет пакет.

 

Zzzzzzzzzzzzzzz


Рег
06 Apr, 2011

Тем
60

Постов
191

Баллов
511
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно