Открыть сервис

Azure Artifacts

Azure Artifacts — это облачный сервис управления пакетами, входящий в состав платформы Microsoft Azure DevOps. Он предоставляет разработчикам возможность создавать, хранить и распространять различные типы пакетов (бинарных зависимостей) в рамках единой экосистемы. Azure Artifacts позволяет организовать приватные и публичные репозитории (feeds) для NuGet, npm, Maven, Python (PyPI), Universal Packages и Cargo, а также служит прокси-сервером для кэширования пакетов из общедоступных реестров.

История

Сервис Azure Artifacts был анонсирован в 2017 году как часть Visual Studio Team Services (VSTS), предшественника Azure DevOps. Первоначально он назывался Package Management и поддерживал только NuGet. В 2018 году, после переименования VSTS в Azure DevOps, сервис получил название Azure Artifacts и расширил поддержку на npm, Maven и Python. В последующие годы были добавлены Universal Packages (для хранения произвольных файлов, например, ZIP-архивов) и Cargo (для экосистемы Rust). Развитие сервиса было направлено на интеграцию с другими инструментами Azure DevOps, такими как Azure Pipelines и Azure Repos, а также на улучшение возможностей управления версиями и безопасностью.

Архитектура и принцип работы

Azure Artifacts построен на основе концепции feeds (каналов). Feed — это логический контейнер, который группирует пакеты по проекту, команде или типу. Каждый feed может содержать пакеты разных типов (например, одновременно NuGet и npm), но обычно рекомендуется разделять их для упрощения управления правами доступа.

Основные компоненты

  • Feed (канал): приватное или публичное хранилище пакетов. По умолчанию все feeds являются приватными и доступны только членам организации Azure DevOps.
  • Пакет: единица распространения кода или данных. Включает метаданные (версия, автор, лицензия) и собственно файлы (бинарные сборки, исходный код, документацию).
  • Прокси-сервер (upstream source): Azure Artifacts может выступать в качестве прокси для внешних реестров (например, NuGet.org, npmjs.com, PyPI). При запросе пакета, которого нет в приватном feed, сервис автоматически загружает его из upstream-источника и кэширует локально.
  • Просмотрщик (view): механизм для управления видимостью пакетов. Позволяет создавать «релизные» (release) и «предварительные» (prerelease) представления, чтобы разработчики видели только стабильные версии, а тестировщики — все.

Жизненный цикл пакета

  1. Создание: разработчик упаковывает код (например, с помощью dotnet pack для NuGet или npm pack для npm) и публикует его в feed через Azure Pipelines, командную строку или IDE.
  2. Хранение: пакет сохраняется в хранилище Azure Blob Storage, привязанном к организации. Каждая версия пакета неизменяема (immutable) — после публикации её нельзя удалить или перезаписать (только «удалить» из видимости, но не физически стереть).
  3. Распространение: другие разработчики или CI/CD-системы получают пакет, используя стандартные клиенты (NuGet CLI, npm, pip, Maven, cargo) с указанием URL feed и токена аутентификации.
  4. Удаление из видимости: администратор может «удалить» пакет (soft-delete), скрыв его из списка, но сохранив в хранилище для восстановления в течение 30 дней.

Классификация и виды пакетов

Azure Artifacts поддерживает несколько форматов пакетов, каждый из которых имеет свои особенности:

ФорматЭкосистемаТипичное содержимоеИнструменты публикации
NuGet.NETСборки (DLL), метаданные (nuspec)dotnet nuget push, nuget push
npmNode.jsJavaScript-модули, package.jsonnpm publish
MavenJavaJAR, WAR, POM-файлыmvn deploy, gradle publish
Python (PyPI)PythonWheel, sdist, setup.pytwine upload, pip publish
Universal PackagesЛюбаяПроизвольные файлы (ZIP, бинарники)Azure CLI, REST API
CargoRustCrate, Cargo.tomlcargo publish

Universal Packages — это уникальная возможность Azure Artifacts, не имеющая прямых аналогов в других реестрах. Они позволяют хранить любые артефакты (например, образы Docker, установочные пакеты, отчёты) без необходимости разворачивать отдельное хранилище.

Применение

Azure Artifacts используется в сценариях, где требуется централизованное управление зависимостями в процессе разработки программного обеспечения.

Основные сценарии использования

  1. Приватные репозитории для внутренних библиотек: команды могут публиковать общие модули (например, библиотеки для работы с API, утилиты) и использовать их в разных проектах, не раскрывая исходный код внешним разработчикам.
  2. Кэширование публичных пакетов: настройка upstream-источников позволяет кэшировать пакеты из NuGet.org, npmjs.com и других реестров. Это снижает время загрузки и обеспечивает доступность зависимостей даже при временной недоступности внешних серверов.
  3. Интеграция с CI/CD: Azure Pipelines может автоматически публиковать пакеты после успешной сборки и тестирования, а также подтягивать их как зависимости для других проектов. Это обеспечивает непрерывную поставку (Continuous Delivery) артефактов.
  4. Управление версиями: сервис поддерживает семантическое версионирование (SemVer) и позволяет блокировать публикацию дублирующихся версий, предотвращая случайные поломки.
  5. Аудит и безопасность: администраторы могут просматривать историю публикаций, кто и когда загрузил пакет, а также настраивать права доступа (чтение, запись, управление) на уровне feed или отдельных пакетов.

Примеры использования в организациях

  • Крупные IT-компании используют Azure Artifacts для хранения внутренних фреймворков, которые используются сотнями проектов. Например, компания, разрабатывающая микросервисы на .NET, может публиковать общие библиотеки для логирования, аутентификации и работы с базами данных.
  • Команды, работающие с несколькими языками программирования, могут размещать все пакеты в одном feed, упрощая администрирование.
  • В средах с ограниченным доступом к интернету (например, в закрытых контурах государственных учреждений) Azure Artifacts служит единственным источником зависимостей, кэшируя необходимые пакеты.

Критика и ограничения

Несмотря на широкие возможности, Azure Artifacts имеет ряд недостатков:

  • Стоимость: сервис не входит в бесплатный лимит Azure DevOps для организаций с большим объёмом данных. Хранение пакетов и трафик тарифицируются отдельно, что может быть дорого для проектов с частыми публикациями.
  • Привязка к экосистеме Azure: для полноценного использования требуется инфраструктура Azure DevOps. Интеграция с другими CI/CD-системами (GitLab CI, Jenkins) возможна, но менее удобна.
  • Неизменяемость пакетов: невозможность удалить опубликованную версию (только скрыть) может быть неудобна при случайной публикации конфиденциальных данных или ошибочных версий.
  • Ограниченная поддержка некоторых форматов: например, отсутствует поддержка RubyGems или Docker (хотя образы Docker можно хранить через Universal Packages, это менее удобно, чем специализированный реестр).
  • Сложность настройки прав: для больших организаций с множеством команд управление разрешениями на уровне feed может стать запутанным.

Интересные факты

  • Azure Artifacts поддерживает «прокси-сервер» для npm, что позволяет использовать приватные пакеты вместе с публичными, не меняя конфигурацию клиента.
  • Максимальный размер одного пакета в Universal Packages составляет 4 ГБ, что позволяет хранить большие бинарные файлы (например, установочные образы ОС).
  • Сервис интегрирован с Azure DevOps Pipeline Artifacts, но это разные сущности: Pipeline Artifacts — это временные файлы для передачи между этапами сборки, а Azure Artifacts — постоянное хранилище.
  • В 2023 году Microsoft добавила возможность автоматического удаления старых версий пакетов (retention policies), что помогает экономить место и снижать затраты.

Источники

  • Документация Microsoft Azure: «What is Azure Artifacts?» (learn.microsoft.com).
  • Официальный блог Azure DevOps: анонсы и обновления Azure Artifacts (devblogs.microsoft.com/devops).
  • Спецификации форматов пакетов: NuGet, npm, Maven, PyPI, Cargo.
  • Материалы конференций Microsoft Build и Ignite, посвящённые Azure DevOps.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →