الأرتيفكت (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 يقلل حجم التطبيق المثبت بمعدل 15-20% مقارنة بـ APK العالمي.
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 cache, CocoaPods cache) تسرع عمليات البناء المتكررة ولكنها ليست مخصصة للنشر. الأرتيفكتات هي المنتج النهائي الجاهز للتوزيع. حدد 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 — نشر 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 أنتج أرتيفكتًا معينًا ومتى تم إنشاؤه بالضبط.
يجب أن يحتوي كل أرتيفكت على بيانات وصفية حول مصدره: SHA الـ commit، رقم بناء CI، اسم الفرع، تاريخ البناء. هذه المعلومات تُسجل في بيان الأرتيفكت وتتيح إعادة بناء سياق إنشائه في أي وقت. بدون التتبع، يصبح العمل مع الأرتيفكتات تخمينًا للإصدارات، وهو أمر غير مقبول لأنظمة الإنتاج ذات متطلبات التدقيق.
اتفاقية التسمية: {project}-{module}-{version}.{ext}. على سبيل المثال: messaging-sdk-2.4.1.aar أو app-release-2.4.1.apk. يمكن لخادم البناء إنشاء إصدار تلقائيًا بناءً على علامة Git أو رقم بناء نظام CI.
في سجلات أرتيفكتات Maven/Gradle، يتم تمييز إصدارات الإصدار (ثابتة، غير قابلة للتغيير) وإصدارات snapshot (التطوير الحالي، يمكن الكتابة فوقها). في خطوط أنابيب CI/CD، تكون أرتيفكتات snapshot مناسبة للتطوير، ولكن في الإنتاج يجب استخدام إصدارات الإصدار فقط.
الأرتيفكتات عنصر رئيسي في سلسلة توريد البرمجيات. اختراق الأرتيفكت يمكن أن يؤدي إلى دخول كود ضار إلى الإنتاج. يشمل أمان الأرتيفكتات عدة مستويات من الحماية.
يتم توقيع ملفات 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 (أقصى). يجب على خادم البناء إنشاء شهادة إثبات المنشأ — بيان موقع تشفيريًا حول كيف ومن أي كود تم بناء الأرتيفكت.
الأسئلة الشائعة
APK هو حزمة شاملة بجميع الموارد، بينما AAB هو تنسيق معياري حيث يوصل Google Play الموارد الضرورية فقط لجهاز معين. AAB أصغر حجمًا ويوصى به من Google للتطبيقات الجديدة.
من الأفضل في أنظمة متخصصة (Artifactory, Nexus, GitHub Packages)، بدلاً من خادم CI أو مستودع الكود. توفر إدارة الإصدارات والتحكم في الوصول والتكامل مع CI/CD والتنظيف التلقائي للإصدارات القديمة.
نعم، جميع الأرتيفكتات المخصصة لاستخدام الإنتاج يجب أن تكون موقعة. للتطبيقات المحمولة، التوقيع إلزامي للتثبيت على الأجهزة والنشر في المتاجر.
استخدم علامة Git أو رقم بناء نظام CI. قم بإنشاء الإصدار تلقائيًا باستخدام قالب MAJOR.MINOR.PATCH+build.N، حيث N هو رقم بناء CI التسلسلي أو SHA الـ commit.
قم بتكوين سياسة تنظيف تلقائي: احتفظ بآخر 10-20 إصدارًا للإصدار و30-50 إصدار snapshot. يمكن أرشفة الإصدارات القديمة في تخزين بارد (S3 Glacier, Google Coldline) للامتثال.
الملخص
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.
اقرأ أيضًا