مقدمة: لماذا تعتبر CI/CD أمرًا بالغ الأهمية لمشاريع C# (.NET)
تطوير البرمجيات الحديثة لا يمكن أن يتم بدون أتمتة. عمليات البناء والاختبار والنشر اليدوية ليست بطيئة فحسب، بل إنها محفوفة بالأخطاء أيضًا. لمطوري C# الذين يعملون مع نظام .NET البيئي، يصبح تطبيق ممارسات CI/CD (Continuous Integration / Continuous Deployment) معيارًا صناعيًا.
GitHub Actions هي أداة قوية ومرنة لأتمتة سير العمل، مدمجة مباشرة في GitHub. تتيح لك إنشاء خطوط أنابيب (workflows) تستجيب للأحداث في المستودع: عمليات الدفع (push)، إنشاء طلبات السحب (Pull Requests)، الإصدارات، وغيرها الكثير. في هذه المقالة، سنشرح كيفية إعداد خط أنابيب CI/CD كامل لمشروع C# يعتمد على .NET باستخدام GitHub Actions.
سوف تتعلم كيفية:
- إعداد البناء التلقائي للمشروع.
- تشغيل اختبارات الوحدة (مثل xUnit أو NUnit).
- نشر نتائج البناء (artifacts).
- نشر التطبيق تلقائيًا (مثل: على Azure، Docker Hub أو خادم).
1. أساسيات GitHub Actions: Workflow و Jobs و Steps
قبل كتابة الكود، دعنا نفهم المفاهيم الأساسية لـ GitHub Actions.
- Workflow (سير العمل): هي عملية مؤتمتة تقوم بتعريفها في ملف YAML داخل المجلد
.github/workflows. يتم تشغيل Workflow بناءً على مشغل (مثل push إلى فرع main). - Job (المهمة): مجموعة من الخطوات (steps) التي يتم تنفيذها على مشغل واحد (جهاز افتراضي). يمكن تنفيذ المهام (Jobs) بشكل تسلسلي أو متوازي.
- Step (الخطوة): أمر أو إجراء (action) منفرد. يمكن أن يكون تشغيل سكريبت، تثبيت تبعيات، أو استخدام action جاهز من السوق (marketplace).
- Runner (المشغل): الخادم الذي ينفذ سير العمل الخاص بك. يوفر GitHub مشغلين مجانيين (Ubuntu، Windows، macOS)، أو يمكنك تشغيل المشغل الخاص بك.
بالنسبة لمشاريع .NET، سنستخدم actions جاهزة مثل actions/checkout (لاستنساخ المستودع) و actions/setup-dotnet (لتثبيت .NET SDK).
2. إعداد خط أنابيب CI أساسي: البناء والاختبار
لنقم بإنشاء أول workflow لدينا. للقيام بذلك، قم بإنشاء مجلد .github/workflows في جذر المستودع، وداخله ملف dotnet-build.yml.
إليك ملف YAML الأدنى لبناء واختبار مشروع C#:
name: .NET Build and Test
on: push: branches: [ main, develop ] pull_request: branches: [ main ]
jobs: build-and-test: runs-on: ubuntu-latest
steps: - name: Checkout repository uses: actions/checkout@v4
- name: Setup .NET uses: actions/setup-dotnet@v4 with: dotnet-version: '8.0.x' # حدد إصدار .NET الخاص بك
- name: Restore dependencies run: dotnet restore
- name: Build run: dotnet build --no-restore --configuration Release
- name: Run tests run: dotnet test --no-build --configuration Release --verbosity normalشرح الكود:
- name: اسم workflow الذي سيظهر في GitHub.
- on: يحدد المشغلات. في حالتنا، push و pull request إلى فرعي main و develop.
- jobs: يحتوي على مهمة واحدة
build-and-testيتم تنفيذها علىubuntu-latest. - steps: سلسلة من الإجراءات: استنساخ الكود، تثبيت .NET 8.0، استعادة حزم NuGet، البناء في تكوين Release، وتشغيل الاختبارات.
بعد دفع (push) هذا الملف إلى المستودع، سيقوم GitHub Actions تلقائيًا بتشغيل workflow. سترى علامة اختيار خضراء أو علامة X حمراء بجوار