Yapıt (Artifact), bir derleme sürecinin nihai sonucudur ve hedef cihaza dağıtılabilir veya diğer projelerde bağımlılık olarak kullanılabilir. Yapıtlar, mobil uygulamaların APK ve IPA dosyalarını, Docker görüntülerini, JAR/WAR kitaplıklarını ve kurulum paketlerini içerir. JFrog State of Software Supply Chain, 2025'e göre kuruluşlar, tek bir kayıt defterinde 10 terabayta kadar yapıt depolayabilir, bu da yapıt yönetim sistemlerini kritik derecede önemli hale getirir.
Önemli Noktalar
Yapıt (derleme yapıtı), kaynak kodun derlenmesinin sonucudur ve dağıtıma veya bağımlılık olarak kullanıma hazırdır. Derleme süreci, kaynak dosyaları (Java, Kotlin, Swift, C++ ve diğerleri) hedef cihazda veya sunucuda çalıştırılabilen ikili paketlere dönüştürür.
Yapıt kavramı yürütülebilir dosyaların ötesine geçer. Örneğin, bir JAR kitaplığı diğer projelerde bağımlılık olarak kullanılan bir yapıttır. Bir Docker görüntüsü, uygulamayı ve ortamını içeren bir yapıttır. Bir test kapsama raporu bile CI/CD bağlamında bir yapıt olarak kabul edilebilir.
Büyük şirketlerde modern geliştirme, yüz binlerce yapıtın yönetimini içerir. Google DORA, yapıt yönetimi olgunluğunu genel DevOps etkinliğiyle ilişkilendirir — yapıt kayıt defterlerini kullanan ekipler daha hızlı sürüm yayınlar ve daha az dağıtım sorunuyla karşılaşır.
Her yapıt birkaç aşamadan geçer: oluşturma (derleme), doğrulama (testler, güvenlik kontrolleri), depolama (yapıt kayıt defteri), dağıtma (indirme için yayınlama) ve arşivleme veya silme (sürüm eskidiğinde).
Farklı platformlar ve teknolojiler farklı yapıt biçimleri üretir. Biçimleri anlamak, CI/CD boru hattını doğru yapılandırmak ve bir depolama sistemi seçmek için önemlidir.
APK (Android Package Kit) geleneksel kurulum paketi biçimidir. AAB (Android App Bundle), Google Play'de yayınlamak için modern bir biçimdir ve yalnızca belirli bir cihazın ihtiyaç duyduğu kaynakları içerir. AAB, evrensel bir APK'ya kıyasla kurulu uygulama boyutunu ortalama %15-20 oranında azaltır.
IPA (iOS App Store Package), iOS cihazları için kod ve kaynak içeren bir arşivdir. XCArchive, Xcode tarafından oluşturulan bir ara yapıttır ve nihai IPA buradan dışa aktarılır. dSYM, çökme günlüklerinin simgeleştirilmesi için gereken bir hata ayıklama sembol dosyasıdır.
| Platform | Biçim | Uzantı | Amaç |
|---|---|---|---|
| Android | APK | .apk | Kurulum paketi |
| Android | AAB | .aab | Google Play yayını |
| iOS | IPA | .ipa | Kurulum paketi |
| iOS | dSYM | .dSYM.zip | Hata ayıklama sembolleri |
| Flutter | Bundle | .zip, .tar.gz | Web/Masaüstü derlemeleri |
JAR (Java ARchive) — Java/Kotlin kitaplıkları için. AAR (Android ARchive) — kaynak içeren Android kitaplıkları için. Docker görüntüleri — mikro hizmetler için konteyner yapıtları. Her türün kendi kayıt defteri ve sürüm yönetimi kuralları vardır.
Yapıtlar, boru hattı aşamaları arasındaki bağlantıdır. Her aşama bir önceki aşamadan yapıtları tüketir ve yenilerini üretir. Bu akışı anlamak, etkili bir CI/CD boru hattı kurmak için kritiktir.
Tipik bir akış şunları içerir: commit -> derleme sunucusu kodu derler ve optimize edilmemiş bir yapıt oluşturur -> test yapıtı testleri çalıştırmak için kullanılır -> başarılı olursa, bir sürüm yapıtı oluşturulur -> imzalanır ve yapıt kayıt defterinde yayınlanır -> yapıt, hazırlama ve üretime dağıtılmak üzere kayıt defterinden alınır. Aşamalar arasındaki her geçişe bir bütünlük kontrolü ve gereksinim uygunluk doğrulaması eşlik eder.
Boru hattı, farklı aşamalarda birden çok yapıt oluşturabilir. Hata ayıklama yapıtları hata ayıklama bilgileri içerir, optimize edilmemiş olanlar test için hızlıca derlenir, sürüm yapıtları optimizasyon ve gizleme ile nihaidir. CI sistemi bunları ayırt edebilmeli ve her tür için uygun saklama politikaları uygulayabilmelidir.
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
Bağımlılık önbelleği ile derleme yapıtlarını ayırt etmek önemlidir. Önbellek (Gradle önbelleği, CocoaPods önbelleği) tekrarlanan derlemeleri hızlandırır ancak dağıtım için tasarlanmamıştır. Yapıtlar dağıtıma hazır nihai üründür. Önbellek için birkaç günlük, yapıtlar için haftalar veya aylar TTL ayarlayın.
Yapıtlar derleme sunucusunda saklanmamalıdır — bunun için özelleşmiş sistemler vardır. Bir Depo Yöneticisi, merkezi depolama, dizin oluşturma, erişim kontrolü ve CI/CD araçlarıyla entegrasyon sağlar.
JFrog Artifactory — Maven, Gradle, Docker, NuGet, npm, APT, YUM'u destekleyen evrensel bir yönetici. Sonatype Nexus — ana biçimleri destekleyen açık kaynak bir alternatif. GitHub Packages — GitHub'da yerleşik kayıt defteri, zaten GitHub kullanan ekipler için uygun. GitLab Container Registry — Docker görüntüleri için.
Temel faktörler: desteklenen biçimler, lisanslama modeli (açık kaynak/kurumsal), mevcut CI/CD ile entegrasyon, bölgeler arası çoğaltma yetenekleri, eski sürümler için otomatik temizleme politikalarının mevcudiyeti ve uyumluluk raporları.
// Jenkins pipeline — Artifactory'de APK yayınlama
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)
Uygun bir yapıt sürümleme stratejisi, derleme tekrarlanabilirliği ve değişiklik takibi için çok önemlidir. Sürümleme olmadan, üretimde bir soruna hangi kod sürümünün neden olduğunu belirlemek imkansızdır.
MAJOR.MINOR.PATCH standardı: MAJOR uyumsuz API değişiklikleriyle, MINOR geriye dönük uyumlu işlev eklemeleriyle, PATCH geriye dönük uyumlu hata düzeltmeleriyle değişir. CI/CD için sürüme derleme meta verileri eklenir: 2.4.1+build.20260703.1. Bu, belirli bir yapıtı hangi commit'in ürettiğini ve ne zaman oluşturulduğunu tam olarak belirlemenizi sağlar.
Her yapıt, kökeni hakkında meta veriler içermelidir: commit SHA'sı, CI derleme numarası, dal adı, derleme tarihi. Bu bilgiler yapıt bildirimine kaydedilir ve herhangi bir zamanda oluşturma bağlamının yeniden yapılandırılmasına olanak tanır. İzlenebilirlik olmadan, yapıtlarla çalışmak sürüm tahminine dönüşür ve bu, denetim gereksinimleri olan üretim sistemleri için kabul edilemez.
Adlandırma kuralı: {project}-{module}-{version}.{ext}. Örneğin: messaging-sdk-2.4.1.aar veya app-release-2.4.1.apk. Derleme sunucusu, bir Git etiketine veya CI sistemi derleme numarasına göre otomatik olarak bir sürüm oluşturabilir.
Maven/Gradle yapıt kayıt defterlerinde, sürüm sürümleri (sabit, değiştirilemez) ve anlık görüntü sürümleri (mevcut geliştirme, üzerine yazılabilir) ayırt edilir. CI/CD boru hatlarında, anlık görüntü yapıtları geliştirme için uygundur, ancak üretimde yalnızca sürüm sürümleri kullanılmalıdır.
Yapıtlar, yazılım tedarik zincirinin önemli bir unsurudur. Bir yapıtın tehlikeye girmesi, kötü amaçlı kodun üretime girmesine neden olabilir. Yapıt güvenliği birkaç koruma düzeyi içerir.
APK dosyaları jarsigner veya apksigner ile imzalanır; IPA dosyaları bir Apple sertifikasıyla imzalanır; Docker görüntüleri Docker'ın Content Trust (Notary) ile imzalanır. İmzalama bütünlüğü garanti eder ve yapıt yazarını doğrular. CI/CD boru hattı, tüm üçüncü taraf bağımlılıkların imza doğrulamasını içermelidir.
Yayınlamadan önce, yapıt otomatik tarayıcılar tarafından kontrol edilir: Snyk, Trivy, Sonatype Nexus IQ, GitHub Dependabot. Dahil edilen bağımlılıkları, kullanılan kitaplıkların sürümlerini ve bilinen CVE güvenlik açıklarını analiz ederler. Kritik bir güvenlik açığı tespit edilirse, geliştiriciler tarafından düzeltilene kadar sürüm derhal engellenir.
SLSA (Supply chain Levels for Software Artifacts), SLSA 1 (temel) ile SLSA 4 (maksimum) arasında güven düzeyleri tanımlayan bir güvenlik çerçevesidir. Derleme sunucusu, yapıtın nasıl ve hangi koddan oluşturulduğuna dair kriptografik olarak imzalanmış bir beyan (köken kanıtı) üretmelidir.
Sıkça Sorulan Sorular
APK tüm kaynakları içeren evrensel bir pakettir, AAB ise Google Play'in belirli bir cihaz için yalnızca gerekli kaynakları sağladığı modüler bir biçimdir. AAB daha küçüktür ve Google tarafından yeni uygulamalar için önerilir.
Tercihen özelleşmiş sistemlerde (Artifactory, Nexus, GitHub Packages), CI sunucusu veya kod deposunda değil. Sürümleme, erişim kontrolü, CI/CD entegrasyonu ve eski sürümlerin otomatik temizliğini sağlarlar.
Evet, üretim kullanımı için tasarlanan tüm yapıtlar imzalanmalıdır. Mobil uygulamalar için, cihazlara kurulum ve mağazalarda yayınlama için imzalama zorunludur.
Bir Git etiketi veya CI sistemi derleme numarası kullanın. MAJOR.MINOR.PATCH+build.N şablonunu kullanarak sürümü otomatik olarak oluşturun (N sıralı CI derleme numarası veya commit SHA'sıdır).
Bir otomatik temizleme politikası yapılandırın: son 10-20 sürüm sürümünü ve 30-50 anlık görüntü sürümünü saklayın. Eski sürümler, uyumluluk için soğuk depolamada (S3 Glacier, Google Coldline) arşivlenebilir.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun