CI/CD لمشاريع Java: GitHub Actions من الألف إلى الياء

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة: لماذا CI/CD هو المعيار الحديث لتطوير Java

\n

في عالم تطوير Java، سرعة وجودة تسليم الكود أمران حاسمان. كل يوم، تقدم الفرق مئات التغييرات، وبدون أتمتة، تتحول عملية التكامل إلى فوضى. CI/CD (التكامل المستمر / النشر المستمر) يحل هذه المشكلة: يتم بناء الكود واختباره ونشره تلقائيًا على الخوادم.

\n

أداة GitHub Actions هي حل مدمج لـ CI/CD مباشرة في المستودع. تتيح لك إنشاء خطوط أنابيب (workflows) بصيغة YAML تستجيب لأحداث push أو pull request أو غيرها. في هذه المقالة، سنشرح الدورة الكاملة لإعداد CI/CD لمشروع Java: من البناء الأساسي إلى النشر في السحابة.

\n

ستتعلم كيفية تسريع التطوير، وتجنب الأخطاء، وأتمتة المهام الروتينية. هيا بنا!

\n\n

1. أساسيات GitHub Actions: هيكل workflow

\n

ما هو GitHub Actions؟

\n

GitHub Actions هي منصة لأتمتة سير العمل. Workflow (سير العمل) هو مجموعة من الخطوات التي يتم تنفيذها عند حدوث حدث (مثل push إلى فرع main). يتكون كل workflow من:

\n
    \n
  • Event — المشغل (push, pull_request, schedule).
  • \n
  • Jobs — المهام التي يتم تنفيذها على أجهزة افتراضية (runner).
  • \n
  • Steps — الإجراءات المحددة (تشغيل سكريبت، تثبيت التبعيات).
  • \n
\n

بالنسبة لمشروع Java، يتضمن workflow النموذجي: تحميل الكود، تثبيت JDK، بناء Maven/Gradle، تشغيل الاختبارات، ونشر القطع الأثرية.

\n\n

إنشاء أول workflow لمشروع Java

\n

أنشئ مجلد .github/workflows/ في جذر المستودع وملف ci.yml. إليك مثال بسيط لمشروع Maven:

\n
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\n

2. إعداد متقدم: التخزين المؤقت، المصفوفات، والقطع الأثرية

\n

التخزين المؤقت للتبعيات

\n

يقوم Maven و Gradle بتنزيل التبعيات من جديد في كل مرة - وهذا بطيء. يدعم GitHub Actions التخزين المؤقت. أضف خطوة باستخدام actions/cache:

\n
- 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 مرات.

\n\n

مصفوفة البناء (Matrix Build)

\n

غالبًا ما يتم اختبار مشاريع Java على إصدارات متعددة من JDK وأنظمة التشغيل. استخدم استراتيجية matrix:

\n
jobs:\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                

المدونات

توصيات الكتب