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

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

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

ابدأ الدورة

مقدمة: لماذا تحتاج مشاريع C# إلى CI/CD؟

\n

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

\n

GitHub Actions هي أداة مدمجة في GitHub تتيح لك إنشاء خطوط أنابيب قوية مباشرة داخل المستودع. في هذه المقالة، سنشرح كيفية إعداد CI/CD كامل لمشاريع C# باستخدام GitHub Actions: من البناء البسيط إلى النشر التلقائي. ستتعلم كيفية كتابة تكوينات YAML، وتحسين الاختبار، وتجنب الأخطاء الشائعة.

\n\n

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

\n

ما هو workflow و job؟

\n

Workflow (سير العمل) هو عملية آلية يتم تشغيلها بناءً على حدث معين (push، pull request، إنشاء إصدار). يتم وصفه في ملف .github/workflows/*.yml. يتكون سير العمل من job واحدة أو أكثر (مهام) يتم تنفيذها على runners (أجهزة افتراضية). يمكن أن تحتوي كل job على سلسلة من steps (الخطوات).

\n

بالنسبة لمشاريع C#، الخطوات الرئيسية هي استعادة التبعيات (dotnet restore)، البناء (dotnet build)، تشغيل الاختبارات (dotnet test) والنشر (dotnet publish).

\n\n

قالب سير عمل أساسي لـ .NET

\n

فيما يلي سير عمل أدنى لبناء واختبار مشروع C#. احفظ هذا الكود في ملف .github/workflows/dotnet-ci.yml.

\n
name: .NET CI\n\non:\n  push:\n    branches: [ main, develop ]\n  pull_request:\n    branches: [ main ]\n\njobs:\n  build-and-test:\n    runs-on: ubuntu-latest\n\n    steps:\n    - name: Checkout repository\n      uses: actions/checkout@v4\n\n    - name: Setup .NET\n      uses: actions/setup-dotnet@v4\n      with:\n        dotnet-version: '8.0.x'\n\n    - name: Restore dependencies\n      run: dotnet restore\n\n    - name: Build\n      run: dotnet build --no-restore --configuration Release\n\n    - name: Run tests\n      run: dotnet test --no-build --configuration Release --verbosity normal
\n

شرح الأسطر الرئيسية:

\n
    \n
  • actions/checkout@v4 — يستنسخ المستودع إلى بيئة التنفيذ.
  • \n
  • actions/setup-dotnet@v4 — يقوم بتثبيت الإصدار المحدد من .NET SDK.
  • \n
  • dotnet restore — يقوم بتنزيل حزم NuGet.
  • \n
  • dotnet build --configuration Release — يقوم ببناء المشروع في وضع Release.
  • \n
  • dotnet test — يقوم بتشغيل جميع الاختبارات من الحل.
  • \n
\n\n

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

\n

التخزين المؤقت لحزم NuGet

\n

يبدأ كل تشغيل لسير العمل ببيئة نظيفة. لتسريع العملية، يمكنك تخزين مجلد ~/.nuget/packages مؤقتًا. هذا مفيد بشكل خاص للمشاريع الكبيرة التي تحتوي على عشرات التبعيات.

\n
steps:\n  - uses: actions/cache@v4\n    with:\n      path: ~/.nuget/packages\n      key: ${{ runner.os }}-nuget-${{ hashFiles('**/*.csproj') }}\n      restore-keys: |\n        ${{ runner.os }}-nuget-\n  - run: dotnet restore
\n

يتم إنشاء مفتاح التخزين المؤقت بناءً على تجزئة ملفات المشروع (.csproj). إذا لم تتغير التبعيات، فسيتم استعادة التخزين المؤقت في ثوانٍ.

\n\n

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

\n

إذا كان تطبيقك يجب أن يعمل تحت إصدارات مختلفة من .NET أو أنظمة تشغيل مختلفة، فاستخدم المصفوفة. سيقوم GitHub Actions تلقائيًا بإنشاء job منفصلة لكل مجموعة.

\n
jobs:\n  build:\n    strategy:\n      matrix:\n        os: [ubuntu-latest, windows-latest]\n        dotnet: ['6.0.x', '8.0.x']\n    runs-on: ${{ matrix.os }}\n    steps:\n      - uses: actions/checkout@v4\n      - name: Setup .NET\n                

المدونات

توصيات الكتب