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

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

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

ابدأ الدورة

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

التطوير الحديث بلغة C# ومنصة .NET لا يمكن تصوره بدون أتمتة. التشغيل اليدوي للبناء والاختبار والنشر هو طريق للأخطاء، وإهدار الوقت، وتأخير الإصدارات. CI/CD (التكامل المستمر / النشر المستمر) يحل هذه المشكلات، مما يجعل عملية تسليم الكود قابلة للتنبؤ وسريعة.

GitHub Actions هي أداة أتمتة مدمجة على GitHub، وهي مثالية لمشاريع C#. تتيح لك إعداد خط أنابيب (pipeline) مباشرة في المستودع باستخدام ملفات YAML. في هذه المقالة، سنشرح الدورة الكاملة: من البناء الأساسي إلى نشر حزمة NuGet ونشر تطبيق الويب.



1. أساسيات GitHub Actions لـ .NET

ما هو workflow و job؟

Workflow هو عملية آلية يتم تشغيلها بناءً على حدث (push، pull request، جدول زمني). يتكون workflow من job واحدة أو أكثر (مهام)، يتم تنفيذها على runners (جهاز افتراضي يعمل بنظام Ubuntu أو Windows أو macOS).

تتكون كل job من خطوات (steps)، يمكنها تنفيذ أوامر shell أو استخدام actions جاهزة من السوق (marketplace).



أول workflow: بناء مشروع .NET

أنشئ مجلد .github/workflows في جذر المستودع وملف build.yml:

name: Build .NET Project

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

jobs: build: runs-on: ubuntu-latest

steps: - uses: actions/checkout@v4 - name: Setup .NET uses: actions/setup-dotnet@v4 with: dotnet-version: '8.0.x' - 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

يتم تشغيل هذا workflow مع كل push أو pull request إلى main. يقوم باستعادة التبعيات، وبناء المشروع في وضع Release، وتشغيل الاختبارات. إذا فشلت أي خطوة، سيتوقف workflow وسترى حالة حمراء في PR.



2. إعدادات متقدمة: مصفوفة البناء والتخزين المؤقت

مصفوفة إصدارات .NET

للتحقق من التوافق مع إصدارات .NET المختلفة، استخدم المصفوفة (matrix):

jobs:  build:    strategy:      matrix:        dotnet-version: ['6.0.x', '7.0.x', '8.0.x']        os: [ubuntu-latest, windows-latest]    runs-on: ${{ matrix.os }}

steps: - uses: actions/checkout@v4 - name: Setup .NET ${{ matrix.dotnet-version }} uses: actions/setup-dotnet@v4 with: dotnet-version: ${{ matrix.dotnet-version }} - run: dotnet build --configuration Release - run: dotnet test

سينفذ Runner عملية البناء لكل مجموعة من نظام التشغيل وإصدار .NET بالتوازي. هذا يوفر الوقت ويضمن التوافق عبر المنصات.



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

استعادة حزم NuGet في كل مرة تستغرق وقتًا. قم بتفعيل التخزين المؤقت:

- name: Cache NuGet packages  uses: actions/cache@v4  with:    path: ~/.nuget/packages    key: ${{ runner.os }}-nuget-${{ hashFiles('**/*.csproj') }}    restore-keys: |      ${{ runner.os }}-nuget-

- name: Restore dependencies run: dotnet restore

الآن، عند التشغيل المتكرر، ستتم استعادة الحزم من ذاكرة التخزين المؤقت إذا لم تتغير ملفات .csproj.



3. نشر حزمة NuGet في GitHub Packages

إذا كنت تطور مكتبة بلغة C#، يمكنك نشرها تلقائيًا في GitHub Packages عند إنشاء إصدار (release).



Workflow للنشر

name: Publish NuGet Package

on: release: types: [published]

jobs: publish: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup .NET uses: actions/setup-dotnet@v4

المدونات

توصيات الكتب