Artifact (артефакт) — коначни резултат процеса изградње који може бити распоређен на циљном уређају или коришћен као зависност у другим пројектима. Артефакти укључују APK и IPA датотеке мобилних апликација, Docker слике, JAR/WAR библиотеке и инсталационе пакете. Према JFrog State of Software Supply Chain, 2025, организације могу да складиште до 10 терабајта артефаката у једном регистру, што системе за управљање чини критично важним.
Главно
Artifact (артефакт изградње) — резултат компајлирања изворног кода, спреман за распоређивање или коришћење као зависност. Процес изградње претвара изворне датотеке (Java, Kotlin, Swift, C++ и друге) у бинарне пакете који се могу покренути на циљном уређају или серверу.
Појам артефакта превазилази оквире извршних датотека. На пример, JAR библиотека — артефакт који се користи као зависност у другим пројектима. Docker слика — артефакт који садржи апликацију и њено окружење. Чак и извештај о покривености тестовима може се сматрати артефактом у контексту CI/CD.
Савремени развој у великим компанијама укључује управљање стотинама хиљада артефаката. Google DORA повезује зрелост управљања артефактима са укупном ефикасношћу DevOps-а — тимови који користе регистре артефаката брже објављују издања и ређе се сусрећу са проблемима при распоређивању.
Сваки артефакт пролази кроз неколико фаза: креирање (изградња, компајлирање), валидација (тестирање, провера безбедности), складиштење (регистар артефаката), дистрибуција (објављивање за преузимање) и архивирање или брисање (када верзија застари).
Различите платформе и технологије генеришу различите формате артефаката. Разумевање формата неопходно је за правилно подешавање CI/CD пајплајна и избор система за складиштење.
APK (Android Package Kit) — традиционални формат инсталационог пакета. AAB (Android App Bundle) — модерни формат за објављивање у Google Play-у, који садржи само ресурсе потребне одређеном уређају. AAB смањује величину инсталиране апликације у просеку за 15-20% у поређењу са универзалним APK-ом.
IPA (iOS App Store Package) — архива са кодом и ресурсима за iOS уређаје. XCArchive — међуартефакт који креира Xcode, из кога се извози финални IPA. dSYM — датотека за отклањање грешака неопходна за символизацију crash логова.
| Платформа | Формат | Екстензија | Намена |
|---|---|---|---|
| Android | APK | .apk | Инсталациони пакет |
| Android | AAB | .aab | Објављивање у Google Play-у |
| iOS | IPA | .ipa | Инсталациони пакет |
| iOS | dSYM | .dSYM.zip | Debug симболи |
| Flutter | Bundle | .zip, .tar.gz | Web/Desktop изградње |
JAR (Java ARchive) — за Java/Kotlin библиотеке. AAR (Android ARchive) — за Android библиотеке са ресурсима. Docker слике — контејнерски артефакти за микросервисе. Сваки тип има свој регистар и правила управљања верзијама.
Артефакти — спона између фаза пајплајна. Свака фаза троши артефакте претходне и производи нове. Разумевање овог тока је кључно за подешавање ефикасног CI/CD-а.
Типичан ток укључује: commit → сервер за изградњу компајлира код и креира неоптимизовани артефакт → тест артефакт се користи за покретање тестова → при успеху се креира релизни артефакт → потписује се и објављује у регистру артефаката → из регистра се артефакт преузима за распоређивање на staging и production. Сваки прелаз између фаза прати провера интегритета и усклађености са захтевима.
Пајплајн може креирати више артефаката у различитим фазама. Debug артефакти садрже информације за отклањање грешака, неоптимизовани — брзо се склапају за тестове, релизни артефакти — коначни, са оптимизацијом и обфускацијом. CI систем мора да их разликује и примењује одговарајуће политике складиштења за сваки тип.
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
Важно је разликовати кеш зависности и артефакте изградње. Кеш (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 извештаја.
// 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)
Правилна стратегија верзионисања артефаката је кључна за репродуцибилност изградњи и праћење промена. Без верзионисања немогуће је утврдити која верзија кода је изазвала проблем у продукцији.
Стандард MAJOR.MINOR.PATCH: MAJOR се мења при некомпатибилним променама API-ја, MINOR — при додавању уназад компатибилне функционалности, PATCH — при уназад компатибилним исправкама. За CI/CD верзији се додају метаподаци изградње: 2.4.1+build.20260703.1. Ово омогућава прецизно одређивање који commit је створио одређени артефакт и када је направљен.
Сваки артефакт треба да садржи метаподатке о свом пореклу: commit SHA, број CI изградње, име гране, датум изградње. Ове информације се уписују у манифест артефакта и омогућавају да се у било ком тренутку реконструише контекст његовог настанка. Без traceability-ja рад са артефактима постаје погађање верзија, што је неприхватљиво за продукционе системе са захтевима за ревизију.
Конвенција имена: {project}-{module}-{version}.{ext}. На пример: `messaging-sdk-2.4.1.aar` или `app-release-2.4.1.apk`. Сервер за изградњу може аутоматски генерисати верзију на основу Git tag-а или броја CI изградње.
У регистрима артефаката 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 рањивости. При откривању критичне рањивости, издање се одмах блокира до њеног отклањања од стране програмера.
SLSA (Supply chain Levels for Software Artifacts) — безбедносни оквир који дефинише нивое поверења од SLSA 1 (основни) до SLSA 4 (максимални). Сервер за изградњу мора да генерише provenance attestation — криптографски потписано сведочанство о томе како и из ког кода је направљен артефакт.
Често постављана питања
APK — универзални пакет са свим ресурсима, AAB — модуларни формат у ком Google Play испоручује само потребне ресурсе за одређени уређај. AAB је мањи и Google га препоручује за нове апликације.
Најбоље у специјализованим системима (Artifactory, Nexus, GitHub Packages), а не на CI серверу или у репозиторијуму кода. Они обезбеђују верзионисање, контролу приступа, интеграцију са CI/CD и аутоматско чишћење старих верзија.
Да, сви артефакти намењени за продукциону употребу морају бити потписани. За мобилне апликације потпис је обавезан за инсталацију на уређајима и објављивање у продавницама.
Користите Git tag или број CI изградње. Аутоматски генеришите верзију по шаблону MAJOR.MINOR.PATCH+build.N, где је N редни број CI изградње или commit SHA.
Подесите политику аутоматског чишћења: чувајте последњих 10-20 релизних и 30-50 snapshot верзија. Старе верзије се могу архивирати у хладном складишту (S3 Glacier, Google Coldline) ради усклађености.
Закључак
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође