Многочисленные санкционные ограничения могут стать преградой для использования существующих систем управления бинарными репозиториями, например, при приобретении необходимых лицензий. Таким образом, альтернатива существующим инструментам может сыграть положительную роль при организации работы с артефактами организации. Artipie - это бесплатный менеджер бинарных репозиториев с открытым исходным кодом, поддерживающий все основные форматы пакетов и артефактов, который позволяет размещать их локально или в облачном хранилище. Менеджер бинарных репозиториев (МБР) - это программный инструмент предназначенный для оптимизации загрузки, выгрузки и хранения файлов в бинарном формате, используемых и производимых в контексте разработки программного обеспечения (ПО). Являясь одним из ключевых компонентов DevOps инструментов, МБР расположен сразу после конвейера сборки. Именно поэтому его иногда называют “хранилищем сборок”, “хранилищем артефактов” или “хранилищем состояния конвейера”.   Традиционный конвейер DevOps ожидает исходный код, который автоматически проверяется, тестируется, упаковывается и версионируется в артефакт (бинарный файл), такой как .jar, .tar, .zip или другие форматы. Затем артефакт, как правило, хранится вне репозитория исходного кода и должен быть доступным для последующих этапов конвейера непрерывной доставки (Continuous Delivery). Будучи центральной точкой для управления двоичными файлами и их зависимостями, а также интегрированным хранилищем для сборок программного обеспечения, разработанного внутри компании, предполагается, что МБР будет размещать эти артефакты. Программный проект практически любого размера должен хранить свои бинарные артефакты в репозитории, чтобы обеспечить доступ к ним программистов или инструментов, обеспечивающих непрерывную интеграцию (Continuous Integration), доставку (Continuous Delivery) и развертывание (Continuous Deployment). Поскольку качество программного обеспечения, управляющего репозиториями, оказывает существенное влияние на работу команд разработчиков, МБР должен отвечать таким требованиям, как: Интегрируемость - существует множество инструментов автоматизации сборки для каждого языка программирования, например, Maven для Java, Npm для JavaScript или Rake для Ruby. Существует также множество инструментов непрерывной интеграции, таких как Jenkins, CircleCI или Travis. Поскольку автоматизация является наиболее важным аспектом DevOps, ожидается, что для каждого или большинства из них будут установлены плагины, обеспечивающие бесшовную интеграцию с МБР. Доступность - артефакты являются важными компонентами процесса разработки программного обеспечения, и они должны быть доступны программисту или инструменту сборки немедленно, когда это необходимо, без даже незначительных задержек, и поставляться с максимально возможной скоростью. Масштабируемость - большинство артефактов сборки представляют собой большие двоичные файлы; размер некоторых из них может превышать 1 Гб, например, образы Docker или .war (полное веб-приложение для Java). МБР должен быть способен поддерживать большие наборы данных, вплоть до практически полного отсутствия ограничений по размеру. Надежность - возможность повреждения данных из-за программных или аппаратных сбоев должна быть исключена настолько, насколько это возможно. Artipie - это бесплатный инструмент для управления артефактами. Это не просто сервис, это конструктор, который включает в себя множество компонентов для обеспечения поддержки практически всех широко используемых форматов пакетов, таких как: Maven, Docker, Debian, NPM, Go, Helm, Ruby, Python, Anaconda, HexPm, Composer. Artipie позволяет использовать различные варианты хранения данных, такие как: файловое хранилище, S3-совместимое облачное хранилище, Redis хранилище, а также предоставляет интерфейс для использования хранилища, реализуемого пользователем. Кроме того, существует функционал, позволяющий управлять доступом пользователей и при настройке с использованием организаций - групп пользователей. Artipie это проект с открытым исходным кодом, который стартовал в 2020 году и активно развивается в настоящее время. Все его компоненты основаны на принципах реактивности, асинхронного взаимодействия и неблокирующих потоках. Архитектура Artipie состоит из 3 основных частей: HTTP-движок Artipie Адаптеры репозиториев Хранилища HTTP-движок Artipie - это Java-приложение, которое предоставляет API для операций операций доступа к репозиторию и управления им. Он маршрутизирует запросы к адаптеру репозитория  и обеспечивает механизмы аутентификации и авторизации. HTTP-движок Artipie построен на базе фреймворков Vert.x и RxJava, что обеспечивает легкость, гибкость и масштабируемость проекта за счет асинхронных, реактивных и неблокирующих операций. Наиболее распространенный поток действий для операции загрузки данных в Artipie выглядит следующим образом: клиент отправляет некоторый бинарный артефакт на сервер, который находит ответственный адаптер репозитория для обработки запроса; адаптер репозитория сохраняет данные в хранилище; после завершения он обновляет метаданные репозитория (некоторые репозитории работают иначе, например, Docker использует метаданные как путь). Адаптеры репозиториев Адаптеры репозиториев - это независимые проекты, направленные на реализацию API для взаимодействия с клиентом репозитория и слоями генерации метаинформации для конкретного типа пакета (npm, maven, hexpm и т.д.). HTTP-движок Artipie использует адаптеры для обеспечения функциональности МБР. Каждый адаптер репозитория инкапсулирует API для доступа к бинарным данным и файлам метаданных. Artipie поддерживает следующие типы репозиториев: Docker - приватный реестр для Docker образов. Maven - репозиторий для Java, Kotlin, Groovy, Scala и Clojure артефактов и зависимостей различных типов, таких как: .jar, .war, .klib и т.д. NPM - хранилище для доступа к коду и пакетам  языка JavaScript. PyPI - каталог пакетов Python. Anaconda - пакеты для data science для языков Python, R, Lua, C, C++ и т.д.RPM - репозиторий пакетов .rpm для RHEL, PCLinuxOS, Fedora, AlmaLinux, CentOS, openSUSE, OpenMandriva, Oracle Linux и др. Gem - хостинг RubyGem для языка Ruby. Go - репозиторий пакетов для языка Go. Хранение бинарных файлов - размещайте любые файлы, которые вам нужны. Helm - репозиторий Helm-чартов. NuGet - сервис хранения для .NET пакетов. Debian - репозиторий пакетов для дистрибутивов Linux на базе Debian: Ubuntu, MX Linux, Mint, Raspberry Pi OS, Parrot OS и т.д. HexPM - менеджер пакетов для экосистемы Erlang и Elixir. Composer - репозиторий пакетов для языка PHP. Количество адаптеров постоянно растет, и вы можете увидеть будущие адаптеры на дорожной карте Artipie.  Адаптеры репозиториев помещают загруженные и созданные бинарные файлы в хранилище. В Artipie используется абстрактное хранилище, которое обеспечивает абстрагирование над физической системой хранения данных, что позволяет легко реализовать интерфейс практически для любой системы хранения данных. Хранилище выполняет две основные операции: поместить и получить элемент из хранилища, а также несколько дополнительных функций, таких как: проверка существования элемента, получение списка элементов хранилища или получение метаданных элемента. На данный момент существуют следующие реализации хранилищ: Хранение в файловой системе. Хранилище на базе протокола S3. Redis хранилище. Абстрактное хранилище также предоставляет интерфейс, который может быть расширен и реализован для поддержки любого нужного типа хранилища. Существует два варианта работы с Artipie: Запуск docker-образа Artipie с помощью Docker Compose. Запуск Artipie как jar архива на JVM. Далее рассмотрим простой пример локального запуска Artipie и его настройки для хранения docker-образов на компьютере с ОС Windows. Для запуска Artipie необходимо установить Docker и Docker Compose, затем вы можете просто клонировать репозиторий GitHub с примером, разместив его по пути C:\, или выполнить следующие шаги: Создайте директорию для проекта Artipie (например C:\artipie). Создайте директорию для конфигурационного файла Artipie (например C:\artipie\config) и разместите там yml файл с конфигурацией сервера Artipie. В данном примере файл называется artipie.yml. Вы должны указать путь, по которому Artipie найдет все конфигурации репозиториев. В настоящем примере путь к конфигурации docker репозитория указан как /var/artipie/repo, потому что монтируется директория с локальной Windows машины C:\artipie\repo в каталог /var/artipie/repo в docker контейнере Artipie. Это описано в docker-compose.yml на шаге №4. Создайте директорию для конфигурационных файлов репозиториев (например C:\artipie\repo), затем поместите в нее yml-файл с конфигурацией репозитория. Имя этого файла будет именем создаваемого репозитория. К примеру, файл называется my-docker.yml и соответственно репозиторий будет доступен с использованием имени my-docker. Чтобы настроить хранилище с типом FileStorage достаточно задать путь, по которому Artipie будет хранить все элементы. Система должна иметь права на чтение и запись в этой директории, чтобы создавать файлы по этому пути. В данном   примере используется диретория /var/artipie/images. Создайте файл docker-compose.yml со следующим набором инструкций: Теперь откройте консоль, перейдите в папку с файлом docker-compose.yml и запустите Artipie с помощью команды: docker-compose up. Следующий вывод в консоль показывает, что Artipie запустился на порту 8080 и нашел файл конфигурации репозитория my-docker.yml. Для создания образа, который будет использоваться в данном примере, мы воспользуемся уже существующим образом, доступным на Docker Hub. В данном случае - это легковесный образ с Alpine Linux.  Скачайте образ alpine с помощью команды: docker pull alpine: С помощью следующей команды мы создадим наш docker образ под названием myfirstimage, который основан на образе alpine, чтобы разместить его в нашем репозитории Artipie: docker image tag alpine localhost:8080/my-docker/myfirstimage. Прверим, что Docker содержит 2 образа - alpine и localhost:8080/my-docker/myfirstimage, с помощью команды docker images: Теперь нам нужно войти в наш собственный реестр под стандартным пользователем artipie|artipie, поскольку реестр Docker поддерживает только авторизованных пользователей: docker login --username artipie localhost:8080:   И наконец, мы можем поместить данный образ в наш репозиторий командой: docker push localhost:8080/my-docker/myfirstimage: Для проверки результата мы можем подключиться к контейнеру командой: docker exec -it artipie bash и перейти в директорию/var/artipie/images/my-docker для того, чтобы найти папку docker с созданными папками и blob-файлами.   Перед скачиванием образа из нашего репозитория удалите существующий образ из списка локальных образов командой: docker image rm localhost:8080/my-docker/myfirstimage. Убедитесь, что образ был удален, и теперь есть только 1 образ(alpine): docker images: Образ можно извлечь с помощью команды: docker pull localhost:8080/my-docker/myfirstimage. После выполнения команды можно убедиться, что теперь снова доступны два образа (alpine and localhost:8080/my-docker/myfirstimage): docker images:   Бинарный репозиторий является ключевым элементом любого конвейера DevOps, и каждому проекту требуются свой тип бинарного репозитория для хранения артефактов. Почти каждая экосистема языка программирования имеет свой собственный тип хранилища артефактов. Artipie предоставляет широкий спектр адаптеров для основных форматов упаковки в одном продукте, позволяя управлять всеми артефактами из одного места. Он даёт возможность добавления реализации собственного хранилища бинарных данных в дополнение к файловому хранилищу, Redis и S3. Artipie - хороший выбор для хранения бинарных артефактов, поскольку он прост в настройке, быстро растет и развивается, а также поддерживает множество существующих типов репозиториев. Являясь продуктом с открытым исходным кодом, он не требует оплаты для использования. Более подробную информацию об Artipie вы можете найти на GitHub. Если у вас есть вопросы или предложения - можете задать их в Telegram группе. Чтобы поддержать развитие Artipie, не стесняйтесь поставить проекту звезду на GitHub.