Artifact в разработке приложений: что это такое, типы и как управлять

Автор: IT Sectr Опубликовано: 2026-04-12 Время чтения: 8 мин

Artifact (артефакт) — это конечный результат процесса сборки, который может быть развёрнут на целевом устройстве или использован как зависимость в других проектах. К артефактам относятся APK и IPA файлы мобильных приложений, Docker-образы, JAR/WAR библиотеки и установочные пакеты. По данным JFrog State of Software Supply Chain, 2025, организации могут хранить до 10 терабайт артефактов в одном реестре, что делает системы управления ими критически важными.

Главное

  • Artifact — это выходной файл сборки, который содержит исполняемый код, ресурсы и метаданные для развёртывания или распространения.
  • Типы артефактов — APK/AAB для Android, IPA для iOS, JAR/WAR для Java-сервисов, Docker images, NuGet пакеты.
  • Версионирование артефактов позволяет точно определить, какая версия кода работает в продакшене в любой момент времени.
  • Хранилища артефактов (Artifactory, Nexus, Docker Hub) обеспечивают централизованное управление, контроль версий и разграничение доступа.
  • Безопасность артефактов включает подпись, сканирование на уязвимости и проверку целостности (checksum).

Что такое Artifact в разработке

Artifact (артефакт сборки) — это результат компиляции исходного кода, готовый к развёртыванию или использованию в качестве зависимости. Процесс сборки преобразует исходные файлы (Java, Kotlin, Swift, C++ и другие) в бинарные пакеты, которые можно запускать на целевом устройстве или сервере.

Понятие артефакта выходит за рамки исполняемых файлов. Например, JAR-библиотека — это артефакт, который используется как зависимость в других проектах. Docker-образ — артефакт, содержащий приложение и его окружение. Даже отчёт о покрытии тестами может считаться артефактом в контексте CI/CD.

Современная разработка в крупных компаниях включает управление сотнями тысяч артефактов. Google DORA связывает зрелость управления артефактами с общей эффективностью DevOps — команды, использующие артефактные реестры, быстрее выпускают релизы и реже сталкиваются с проблемами при деплое.

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

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

Типы артефактов в мобильной разработке

Разные платформы и технологии генерируют различные форматы артефактов. Понимание форматов необходимо для правильной настройки CI/CD-пайплайна и выбора системы хранения.

Android артефакты

APK (Android Package Kit) — традиционный формат установочного пакета. AAB (Android App Bundle) — современный формат для публикации в Google Play, содержащий только те ресурсы, которые нужны конкретному устройству. AAB уменьшает размер устанавливаемого приложения в среднем на 15-20% по сравнению с универсальным APK.

iOS артефакты

IPA (iOS App Store Package) — архив с кодом и ресурсами для iOS-устройств. XCArchive — промежуточный артефакт, создаваемый Xcode, из которого экспортируется финальный IPA. dSYM — файл отладки, необходимый для символизации crash-логов.

ПлатформаФорматРасширениеНазначение
AndroidAPK.apkУстановочный пакет
AndroidAAB.aabПубликация в Google Play
iOSIPA.ipaУстановочный пакет
iOSdSYM.dSYM.zipDebug symbols
FlutterBundle.zip, .tar.gzWeb/Desktop сборки

Артефакты серверных и библиотечных проектов

JAR (Java ARchive) — для библиотек Java/Kotlin. AAR (Android ARchive) — для Android-библиотек с ресурсами. Docker-образы — контейнерные артефакты для микросервисов. Каждый тип имеет свой реестр и правила управления версиями.

Артефакты в CI/CD пайплайне

Артефакты — связующее звено между этапами пайплайна. Каждая стадия потребляет артефакты предыдущей и производит новые. Понимание этого потока критически важно для настройки эффективного CI/CD.

Поток артефактов в пайплайне

Типовой поток включает: коммит -> build-сервер компилирует код и создаёт неоптимизированный артефакт -> тестовый артефакт используется для прогона тестов -> при успехе создаётся релизный артефакт -> он подписывается и публикуется в артефактный реестр -> из реестра артефакт забирается для деплоя в staging и production. Каждый переход между этапами сопровождается проверкой целостности и соответствия требованиям.

Промежуточные и финальные артефакты

Пайплайн может создавать несколько артефактов на разных этапах. Debug-артефакты содержат отладочную информацию, unoptimized — собираются быстро для тестов, release-артефакты — финальные, с оптимизацияцией и обфускацией. CI-система должна уметь различать их и применять соответствующие политики хранения для каждого типа.

yaml
name: Artifact Flow
on: [push]

jobs:
  build-debug:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: ./gradlew assembleDebug
      - uses: actions/upload-artifact@v4
        with:
          name: debug-apk
          path: app/build/outputs/apk/debug/app-debug.apk
          retention-days: 7

  test:
    needs: build-debug
    runs-on: ubuntu-latest
    steps:
      - uses: actions/download-artifact@v4
        with:
          name: debug-apk
      - run: ./gradlew testDebugUnitTest

  build-release:
    needs: test
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: ./gradlew assembleRelease
      - uses: actions/upload-artifact@v4
        with:
          name: release-apk
          path: app/build/outputs/apk/release/app-release.apk
          retention-days: 90

Cache vs Artifact

Важно различать кэш зависимостей и артефакты сборки. Кэш (Gradle cache, CocoaPods cache) ускоряет повторные сборки, но не предназначен для деплоя. Артефакты — конечный продукт, готовый к распространению. Для кэша устанавливайте TTL в несколько дней, для артефактов — недели или месяцы.

Хранилища артефактов

Артефакты не должны храниться на build-сервере — для этого существуют специализированные системы. Repository Manager обеспечивает централизованное хранение, индексацию, контроль доступа и интеграцию с CI/CD-инструментами.

Популярные артефактные реестры

JFrog Artifactory — универсальный менеджер, поддерживающий Maven, Gradle, Docker, NuGet, npm, APT, YUM. Sonatype Nexus — open-source альтернатива с поддержкой основных форматов. GitHub Packages — встроенный реестр в GitHub, удобный для команд, уже использующих GitHub. GitLab Container Registry — для Docker-образов.

Критерии выбора реестра

Основные факторы: поддерживаемые форматы, модель лицензирования (open-source/enterprise), интеграция с существующим CI/CD, возможность репликации между регионами, наличие политик автоматической очистки старых версий и compliance-отчётов.

groovy
// Jenkins pipeline — публикация APK в Artifactory
def server = Artifactory.newServer(
    url: 'https://artifactory.company.com',
    credentialsId: 'artifactory-api-key'
)

def uploadSpec = """
{
  "files": [
    {
      "pattern": "app/build/outputs/apk/release/*.apk",
      "target": "mobile-apps/android/release/""
    }
  ]
}
"""
server.upload(uploadSpec)

Версионирование и именование

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

Semantic Versioning (SemVer)

Стандарт MAJOR.MINOR.PATCH: MAJOR меняется при несовместимых изменениях API, MINOR — при добавлении обратно-совместимой функциональности, PATCH — при обратно-совместимых исправлениях. Для CI/CD к версии добавляют build-метаданные: 2.4.1+build.20260703.1. Это позволяет точно определить, какой коммит породил конкретный артефакт и когда он был создан.

Traceability связь с Git

Каждый артефакт должен содержать метаданные о его происхождении: commit SHA, номер CI-сборки, имя ветки, дату сборки. Эта информация записывается в манифест артефакта и позволяет в любой момент восстановить контекст его создания. Без traceability работа с артефактами превращается в угадывание версий, что недопустимо для production-систем с требованиями к аудиту.

Именование артефактов

Конвенция имени: {project}-{module}-{version}.{ext}. Например: `messaging-sdk-2.4.1.aar` или `app-release-2.4.1.apk`. build-сервер может автоматически генерировать версию на основе тега Git или номера сборки CI-системы.

  • Используйте Git tag как источник версии — это связывает артефакт с конкретным состоянием кода
  • Добавляйте commit SHA в метаданные для точной идентификации на этапе отладки
  • Настройте политику retention — храните последние N версий, остальное архивируйте

Snapshot vs Release

В артефактных реестрах Maven/Gradle различают release-версии (фиксированные, неизменяемые) и snapshot-версии (текущая разработка, могут перезаписываться). В CI/CD пайплайнах snapshot-артефакты удобны для разработки, но в продакшене должны использоваться только release-версии.

Безопасность артефактов

Артефакты — ключевой элемент цепочки поставки ПО (software supply chain). Компрометация артефакта может привести к попаданию вредоносного кода в продакшен. Безопасность артефактов включает несколько уровней защиты.

Подпись артефактов

APK-файлы подписываются jarsigner или apksigner; IPA — Apple-сертификатом; Docker-образы — Content Trust (Notary) от Docker. Подпись гарантирует целостность и подтверждает автора артефакта. CI/CD-пайплайн должен включать проверку подписей всех сторонних зависимостей.

Сканирование на уязвимости

Перед публикацией артефакт проверяется автоматическими сканерами: Snyk, Trivy, Sonatype Nexus IQ, GitHub Dependabot. Они анализируют включённые зависимости, версии используемых библиотек и известные CVE-уязвимости. При обнаружении критической уязвимости выпуск релиза немедленно блокируется до её устранения разработчиками.

Supply chain levels

SLSA (Supply chain Levels for Software Artifacts) — фреймворк безопасности, определяющий уровни доверия от SLSA 1 (базовый) до SLSA 4 (максимальный). Build-сервер должен генерировать provenance attestation — криптографически подписанное свидетельство о том, как и из какого кода был собран артефакт.

Часто задаваемые вопросы

Чем отличается APK от AAB?

APK — универсальный пакет со всеми ресурсами, AAB — модульный формат, при котором Google Play доставляет только необходимые ресурсы для конкретного устройства. AAB меньше по размеру и рекомендуется Google для новых приложений.

Где лучше хранить артефакты сборки?

Лучше всего в специализированных системах (Artifactory, Nexus, GitHub Packages), а не на CI-сервере или в репозитории кода. Они обеспечивают версионирование, контроль доступа, интеграцию с CI/CD и автоматическую очистку старых версий.

Нужно ли подписывать каждый артефакт?

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

Как версионировать артефакты в CI/CD?

Используйте Git tag или номер сборки CI-системы. Автоматически генерируйте версию по шаблону MAJOR.MINOR.PATCH+build.N, где N — последовательный номер CI-сборки или commit SHA.

Как часто нужно очищать старые артефакты?

Настройте политику автоматической очистки: храните последние 10-20 релизных и 30-50 snapshot-версий артефактов. Старые версии можно архивировать в холодное хранилище (S3 Glacier, Google Coldline) для compliance.

Итоги

  • Artifact — это конечный продукт сборки: APK, IPA, AAR, Docker-образ или JAR-библиотека, готовый к развёртыванию или использованию.
  • Форматы артефактов различаются по платформе: Android использует APK/AAB, iOS — IPA, серверная часть — JAR/Docker.
  • Хранилища артефактов (Artifactory, Nexus) централизуют управление, обеспечивают контроль версий и доступа.
  • Версионирование по SemVer и привязка к Git-тегу гарантирует воспроизводимость сборок и упрощает отладку.
  • Безопасность включает подпись, сканирование уязвимостей и SLSA-framework для защиты цепочки поставки.
  • Retention policy предотвращает переполнение дискового хранилища без потери критических версий артефактов.
  • Snapshot vs Release — разделение помогает отделить разрабатываемые версии от стабильных релизов, гарантируя что в продакшен попадают только проверенные и зафиксированные сборки.

Мы разработаем мобильное приложение под ключ

IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект

Читайте также