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

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

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

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

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

\n\n

आधुनिक सॉफ्टवेयर विकास में, बिल्ड, परीक्षण और डिप्लॉयमेंट प्रक्रियाओं का स्वचालन (CI/CD) केवल सुविधा नहीं, बल्कि एक आवश्यकता बन गया है। Go (Golang) प्रोजेक्ट्स के लिए, GitHub Actions का उपयोग निरंतर एकीकरण और वितरण को व्यवस्थित करने के सबसे सरल और प्रभावी तरीकों में से एक है। इस लेख में, हम Go-एप्लिकेशन के लिए CI/CD पाइपलाइन सेटअप करने के पूरे चक्र को समझेंगे, बुनियादी कॉन्फ़िगरेशन से लेकर स्वचालित डिप्लॉय तक।

\n\n

GitHub Actions क्या है और यह Go के लिए क्यों महत्वपूर्ण है?

\n\n

GitHub Actions, GitHub रिपॉजिटरी में वर्कफ़्लो (workflows) को स्वचालित करने के लिए एक अंतर्निहित प्लेटफ़ॉर्म है। यह पाइपलाइन बनाने की अनुमति देता है जो विशिष्ट घटनाओं पर ट्रिगर होती हैं: ब्रांच में push, pull request बनाना, रिलीज़ प्रकाशित करना आदि।

\n\n

Go-प्रोजेक्ट्स के लिए, GitHub Actions कई प्रमुख लाभ प्रदान करता है:

\n
    \n
  • तेज़ कंपाइलेशन — Go बहुत तेज़ी से कंपाइल होता है, जिससे पाइपलाइन का निष्पादन समय कम हो जाता है।
  • \n
  • स्टैटिक लिंकिंग — Go-बाइनरी को बाहरी निर्भरता की आवश्यकता नहीं होती, जिससे डिप्लॉय सरल हो जाता है।
  • \n
  • अंतर्निहित परीक्षण — उपयोगिता go test CI-सिस्टम के साथ अच्छी तरह से एकीकृत होती है।
  • \n
  • क्रॉस-प्लेटफ़ॉर्म — विभिन्न OS और आर्किटेक्चर के लिए बाइनरी आसानी से बनाई जा सकती है।
  • \n
\n\n

बुनियादी CI पाइपलाइन सेटअप करना

\n\n

चलिए एक सरल workflow बनाकर शुरू करते हैं जो टेस्ट चलाएगा और कोड को Go मानकों के अनुरूप जांचेगा। इसके लिए, अपने रिपॉजिटरी की रूट में .github/workflows डायरेक्टरी और ci.yml फ़ाइल बनाएं।

\n\n

बुनियादी कॉन्फ़िगरेशन का उदाहरण:

\n\n
name: CI Pipeline for Go\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: Setup Go\n      uses: actions/setup-go@v5\n      with:\n        go-version: '1.22'\n\n    - name: Cache Go modules\n      uses: actions/cache@v4\n      with:\n        path: ~/go/pkg/mod\n        key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}\n        restore-keys: |\n          ${{ runner.os }}-go-\n\n    - name: Download dependencies\n      run: go mod download\n\n    - name: Run vet\n      run: go vet ./...\n\n    - name: Run tests\n      run: go test -v -race -count=1 ./...\n\n    - name: Build\n      run: go build -o myapp ./cmd/app
\n\n

यह workflow निम्नलिखित चरणों को निष्पादित करता है:

\n
    \n
  • रिपॉजिटरी को क्लोन करता है।
  • \n
  • Go संस्करण 1.22 स्थापित करता है।
  • \n
  • बाद के रन को गति देने के लिए मॉड्यूल को कैश करता है।
  • \n
  • go mod download के माध्यम से निर्भरताएँ डाउनलोड करता है।
  • \n
  • स्टैटिक विश्लेषण के लिए go vet चलाता है।
  • \n
  • डेटा रेस का पता लगाने के लिए -race फ्लैग के साथ टेस्ट निष्पादित करता है।
  • \n
  • बाइनरी फ़ाइल बनाता है।
  • \n
\n\n

उन्नत कॉन्फ़िगरेशन: क्रॉस-प्लेटफ़ॉर्म बिल्ड और लिंटर्स

\n\n

Go विभिन्न प्लेटफ़ॉर्म के लिए एप्लिकेशन बनाना आसान बनाता है। आइए पाइपलाइन में बिल्ड मैट्रिक्स (build matrix) और लिंटर golangci-lint का रन जोड़ें।

\n\n

अपडेटेड ci.yml फ़ाइल:

\n\n
name: Advanced Go CI/CD\n\non:\n  push:\n    branches: [ main ]\n  pull_request:\n    branches: [ main ]\n\njobs:\n  lint:\n    runs-on: ubuntu-latest\n    steps:\n    - uses: actions/checkout@v4\n    - uses: actions/setup-go@v5\n      with:\n        go-version: '1.22'\n    - name: golangci-lint\n      uses: golangci/golangci-lint-action@v4\n      with:\n        version: latest\n        args: --timeout=5m\n\n  test:\n    runs-on: ubuntu-latest\n    steps:\n    - uses: actions/checkout@v4\n    - uses: actions/setup-go@v5\n      with:\n        go-version: '1.22'\n    - run: go test -v -race -coverprofile=covera                

ब्लॉग

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