مقدمة: لماذا CI/CD هو المعيار الحديث لتطوير Java
\nفي عالم تطوير Java، سرعة وجودة تسليم الكود أمران حاسمان. كل يوم، تقدم الفرق مئات التغييرات، وبدون أتمتة، تتحول عملية التكامل إلى فوضى. CI/CD (التكامل المستمر / النشر المستمر) يحل هذه المشكلة: يتم بناء الكود واختباره ونشره تلقائيًا على الخوادم.
\nأداة GitHub Actions هي حل مدمج لـ CI/CD مباشرة في المستودع. تتيح لك إنشاء خطوط أنابيب (workflows) بصيغة YAML تستجيب لأحداث push أو pull request أو غيرها. في هذه المقالة، سنشرح الدورة الكاملة لإعداد CI/CD لمشروع Java: من البناء الأساسي إلى النشر في السحابة.
\nستتعلم كيفية تسريع التطوير، وتجنب الأخطاء، وأتمتة المهام الروتينية. هيا بنا!
\n\n1. أساسيات GitHub Actions: هيكل workflow
\nما هو GitHub Actions؟
\nGitHub Actions هي منصة لأتمتة سير العمل. Workflow (سير العمل) هو مجموعة من الخطوات التي يتم تنفيذها عند حدوث حدث (مثل push إلى فرع main). يتكون كل workflow من:
\n- \n
- Event — المشغل (push, pull_request, schedule). \n
- Jobs — المهام التي يتم تنفيذها على أجهزة افتراضية (runner). \n
- Steps — الإجراءات المحددة (تشغيل سكريبت، تثبيت التبعيات). \n
بالنسبة لمشروع Java، يتضمن workflow النموذجي: تحميل الكود، تثبيت JDK، بناء Maven/Gradle، تشغيل الاختبارات، ونشر القطع الأثرية.
\n\nإنشاء أول workflow لمشروع Java
\nأنشئ مجلد .github/workflows/ في جذر المستودع وملف ci.yml. إليك مثال بسيط لمشروع Maven:
name: Java CI with Maven\n\non:\n push:\n branches: [ main ]\n pull_request:\n branches: [ main ]\n\njobs:\n build:\n runs-on: ubuntu-latest\n\n steps:\n - uses: actions/checkout@v4\n - name: Set up JDK 17\n uses: actions/setup-java@v4\n with:\n java-version: '17'\n distribution: 'temurin'\n - name: Build with Maven\n run: mvn clean compile\n - name: Run tests\n run: mvn test\nيتم تشغيل هذا workflow عند push أو pull request في main. يتحقق من أن الكود يتم تجميعه وأن الاختبارات تمر. إذا فشل الاختبار، ينتهي workflow بخطأ، وستتلقى إشعارًا.
\n\n2. إعداد متقدم: التخزين المؤقت، المصفوفات، والقطع الأثرية
\nالتخزين المؤقت للتبعيات
\nيقوم Maven و Gradle بتنزيل التبعيات من جديد في كل مرة - وهذا بطيء. يدعم GitHub Actions التخزين المؤقت. أضف خطوة باستخدام actions/cache:
- name: Cache Maven packages\n uses: actions/cache@v4\n with:\n path: ~/.m2/repository\n key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}\n restore-keys: |\n ${{ runner.os }}-maven-\nيعتمد مفتاح التخزين المؤقت على تجزئة pom.xml. إذا لم يتغير الملف، يتم استعادة التبعيات من التخزين المؤقت، مما يقلص وقت البناء بمقدار 2-3 مرات.
مصفوفة البناء (Matrix Build)
\nغالبًا ما يتم اختبار مشاريع Java على إصدارات متعددة من JDK وأنظمة التشغيل. استخدم استراتيجية matrix:
\njobs:\n test:\n runs-on: ubuntu-latest\n strategy:\n matrix:\n java: [11, 17, 21]\n steps:\n - uses: actions/checkout@v4\n - name: Set up JDK ${{ matrix.java }}\n uses: actions/setup-java@v4\n with:\n java-version: ${{ matrix.java }}\n distribution: 'temurin'\n - name: Test with Maven\n run: mvn test\nسينشئ GitHub 3 وظائف متوازية - لـ Java 11 و 17 و 21. وهذا يضمن توافق الكود مع إصدارات مختلفة من JDK.
\n\nحفظ القطع الأثرية
\nبعد البناء، يمكن حفظ ملف JAR كقطعة أثرية لتنزيلها يدويًا أو استخدامها في الوظيفة التالية:
\n- name: Upload JAR artifact\n uses: actions/upload-artifact@v4\n with