آرٹیفیکٹ (Artifact) بلڈ عمل کا حتمی نتیجہ ہے جسے ہدف ڈیوائس پر تعینات کیا جا سکتا ہے یا دوسرے پروجیکٹس میں انحصار کے طور پر استعمال کیا جا سکتا ہے۔ آرٹیفیکٹ میں موبائل ایپلیکیشنز کی APK اور IPA فائلیں، Docker امیجز، JAR/WAR لائبریریاں اور انسٹالیشن پیکیجز شامل ہیں۔ JFrog State of Software Supply Chain, 2025 کے مطابق، تنظیمیں ایک رجسٹری میں 10 ٹیرابائٹ تک آرٹیفیکٹ ذخیرہ کر سکتی ہیں، جو آرٹیفیکٹ مینجمنٹ سسٹم کو انتہائی اہم بناتا ہے۔
اہم نکات
آرٹیفیکٹ (بلڈ آرٹیفیکٹ) سورس کوڈ کی ترتیب کا نتیجہ ہے، تعیناتی یا انحصار کے طور پر استعمال کے لیے تیار۔ بلڈ کا عمل سورس فائلوں (Java، Kotlin، Swift، C++ اور دیگر) کو بائنری پیکیجز میں تبدیل کرتا ہے جو ہدف ڈیوائس یا سرور پر چلائے جا سکتے ہیں۔
آرٹیفیکٹ کا تصور قابل عمل فائلوں سے آگے بڑھتا ہے۔ مثال کے طور پر، ایک JAR لائبریری ایک آرٹیفیکٹ ہے جو دوسرے پروجیکٹس میں انحصار کے طور پر استعمال ہوتی ہے۔ Docker امیج ایک آرٹیفیکٹ ہے جس میں ایپلیکیشن اور اس کا ماحول شامل ہوتا ہے۔ یہاں تک کہ ٹیسٹ کوریج رپورٹ بھی CI/CD سیاق و سباق میں ایک آرٹیفیکٹ سمجھی جا سکتی ہے۔
بڑی کمپنیوں میں جدید ڈویلپمنٹ میں سیکڑوں ہزاروں آرٹیفیکٹ کا انتظام شامل ہے۔ Google DORA آرٹیفیکٹ مینجمنٹ کی پختگی کو مجموعی DevOps مؤثریت سے منسلک کرتا ہے — آرٹیفیکٹ رجسٹری استعمال کرنے والی ٹیمیں تیزی سے ریلیز جاری کرتی ہیں اور تعیناتی کے مسائل سے کم دوچار ہوتی ہیں۔
ہر آرٹیفیکٹ کئی مراحل سے گزرتا ہے: تخلیق (بلڈ، ترتیب)، توثیق (ٹیسٹ، سیکیورٹی جانچ)، ذخیرہ (آرٹیفیکٹ رجسٹری)، تقسیم (ڈاؤن لوڈ کے لیے اشاعت) اور آرکائیو یا حذف (جب ورژن پرانا ہو جائے)۔
مختلف پلیٹ فارمز اور ٹیکنالوجیز مختلف آرٹیفیکٹ فارمیٹ تیار کرتی ہیں۔ فارمیٹ کو سمجھنا CI/CD پائپ لائن کو درست طریقے سے ترتیب دینے اور ذخیرہ کا نظام منتخب کرنے کے لیے ضروری ہے۔
APK (Android Package Kit) روایتی انسٹالیشن پیکیج فارمیٹ ہے۔ AAB (Android App Bundle) Google Play پر اشاعت کے لیے ایک جدید فارمیٹ ہے، جس میں صرف ایک مخصوص ڈیوائس کے لیے ضروری وسائل ہوتے ہیں۔ AAB جامع APK کے مقابلے میں انسٹال شدہ ایپلیکیشن کے سائز کو اوسطاً 15-20% کم کرتا ہے۔
IPA (iOS App Store Package) iOS آلات کے لیے کوڈ اور وسائل کے ساتھ ایک آرکائیو ہے۔ XCArchive ایک ابتدائی آرٹیفیکٹ ہے جو Xcode کے ذریعے بنایا جاتا ہے، جس سے حتمی IPA برآمد کیا جاتا ہے۔ dSYM ایک ڈبگ سمبل فائل ہے جو کریش لاگز کی سمبولائزیشن کے لیے ضروری ہے۔
| پلیٹ فارم | فارمیٹ | ایکسٹینشن | مقصد |
|---|---|---|---|
| Android | APK | .apk | انسٹالیشن پیکیج |
| Android | AAB | .aab | Google Play اشاعت |
| iOS | IPA | .ipa | انسٹالیشن پیکیج |
| iOS | dSYM | .dSYM.zip | ڈبگ سمبلز |
| Flutter | Bundle | .zip, .tar.gz | ویب/ڈیسک ٹاپ بلڈز |
JAR (Java ARchive) — Java/Kotlin لائبریریوں کے لیے۔ AAR (Android ARchive) — وسائل کے ساتھ Android لائبریریوں کے لیے۔ Docker امیجز — مائیکرو سروسز کے لیے کنٹینر آرٹیفیکٹ۔ ہر قسم کی اپنی رجسٹری اور ورژن مینجمنٹ کے قواعد ہیں۔
آرٹیفیکٹ پائپ لائن کے مراحل کے درمیان ربط ہیں۔ ہر مرحلہ پچھلے مرحلے سے آرٹیفیکٹ استعمال کرتا ہے اور نئے بناتا ہے۔ اس بہاؤ کو سمجھنا ایک مؤثر CI/CD پائپ لائن قائم کرنے کے لیے اہم ہے۔
ایک عام بہاؤ میں شامل ہے: commit -> بلڈ سرور کوڈ ترتیب دیتا ہے اور ایک غیر بہتر آرٹیفیکٹ بناتا ہے -> ٹیسٹ آرٹیفیکٹ ٹیسٹ چلانے کے لیے استعمال ہوتا ہے -> کامیابی پر، ایک ریلیز آرٹیفیکٹ بنایا جاتا ہے -> اس پر دستخط ہوتے ہیں اور آرٹیفیکٹ رجسٹری میں شائع کیا جاتا ہے -> آرٹیفیکٹ اسٹیجنگ اور پروڈکشن میں تعیناتی کے لیے رجسٹری سے لیا جاتا ہے۔ مراحل کے درمیان ہر منتقلی سالمیت کی جانچ اور ضرورت کی تعمیل کی تصدیق کے ساتھ ہوتی ہے۔
پائپ لائن مختلف مراحل میں متعدد آرٹیفیکٹ بنا سکتی ہے۔ ڈبگ آرٹیفیکٹ میں ڈبگنگ معلومات ہوتی ہیں، غیر بہتر ٹیسٹ کے لیے جلدی بنائے جاتے ہیں، ریلیز آرٹیفیکٹ بہتری اور مبہمیت کے ساتھ حتمی ہوتے ہیں۔ 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 کیشے، CocoaPods کیشے) بار بار بلڈ کو تیز کرتا ہے لیکن تعیناتی کے لیے نہیں ہے۔ آرٹیفیکٹ حتمی پروڈکٹ ہیں، تقسیم کے لیے تیار۔ کیشے کے لیے کئی دنوں کا TTL مقرر کریں، اور آرٹیفیکٹ کے لیے ہفتے یا مہینے۔
آرٹیفیکٹ بلڈ سرور پر ذخیرہ نہیں کرنے چاہئیں — اس مقصد کے لیے خصوصی نظام موجود ہیں۔ ایک ریپوزٹری مینیجر مرکزی ذخیرہ، انڈیکسنگ، رسائی کنٹرول اور CI/CD ٹولز کے ساتھ انضمام فراہم کرتا ہے۔
JFrog Artifactory — ایک عالمی مینیجر جو Maven، Gradle، Docker، NuGet، npm، APT، YUM کو سپورٹ کرتا ہے۔ Sonatype Nexus — ایک اوپن سورس متبادل جو اہم فارمیٹس کو سپورٹ کرتا ہے۔ GitHub Packages — GitHub میں ایک بلٹ ان رجسٹری، پہلے سے GitHub استعمال کرنے والی ٹیموں کے لیے آسان۔ GitLab Container Registry — Docker امیجز کے لیے۔
اہم عوامل: سپورٹ شدہ فارمیٹس، لائسنسنگ ماڈل (اوپن سورس/انٹرپرائز)، موجودہ CI/CD کے ساتھ انضمام، خطوں کے درمیان نقل کرنے کی صلاحیتیں، پرانے ورژنز کے لیے خودکار صفائی کی پالیسیوں کی دستیابی اور تعمیل رپورٹس۔
// Jenkins pipeline — Artifactory میں APK شائع کرنا
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۔ یہ آپ کو یہ تعین کرنے کی اجازت دیتا ہے کہ کس کمٹ نے ایک مخصوص آرٹیفیکٹ بنایا اور یہ کب تخلیق ہوا۔
ہر آرٹیفیکٹ کو اپنی اصلیت کے بارے میں میٹا ڈیٹا رکھنا چاہیے: کمٹ SHA، CI بلڈ نمبر، برانچ کا نام، بلڈ کی تاریخ۔ یہ معلومات آرٹیفیکٹ مینی فیسٹ میں ریکارڈ کی جاتی ہیں اور کسی بھی وقت اس کی تخلیق کے سیاق و سباق کو دوبارہ تشکیل دینے کی اجازت دیتی ہیں۔ ٹریس ایبلٹی کے بغیر، آرٹیفیکٹ کے ساتھ کام کرنا ورژن کا اندازہ لگانے میں بدل جاتا ہے، جو آڈٹ کی ضروریات والے پروڈکشن سسٹمز کے لیے ناقابل قبول ہے۔
نام دینے کی روایت: {project}-{module}-{version}.{ext}۔ مثال کے طور پر: messaging-sdk-2.4.1.aar یا app-release-2.4.1.apk۔ بلڈ سرور Git ٹیگ یا CI سسٹم بلڈ نمبر کی بنیاد پر خود بخود ورژن بنا سکتا ہے۔
Maven/Gradle آرٹیفیکٹ رجسٹریوں میں، ریلیز ورژن (مقررہ، ناقابل تبدیلی) اور سنیپ شاٹ ورژن (موجودہ ترقی، اوور رائٹ کیے جا سکتے ہیں) میں فرق کیا جاتا ہے۔ CI/CD پائپ لائنوں میں، سنیپ شاٹ آرٹیفیکٹ ترقی کے لیے آسان ہیں، لیکن پروڈکشن میں صرف ریلیز ورژن استعمال کرنے چاہئیں۔
آرٹیفیکٹ سافٹ ویئر سپلائی چین کا ایک اہم عنصر ہیں۔ آرٹیفیکٹ سے سمجھوتہ پروڈکشن میں نقصان دہ کوڈ کے داخل ہونے کا سبب بن سکتا ہے۔ آرٹیفیکٹ سیکیورٹی میں کئی تحفظ کی سطحیں شامل ہیں۔
APK فائلوں پر jarsigner یا apksigner سے دستخط کیے جاتے ہیں؛ IPA فائلوں پر Apple سرٹیفکیٹ سے دستخط کیے جاتے ہیں؛ Docker امیجز پر Docker کے Content Trust (Notary) سے دستخط کیے جاتے ہیں۔ دستخط سالمیت کی ضمانت دیتا ہے اور آرٹیفیکٹ کے مصنف کی تصدیق کرتا ہے۔ 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 ٹیگ یا CI سسٹم بلڈ نمبر استعمال کریں۔ MAJOR.MINOR.PATCH+build.N ٹیمپلیٹ کا استعمال کرتے ہوئے خود بخود ورژن بنائیں، جہاں N ترتیب وار CI بلڈ نمبر یا کمٹ SHA ہے۔
ایک خودکار صفائی کی پالیسی ترتیب دیں: تازہ ترین 10-20 ریلیز ورژن اور 30-50 سنیپ شاٹ ورژن رکھیں۔ پرانے ورژنز کو تعمیل کے لیے کولڈ اسٹوریج (S3 Glacier, Google Coldline) میں آرکائیو کیا جا سکتا ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں