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) представления, чтобы разработчики видели только стабильные версии, а тестировщики — все.
Жизненный цикл пакета
- Создание: разработчик упаковывает код (например, с помощью
dotnet packдля NuGet илиnpm packдля npm) и публикует его в feed через Azure Pipelines, командную строку или IDE. - Хранение: пакет сохраняется в хранилище Azure Blob Storage, привязанном к организации. Каждая версия пакета неизменяема (immutable) — после публикации её нельзя удалить или перезаписать (только «удалить» из видимости, но не физически стереть).
- Распространение: другие разработчики или CI/CD-системы получают пакет, используя стандартные клиенты (NuGet CLI, npm, pip, Maven, cargo) с указанием URL feed и токена аутентификации.
- Удаление из видимости: администратор может «удалить» пакет (soft-delete), скрыв его из списка, но сохранив в хранилище для восстановления в течение 30 дней.
Классификация и виды пакетов
Azure Artifacts поддерживает несколько форматов пакетов, каждый из которых имеет свои особенности:
| Формат | Экосистема | Типичное содержимое | Инструменты публикации |
|---|---|---|---|
| NuGet | .NET | Сборки (DLL), метаданные (nuspec) | dotnet nuget push, nuget push |
| npm | Node.js | JavaScript-модули, package.json | npm publish |
| Maven | Java | JAR, WAR, POM-файлы | mvn deploy, gradle publish |
| Python (PyPI) | Python | Wheel, sdist, setup.py | twine upload, pip publish |
| Universal Packages | Любая | Произвольные файлы (ZIP, бинарники) | Azure CLI, REST API |
| Cargo | Rust | Crate, Cargo.toml | cargo publish |
Universal Packages — это уникальная возможность Azure Artifacts, не имеющая прямых аналогов в других реестрах. Они позволяют хранить любые артефакты (например, образы Docker, установочные пакеты, отчёты) без необходимости разворачивать отдельное хранилище.
Применение
Azure Artifacts используется в сценариях, где требуется централизованное управление зависимостями в процессе разработки программного обеспечения.
Основные сценарии использования
- Приватные репозитории для внутренних библиотек: команды могут публиковать общие модули (например, библиотеки для работы с API, утилиты) и использовать их в разных проектах, не раскрывая исходный код внешним разработчикам.
- Кэширование публичных пакетов: настройка upstream-источников позволяет кэшировать пакеты из NuGet.org, npmjs.com и других реестров. Это снижает время загрузки и обеспечивает доступность зависимостей даже при временной недоступности внешних серверов.
- Интеграция с CI/CD: Azure Pipelines может автоматически публиковать пакеты после успешной сборки и тестирования, а также подтягивать их как зависимости для других проектов. Это обеспечивает непрерывную поставку (Continuous Delivery) артефактов.
- Управление версиями: сервис поддерживает семантическое версионирование (SemVer) и позволяет блокировать публикацию дублирующихся версий, предотвращая случайные поломки.
- Аудит и безопасность: администраторы могут просматривать историю публикаций, кто и когда загрузил пакет, а также настраивать права доступа (чтение, запись, управление) на уровне 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 →