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

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

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

ابدأ الدورة

مقدمة في CI/CD لـ C++ مع GitHub Actions

\n

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

\n

سنستعرض أمثلة حقيقية للكود، والأخطاء الشائعة، وأفضل الممارسات. بعد القراءة، ستتمكن من تنفيذ CI/CD في مشروع C++ الخاص بك بنفسك.

\n\n

أساسيات GitHub Actions لـ C++

\n

هيكل ملف سير العمل

\n

يتم تعريف سير العمل في GitHub Actions بواسطة ملف YAML في الدليل .github/workflows/. لنلقِ نظرة على مثال أساسي لمشروع C++:

\n
name: C++ CI/CD Pipeline\n\non:\n  push:\n    branches: [ main, develop ]\n  pull_request:\n    branches: [ main ]\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n\n    steps:\n    - name: Checkout repository\n      uses: actions/checkout@v4\n\n    - name: Install dependencies\n      run: |\n        sudo apt-get update\n        sudo apt-get install -y cmake g++ libboost-all-dev\n\n    - name: Configure with CMake\n      run: mkdir build && cd build && cmake ..\n\n    - name: Build project\n      run: cd build && make -j$(nproc)\n\n    - name: Run tests\n      run: cd build && ctest --output-on-failure
\n

يتم تشغيل سير العمل هذا عند الدفع إلى main و develop، وكذلك عند إنشاء طلب سحب. يقوم بتثبيت التبعيات، وتكوين البناء عبر CMake، وتجميع المشروع، وتشغيل الاختبارات.

\n\n

اختيار نظام التشغيل والمترجم

\n

يدعم GitHub Actions أنظمة Linux (ubuntu) و macOS و Windows. للمشاريع متعددة المنصات، يمكن استخدام مصفوفة البناء:

\n
jobs:\n  build:\n    strategy:\n      matrix:\n        os: [ubuntu-latest, macos-latest, windows-latest]\n        compiler: [g++, clang++]\n    runs-on: ${{ matrix.os }}\n\n    steps:\n    - name: Set compiler\n      run: |\n        if [ "${{ matrix.os }}" == "windows-latest" ]; then\n          echo "CXX=cl.exe" >> $GITHUB_ENV\n        else\n          echo "CXX=${{ matrix.compiler }}" >> $GITHUB_ENV\n        fi\n      shell: bash
\n

يتيح ذلك التحقق من توافق الكود مع المترجمات وأنظمة التشغيل المختلفة.

\n\n

إعداد متقدم: الاختبار، التخزين المؤقت، والقطع الأثرية

\n

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

\n

كل بناء في GitHub Actions يبدأ ببيئة نظيفة. لتسريع العملية، قم بتخزين الحزم والمكتبات التي تم تنزيلها مؤقتًا:

\n
- name: Cache CMake build directory\n  uses: actions/cache@v3\n  with:\n    path: build\n    key: ${{ runner.os }}-cmake-${{ hashFiles('**/CMakeLists.txt') }}\n    restore-keys: |\n      ${{ runner.os }}-cmake-\n\n- name: Configure CMake\n  run: cmake -B build -S . -DCMAKE_BUILD_TYPE=Release
\n

يتم استعادة التخزين المؤقت إذا لم تتغير ملفات CMakeLists.txt، مما يوفر الوقت في عمليات البناء المتكررة.

\n\n

تشغيل اختبارات الوحدة باستخدام Google Test

\n

غالبًا ما يُستخدم Google Test مع C++. دعنا نضيف مرحلة اختبار مع إنشاء تقرير بتنسيق JUnit:

\n
- name: Build and run tests\n  run: |\n    cmake --build build --target all_tests\n    cd build && ctest --output-junit test-results.xml\n\n- name: Upload test results\n  if: always()\n  uses: actions/upload-artifact@v4\n  with:\n    name: test-results-${{ runner.os }}\n    path: build/test-results.xml
\n

يضمن العلم if: always() تحميل التقرير حتى في حالة فشل الاختبارات.

\n\n

إنشاء ونشر القطع الأثرية

\n

بعد البناء الناجح، يمكن حفظ الملفات الثنائية:

\n
- name: Build release binary\n  run: cmake --build build --config Release\n\n- name: Upload build artifacts\n  uses: ac                

المدونات

توصيات الكتب