C++ के लिए CI/CD: एक वास्तविक प्रोजेक्ट के लिए शून्य से पाइपलाइन सेटअप

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

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

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

परिचय: जब "मेरी मशीन पर काम कर रहा है" एक आपदा है

\n\n

हर C++ डेवलपर ने कम से कम एक बार यह वाक्य सुना है: "मेरे पास सब कुछ काम कर रहा है, अजीब है कि तुम्हारे पास क्रैश हो रहा है"। या खुद इसे कहा है। टेम्पलेट कम्पाइलेशन, लिंकिंग, विभिन्न मानकों (C++17, C++20) की विशेषताएं, प्लेटफ़ॉर्म-निर्भर मैक्रोज़ - C++ आश्चर्यों से भरा है जो वातावरण बदलने पर सामने आते हैं।

\n\n

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

\n\n

1. प्रोजेक्ट तैयारी: संरचना और बिल्ड सिस्टम

\n\n

पाइपलाइन लिखने से पहले, प्रोजेक्ट को व्यवस्थित करना होगा। हम CMake का उपयोग करेंगे - आधुनिक C++ प्रोजेक्ट्स के लिए डी-फैक्टो मानक। हमारा उदाहरण Google Test पर मॉड्यूलर टेस्ट के साथ एक सरल स्ट्रिंग प्रोसेसिंग यूटिलिटी होगी।

\n\n

रिपॉजिटरी संरचना

\n
my_cpp_project/\n├── .github/\n│   └── workflows/\n│       └── ci.yml          # पाइपलाइन फ़ाइल\n├── src/\n│   ├── main.cpp\n│   └── string_utils.cpp\n├── include/\n│   └── string_utils.hpp\n├── tests/\n│   ├── CMakeLists.txt\n│   └── test_string_utils.cpp\n├── CMakeLists.txt           # रूट CMake\n├── Dockerfile               # अंतिम डिप्लॉयमेंट के लिए\n└── README.md\n
\n\n

रूट CMakeLists.txt

\n

लाइब्रेरी और एक्जीक्यूटेबल फ़ाइल बनाएं। टेस्ट के निर्यात पर ध्यान दें:

\n
cmake_minimum_required(VERSION 3.20)\nproject(MyStringUtils VERSION 1.0.0 LANGUAGES CXX)\n\nset(CMAKE_CXX_STANDARD 17)\nset(CMAKE_CXX_STANDARD_REQUIRED ON)\n\n# मुख्य लाइब्रेरी\nadd_library(string_utils STATIC\n    src/string_utils.cpp\n    include/string_utils.hpp\n)\ntarget_include_directories(string_utils PUBLIC include)\n\n# एक्जीक्यूटेबल फ़ाइल\nadd_executable(my_app src/main.cpp)\ntarget_link_libraries(my_app PRIVATE string_utils)\n\n# टेस्ट (वैकल्पिक, विकल्प के माध्यम से जुड़ते हैं)\noption(BUILD_TESTS "Build unit tests" ON)\nif(BUILD_TESTS)\n    enable_testing()\n    add_subdirectory(tests)\nendif()\n
\n\n

टेस्ट का उदाहरण (tests/test_string_utils.cpp)

\n
#include <gtest/gtest.h>\n#include "string_utils.hpp"\n\nTEST(StringUtilsTest, ToUpper) {\n    EXPECT_EQ(to_upper("hello"), "HELLO");\n    EXPECT_EQ(to_upper("C++20"), "C++20");\n}\n\nTEST(StringUtilsTest, Trim) {\n    EXPECT_EQ(trim("  spaced  "), "spaced");\n    EXPECT_EQ(trim("\\t\\n\\r"), "");\n}\n
\n\n

अब जब प्रोजेक्ट तैयार है, तो मुख्य भाग पर आते हैं - C++ के लिए CI/CD पाइपलाइन सेटअप।

\n\n

2. GitHub Actions: पहली पाइपलाइन लिखना

\n\n

GitHub Actions ओपन सोर्स में CI/CD के लिए सबसे लोकप्रिय टूल है। इसका कॉन्फ़िगरेशन YAML में लिखा जाता है और .github/workflows फ़ोल्डर में रखा जाता है। आइए ci.yml फ़ाइल बनाएं।

\n\n

मूल संरचना: पुश और PR पर चलाएँ

\n
name: C++ CI/CD Pipeline\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 code\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++ libgtest-dev\n\n    - name: Configure CMake\n      run: cmake -B build -DCMAKE_BUILD_TYPE=Release\n\n    - name: Build\n      run: cmake --build build --parallel $(nproc)\n\n    - name: Run tests\n      run: cd build && ctest --output-on-failure\n
\n\n

यह एक न्यूनतम लेकिन पहले से काम करने वाला C++ के लिए CI/CD पाइपलाइन है। यदि टेस्ट विफल होते हैं, तो पाइपलाइन त्रुटि के साथ समाप्त होती है, और आपको सूचना मिलती है। लेकिन हम आगे बढ़ेंगे

ब्लॉग

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