مقدمة إلى CI/CD لمشاريع Java باستخدام GitHub Actions
تطوير البرمجيات الحديث لا يمكن أن يتم بدون أتمتة عمليات البناء والاختبار والنشر. CI/CD (التكامل المستمر / النشر المستمر) هو مجموعة من الممارسات التي تتيح للفرق توصيل التغييرات إلى الإنتاج بسرعة وأمان. بالنسبة لمشاريع Java، واحدة من أكثر الأدوات ملاءمة هي GitHub Actions — نظام CI/CD مدمج لا يتطلب إعداد خادم منفصل.
في هذه المقالة، سنشرح كيفية إعداد pipeline لتطبيق Java: بدءًا من التجميع وتشغيل الاختبارات وصولاً إلى نشر القطع الأثرية. ستتعلم كيفية استخدام Maven وJUnit وGitHub Actions لإنشاء عملية توصيل موثوقة.
1. أساسيات GitHub Actions: هيكل workflow
يعمل GitHub Actions بناءً على workflow — ملفات تكوين بتنسيق YAML، تُخزَّن في مجلد .github/workflows. يتكون كل workflow من واحدة أو أكثر من jobs، والتي يتم تنفيذها على أجهزة افتراضية (runners).
بالنسبة لمشروع Java، يتضمن workflow النموذجي الخطوات التالية:
- Checkout — استنساخ المستودع
- Setup JDK — تثبيت الإصدار المطلوب من Java
- Cache — تخزين تبعيات Maven/Gradle مؤقتًا لتسريع البناء
- Build & Test — التجميع وتشغيل الاختبارات
- Deploy — نشر القطع الأثرية (اختياري)
دعنا نلقي نظرة على مثال أساسي لتكوين Java 17 وMaven:
name: Java CI with Maven
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' cache: maven
- name: Build with Maven run: mvn -B package --file pom.xml
- name: Run tests run: mvn test
- name: Upload JAR artifact uses: actions/upload-artifact@v4 with: name: app-jar path: target/*.jarيتم تشغيل هذا workflow عند كل push أو pull request إلى الفرع main. يقوم ببناء المشروع، وتشغيل الاختبارات، وحفظ ملف JAR كقطعة أثرية.
2. إعداد متقدم: الاختبار وجودة الكود
البناء البسيط هو مجرد بداية. في المشاريع الحقيقية، من المهم التحكم في جودة الكود. دعنا نضيف إلى workflow خطوات للتحليل الثابت وإنشاء التقارير.
أولاً، سنقوم بتوصيل JaCoCo لقياس تغطية الكود بالاختبارات. أضف البرنامج المساعد إلى pom.xml:
<plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>0.8.11</version> <executions> <execution> <goals><goal>prepare-agent</goal></goals> </execution> <execution> <id>report</id> <phase>test</phase> <goals><goal>report</goal></goals> </execution> </executions></plugin>الآن، سنقوم بتحديث workflow بإضافة فحص التغطية ونشر التقرير:
- name: Run tests with coverage run: mvn verify
- name: Upload JaCoCo report uses: actions/upload-artifact@v4 with: name: coverage-report path: target/site/jacoco/يمكنك أيضًا إضافة أداة التحليل الثابت Checkstyle أو SpotBugs. مثال لـ Checkstyle:
- name: Checkstyle run: mvn checkstyle:checkستساعد هذه الخطوات في اكتشاف المشكلات تلقائيًا في