Artifact (artefakt) — je konečný výsledek procesu sestavení, který lze nasadit na cílové zařízení nebo použít jako závislost v jiných projektech. Mezi artefakty patří soubory APK a IPA mobilních aplikací, obrazy Docker, knihovny JAR/WAR a instalační balíčky. Podle JFrog State of Software Supply Chain, 2025 mohou organizace ukládat až 10 terabajtů artefaktů v jednom registru, což systémy správy činí kriticky důležitými.
Hlavní body
Artifact (artefakt sestavení) — je výsledek kompilace zdrojového kódu, připravený k nasazení nebo použití jako závislost. Proces sestavení převádí zdrojové soubory (Java, Kotlin, Swift, C++ a další) na binární balíčky, které lze spustit na cílovém zařízení nebo serveru.
Pojem artefakt přesahuje rámec spustitelných souborů. Například knihovna JAR — je artefakt používaný jako závislost v jiných projektech. Obraz Docker — artefakt obsahující aplikaci a její prostředí. Dokonce i zpráva o pokrytí testy může být považována za artefakt v kontextu CI/CD.
Moderní vývoj ve velkých společnostech zahrnuje správu statisíců artefaktů. Google DORA spojuje vyspělost správy artefaktů s celkovou efektivitou DevOps — týmy používající registry artefaktů vydávají verze rychleji a méně často narážejí na problémy při nasazování.
Každý artefakt prochází několika fázemi: vytvoření (sestavení, kompilace), validace (testování, bezpečnostní kontrola), ukládání (registr artefaktů), distribuce (zveřejnění ke stažení) a archivace nebo odstranění (když verze zastará).
Různé platformy a technologie generují různé formáty artefaktů. Porozumění formátům je nezbytné pro správnou konfiguraci CI/CD pipeline a výběr úložného systému.
APK (Android Package Kit) — tradiční formát instalačního balíčku. AAB (Android App Bundle) — moderní formát pro publikaci v Google Play, obsahující pouze zdroje potřebné pro konkrétní zařízení. AAB snižuje velikost instalované aplikace v průměru o 15-20% ve srovnání s univerzálním APK.
IPA (iOS App Store Package) — archiv s kódem a zdroji pro zařízení iOS. XCArchive — mezilehlý artefakt vytvořený Xcode, ze kterého se exportuje finální IPA. dSYM — soubor pro ladění nezbytný pro symbolizaci crash logů.
| Platforma | Formát | Přípona | Účel |
|---|---|---|---|
| Android | APK | .apk | Instalační balíček |
| Android | AAB | .aab | Publikace v Google Play |
| iOS | IPA | .ipa | Instalační balíček |
| iOS | dSYM | .dSYM.zip | Ladicí symboly |
| Flutter | Bundle | .zip, .tar.gz | Sestavení Web/Desktop |
JAR (Java ARchive) — pro knihovny Java/Kotlin. AAR (Android ARchive) — pro knihovny Android se zdroji. Obrazy Docker — kontejnerové artefakty pro mikroslužby. Každý typ má svůj registr a pravidla správy verzí.
Artefakty — spojovací článek mezi fázemi pipeline. Každá fáze spotřebovává artefakty předchozí a vytváří nové. Pochopení tohoto toku je klíčové pro konfiguraci efektivního CI/CD.
Typický tok zahrnuje: commit → build server zkompiluje kód a vytvoří neoptimalizovaný artefakt → testovací artefakt se použije pro spuštění testů → při úspěchu se vytvoří release artefakt → podepíše se a zveřejní v registru artefaktů → z registru se artefakt vyzvedne pro nasazení do staging a produkce. Každý přechod mezi fázemi je doprovázen ověřením integrity a souladu s požadavky.
Pipeline může vytvářet několik artefaktů v různých fázích. Debug artefakty obsahují ladicí informace, neoptimalizované — rychle se sestavují pro testování, release artefakty — konečné, s optimalizací a obfuskací. CI systém je musí umět rozlišovat a aplikovat vhodné zásady ukládání pro každý typ.
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
Je důležité rozlišovat mezipaměť závislostí a artefakty sestavení. Mezipaměť (Gradle cache, CocoaPods cache) urychluje opakovaná sestavení, ale není určena k nasazení. Artefakty — konečný produkt připravený k distribuci. Pro mezipaměť nastavte TTL na několik dní, pro artefakty — týdny nebo měsíce.
Artefakty by neměly být ukládány na build serveru — k tomu existují specializované systémy. Repository Manager poskytuje centralizované ukládání, indexování, kontrolu přístupu a integraci s nástroji CI/CD.
JFrog Artifactory — univerzální správce podporující Maven, Gradle, Docker, NuGet, npm, APT, YUM. Sonatype Nexus — open-source alternativa s podporou hlavních formátů. GitHub Packages — vestavěný registr v GitHubu, vhodný pro týmy již používající GitHub. GitLab Container Registry — pro obrazy Docker.
Hlavní faktory: podporované formáty, licenční model (open-source/enterprise), integrace se stávajícím CI/CD, možnost replikace mezi regiony, existence zásad automatického čištění starých verzí a zpráv o shodě.
// Jenkins pipeline — publikace APK v 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)
Správná strategie verzování artefaktů je klíčová pro reprodukovatelnost sestavení a sledování změn. Bez verzování nelze určit, která verze kódu způsobila problém v produkci.
Standard MAJOR.MINOR.PATCH: MAJOR se mění při nekompatibilních změnách API, MINOR — při přidání zpětně kompatibilní funkcionality, PATCH — při zpětně kompatibilních opravách. Pro CI/CD se k verzi přidávají metadata sestavení: 2.4.1+build.20260703.1. To umožňuje přesně určit, který commit vytvořil konkrétní artefakt a kdy byl vytvořen.
Každý artefakt by měl obsahovat metadata o svém původu: commit SHA, číslo CI sestavení, název větve, datum sestavení. Tyto informace se zapisují do manifestu artefaktu a umožňují kdykoli rekonstruovat kontext jeho vytvoření. Bez traceovatelnosti se práce s artefakty mění v hádání verzí, což je nepřijatelné pro produkční systémy s požadavky na audit.
Konvence názvu: {project}-{module}-{version}.{ext}. Například: `messaging-sdk-2.4.1.aar` nebo `app-release-2.4.1.apk`. Build server může automaticky generovat verzi na základě Gitu tagu nebo čísla CI sestavení.
V registrech artefaktů Maven/Gradle se rozlišují release verze (pevné, neměnné) a snapshot verze (aktuální vývoj, lze přepsat). V CI/CD pipeline jsou snapshot artefakty vhodné pro vývoj, ale v produkci by se měly používat pouze release verze.
Artefakty — klíčový prvek dodavatelského řetězce softwaru (software supply chain). Kompromitace artefaktu může vést k proniknutí škodlivého kódu do produkce. Bezpečnost artefaktů zahrnuje několik úrovní ochrany.
Soubory APK se podepisují pomocí jarsigner nebo apksigner; IPA — certifikátem Apple; obrazy Docker — Content Trust (Notary) od Dockeru. Podpis zaručuje integritu a potvrzuje autora artefaktu. CI/CD pipeline by měl zahrnovat ověření podpisů všech závislostí třetích stran.
Před zveřejněním je artefakt kontrolován automatickými skenery: Snyk, Trivy, Sonatype Nexus IQ, GitHub Dependabot. Analyzují zahrnuté závislosti, verze použitých knihoven a známé zranitelnosti CVE. Při detekci kritické zranitelnosti je vydání okamžitě blokováno, dokud není opraveno vývojáři.
SLSA (Supply chain Levels for Software Artifacts) — bezpečnostní rámec definující úrovně důvěry od SLSA 1 (základní) po SLSA 4 (maximální). Build server musí generovat provenance attestation — kryptograficky podepsané osvědčení o tom, jak a z jakého kódu byl artefakt sestaven.
Často kladené otázky
APK — univerzální balíček se všemi zdroji, AAB — modulární formát, při kterém Google Play doručuje pouze potřebné zdroje pro konkrétní zařízení. AAB je menší a Google jej doporučuje pro nové aplikace.
Nejlepší ve specializovaných systémech (Artifactory, Nexus, GitHub Packages), ne na CI serveru nebo v repozitáři kódu. Poskytují verzování, kontrolu přístupu, integraci s CI/CD a automatické čištění starých verzí.
Ano, všechny artefakty určené k produkčnímu použití musí být podepsány. Pro mobilní aplikace je podpis povinný pro instalaci na zařízení a publikaci v obchodech.
Používejte Git tag nebo číslo CI sestavení. Automaticky generujte verzi podle šablony MAJOR.MINOR.PATCH+build.N, kde N je pořadové číslo CI sestavení nebo commit SHA.
Nastavte zásady automatického čištění: uchovávejte posledních 10-20 release a 30-50 snapshot verzí. Staré verze lze archivovat v chladném úložišti (S3 Glacier, Google Coldline) pro soulad s předpisy.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také