C++ प्रोजेक्ट्स के लिए CI/CD: GitHub Actions A से Z तक

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

GitHub Actions के साथ C++ के लिए CI/CD का परिचय

\n

C++ में आधुनिक डेवलपमेंट बिल्ड और टेस्टिंग प्रक्रियाओं के ऑटोमेशन के बिना अधूरी है। CI/CD (Continuous Integration / Continuous Deployment) टीमों को तेजी से त्रुटियों का पता लगाने, स्वचालित रूप से बाइनरी फ़ाइलें बनाने और एप्लिकेशन को डिप्लॉय करने में सक्षम बनाता है। GitHub Actions GitHub में निर्मित एक शक्तिशाली टूल है, जो C++ प्रोजेक्ट्स के लिए आदर्श है। इस लेख में, हम C++ के लिए पूर्ण CI/CD पाइपलाइन सेटअप करने के तरीके पर चर्चा करेंगे: CMake के साथ कंपाइलेशन से लेकर तैयार आर्टिफैक्ट्स के डिप्लॉयमेंट तक।

\n

हम वास्तविक कोड उदाहरण, सामान्य त्रुटियाँ और सर्वोत्तम प्रथाओं को देखेंगे। पढ़ने के बाद, आप अपने C++ प्रोजेक्ट में स्वयं CI/CD लागू करने में सक्षम होंगे।

\n\n

C++ के लिए GitHub Actions की मूल बातें

\n

वर्कफ़्लो फ़ाइल की संरचना

\n

GitHub Actions में वर्कफ़्लो को .github/workflows/ डायरेक्टरी में YAML फ़ाइल द्वारा परिभाषित किया जाता है। 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 में पुश करने पर, साथ ही pull request बनाने पर चलता है। यह डिपेंडेंसी इंस्टॉल करता है, 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

यह विभिन्न कंपाइलर और OS के साथ कोड की संगतता की जाँच करने की अनुमति देता है।

\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

C++ के लिए अक्सर Google Test का उपयोग किया जाता है। 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                

ब्लॉग

पुस्तक अनुशंसाएँ