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 слике, 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 симболи
FlutterBundle.zip, .tar.gzWeb/Desktop изградње

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

JAR (Java ARchive) — за Java/Kotlin библиотеке. AAR (Android ARchive) — за Android библиотеке са ресурсима. Docker слике — контејнерски артефакти за микросервисе. Сваки тип има свој регистар и правила управљања верзијама.

Артефакти у CI/CD пајплајну

Артефакти — спона између фаза пајплајна. Свака фаза троши артефакте претходне и производи нове. Разумевање овог тока је кључно за подешавање ефикасног CI/CD-а.

Ток артефаката у пајплајну

Типичан ток укључује: commit → сервер за изградњу компајлира код и креира неоптимизовани артефакт → тест артефакт се користи за покретање тестова → при успеху се креира релизни артефакт → потписује се и објављује у регистру артефаката → из регистра се артефакт преузима за распоређивање на staging и production. Сваки прелаз између фаза прати провера интегритета и усклађености са захтевима.

Међуартефакти и финални артефакти

Пајплајн може креирати више артефаката у различитим фазама. Debug артефакти садрже информације за отклањање грешака, неоптимизовани — брзо се склапају за тестове, релизни артефакти — коначни, са оптимизацијом и обфускацијом. 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 од неколико дана, за артефакте — недеље или месеце.

Складишта артефаката

Артефакти не би требало да се чувају на серверу за изградњу — за то постоје специјализовани системи. 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 верзији се додају метаподаци изградње: 2.4.1+build.20260703.1. Ово омогућава прецизно одређивање који commit је створио одређени артефакт и када је направљен.

Повезивање са Git-ом (Traceability)

Сваки артефакт треба да садржи метаподатке о свом пореклу: commit SHA, број CI изградње, име гране, датум изградње. Ове информације се уписују у манифест артефакта и омогућавају да се у било ком тренутку реконструише контекст његовог настанка. Без traceability-ja рад са артефактима постаје погађање верзија, што је неприхватљиво за продукционе системе са захтевима за ревизију.

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

Конвенција имена: {project}-{module}-{version}.{ext}. На пример: `messaging-sdk-2.4.1.aar` или `app-release-2.4.1.apk`. Сервер за изградњу може аутоматски генерисати верзију на основу Git tag-а или броја CI изградње.

  • Користите Git tag као извор верзије — то повезује артефакт са одређеним стањем кода
  • Додајте commit SHA у метаподатке за прецизну идентификацију у фази отклањања грешака
  • Подесите политику задржавања — чувајте последњих 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 (максимални). Сервер за изградњу мора да генерише 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) ради усклађености.

Закључак

  • Artifact — коначни производ изградње: APK, IPA, AAR, Docker слика или JAR библиотека, спреман за распоређивање или употребу.
  • Формати артефаката се разликују по платформи: Android користи APK/AAB, iOS — IPA, серверски део — JAR/Docker.
  • Складишта артефаката (Artifactory, Nexus) централизују управљање, обезбеђују контролу верзија и приступа.
  • Верзионисање по SemVer-у и повезивање са Git tag-ом гарантује репродуцибилност изградњи и поједностављује отклањање грешака.
  • Безбедност укључује потписивање, скенирање рањивости и SLSA оквир за заштиту ланца снабдевања.
  • Политика задржавања спречава препуњавање диска без губитка критичних верзија артефаката.
  • Snapshot vs Release — раздвајање помаже да се одвоје верзије у развоју од стабилних издања, гарантујући да у продукцију доспевају само проверене и фиксиране изградње.

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође