CI/CD لمشاريع Java: GitHub Actions

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

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

ابدأ الدورة
```html

مقدمة: أتمتة تطوير Java باستخدام GitHub Actions

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

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

1. أساسيات GitHub Actions للغة Java: Workflow و Jobs و Steps

قبل كتابة الكود، من المهم فهم بنية GitHub Actions. يتم تعريف كل خط أنابيب في ملف .github/workflows/*.yml. المكونات الرئيسية هي:

  • Workflow — هو خط الأنابيب نفسه. يحتوي على وظيفة واحدة أو أكثر (jobs).
  • Jobs — كتل منطقية يتم تنفيذها على مشغل واحد (جهاز افتراضي). يمكن أن تعتمد الوظائف على بعضها البعض.
  • Steps — أوامر محددة داخل الوظيفة: تثبيت JDK، تشغيل Maven، نشر القطع الأثرية.

بالنسبة لمشاريع Java، الخطوة الأساسية هي إعداد Java Development Kit (JDK). يوفر GitHub Actions إجراءً جاهزًا actions/setup-java يدعم جميع توزيعات JDK الشائعة (Oracle، OpenJDK، Adoptium).

name: Java CI/CD Pipeline

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4
      - name: Set up JDK 17
        uses: actions/setup-java@v4
        with:
          java-version: '17'
          distribution: 'temurin'
      - name: Build with Maven
        run: mvn clean install --file pom.xml

في هذا المثال، أنشأنا workflow أساسي يتم تشغيله عند push أو pull request إلى الفرع main. يستخدم Ubuntu، ويقوم بتثبيت JDK 17 (توزيعة Temurin)، وينفذ بناء Maven. هذه هي المجموعة الدنيا للتكامل المستمر (Continuous Integration).

2. البناء والاختبار: Maven و Gradle والتخزين المؤقت

البناء هو قلب CI/CD. ومع ذلك، مجرد تشغيل mvn install ليس كافيًا. في المشاريع الكبيرة، قد يستغرق تحميل التبعيات دقائق. لتسريع العملية، استخدم التخزين المؤقت. يتيح لك GitHub Actions تخزين الدليل ~/.m2/repository (لـ Maven) أو ~/.gradle/caches (لـ Gradle) مؤقتًا.

إليك مثال مع التخزين المؤقت لـ Maven:

jobs:
  build-and-test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Cache Maven dependencies
        uses: actions/cache@v3
        with:
          path: ~/.m2/repository
          key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
          restore-keys: |
            ${{ runner.os }}-maven-

      - name: Set up JDK 17
        uses: actions/setup-java@v4
        with:
          java-version: '17'
          distribution: 'temurin'

      - name: Build and run tests
        run: mvn clean verify --file pom.xml

      - name: Upload test results
        if: always()
        uses: actions/upload-artifact@v4
        with:
          name: test-results
          path: target/surefire-reports/

لاحظ العلامة if: always() في خطوة تحميل نتائج الاختبار. وهي تضمن رفع القطعة الأثرية (artifact) حتى في حالة فشل الخطوات السابقة.

```

المدونات

توصيات الكتب