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

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

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

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

Go प्रोजेक्ट्स के लिए GitHub Actions के साथ CI/CD: पूर्ण गाइड



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



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



CI (Continuous Integration) - स्वचालित बिल्ड और परीक्षण के साथ कोड को बार-बार मुख्य ब्रांच में मर्ज करने की प्रथा है। CD (Continuous Delivery/Deployment) - तैयार एप्लिकेशन का स्वचालित डिप्लॉयमेंट है।

Go प्रोजेक्ट्स के लिए CI/CD विशेष रूप से उपयोगी है, क्योंकि:

  • Go एक स्टैटिक बाइनरी में कंपाइल होता है, जो डिप्लॉय को सरल बनाता है
  • Go की मूल गति के कारण तेज़ परीक्षण
  • लिंटर्स और फ़ॉर्मेटिंग की स्वचालित जाँच (gofmt, golangci-lint)
  • मल्टी-प्लेटफ़ॉर्म बिल्ड की संभावना (Linux, macOS, Windows)


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



GitHub Actions .github/workflows डायरेक्टरी में YAML फ़ाइलों का उपयोग करता है। प्रत्येक फ़ाइल एक या अधिक workflows (पाइपलाइन) का वर्णन करती है।



Go प्रोजेक्ट के लिए एक बुनियादी workflow देखें:



name: Go CI

on: push: branches: [ main, develop ] pull_request: branches: [ main ]

jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Go uses: actions/setup-go@v5 with: go-version: '1.22' - name: Cache Go modules uses: actions/cache@v4 with: path: ~/go/pkg/mod key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} restore-keys: | ${{ runner.os }}-go- - name: Install dependencies run: go mod download - name: Run tests run: go test -v -race -coverprofile=coverage.out ./... - name: Upload coverage uses: actions/upload-artifact@v4 with: name: coverage path: coverage.out


यह workflow main/develop में push और pull request पर चलता है। यह Go सेट करता है, डिपेंडेंसी को कैश करता है, -race (रेस डिटेक्टर) और -coverprofile (कोड कवरेज) फ़्लैग के साथ टेस्ट चलाता है।



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



कोड गुणवत्ता बनाए रखने के लिए लिंटर जाँच जोड़ें। golangci-lint Go के लिए डी-फैक्टो मानक है।



  lint:    runs-on: ubuntu-latest    steps:    - uses: actions/checkout@v4    - name: Set up Go      uses: actions/setup-go@v5      with:        go-version: '1.22'    - name: golangci-lint      uses: golangci/golangci-lint-action@v6      with:        version: latest        args: --timeout=5m ./...


मल्टी-प्लेटफ़ॉर्म बिल्ड उपयोगी है यदि आपका एप्लिकेशन विभिन्न OS पर काम करना चाहिए:



  build:    needs: [test, lint]    strategy:      matrix:        os: [ubuntu-latest, macos-latest, windows-latest]        goarch: [amd64, arm64]        runs-on: ${{ matrix.os }}        steps:    - uses: actions/checkout@v4    - name: Set up Go      uses: actions/setup-go@v5      with:        go-version: '1.22'    - name: Build      run: |        GOARCH=${{ matrix.goarch }} go build -v -o myapp-${{ matrix.os }}-${{ matrix.goarch }} ./cmd/app


ध्यान दें: Windows के लिए आउटपुट फ़ाइल नाम को समायोजित करना होगा (.exe जोड़ें)। if runner.os == 'Windows' का उपयोग करें या वेरिएबल के माध्यम से नाम सेट करें।



Go एप्लिकेशन का स्वचालित डिप्लॉय



डिप्लॉय के लिए दो लोकप्रिय परिदृश्य देखें: Docker इमेज प्रकाशित करना और सर्वर पर बाइनरी अपलोड करना।



ब्लॉग

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