Go परियोजनाओं के लिए CI/CD: GitHub Actions उन्नत स्तर

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

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

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

Go परियोजनाओं के लिए GitHub Actions के साथ उन्नत CI/CD

\n\n

बिल्ड, परीक्षण और डिप्लॉयमेंट का स्वचालन आधुनिक Go-डेवलपमेंट का आधार है। बुनियादी पाइपलाइन शुरुआत के लिए अच्छी हैं, लेकिन जब प्रोजेक्ट बढ़ता है, तो उन्नत तकनीकों की आवश्यकता होती है: डिपेंडेंसी कैशिंग, समानांतर जॉब्स, विभिन्न OS और आर्किटेक्चर के लिए मैट्रिक्स बिल्ड, Docker Hub में आर्टिफैक्ट प्रकाशन और स्मार्ट डिप्लॉयमेंट। इस लेख में, हम जानेंगे कि पेशेवर स्तर पर Go-प्रोजेक्ट के लिए GitHub Actions कैसे सेट अप करें।

\n\n

1. Go मॉड्यूल और बाइनरी फ़ाइलों की कैशिंग

\n\n

पाइपलाइन का प्रत्येक रन दसियों मेगाबाइट डिपेंडेंसी डाउनलोड कर सकता है। प्रक्रिया को गति देने के लिए, हम go mod और बिल्ड कैश के लिए GitHub Actions के अंतर्निहित कैशिंग का उपयोग करते हैं।

\n\n
name: Go CI (उन्नत)\non: [push, pull_request]\n\njobs:\n  build-and-test:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n\n      - name: Go स्थापित करें\n        uses: actions/setup-go@v5\n        with:\n          go-version: '1.22'\n\n      - name: Go मॉड्यूल कैश करें\n        uses: actions/cache@v4\n        with:\n          path: |\n            ~/go/pkg/mod\n            ~/.cache/go-build\n          key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}\n          restore-keys: |\n            ${{ runner.os }}-go-\n\n      - name: डिपेंडेंसी लोड करें\n        run: go mod download\n\n      - name: लिंटर (golangci-lint)\n        uses: golangci/golangci-lint-action@v6\n        with:\n          version: latest\n\n      - name: कवरेज के साथ परीक्षण\n        run: go test -v -race -coverprofile=coverage.out ./...\n\n      - name: बाइनरी बनाएँ\n        run: go build -o myapp ./cmd/app
\n\n

कुंजी hashFiles('**/go.sum') केवल डिपेंडेंसी बदलने पर कैश को अमान्य करती है। बिल्ड कैश (~/.cache/go-build) संकलित ऑब्जेक्ट्स को सहेजता है, पुनर्निर्माण को गति देता है।

\n\n

2. मैट्रिक्स बिल्ड: विभिन्न Go संस्करणों और OS के तहत परीक्षण

\n\n

Go प्रोजेक्ट्स को अक्सर Linux, macOS और Windows पर काम करना चाहिए, और भाषा के कई संस्करणों का समर्थन करना चाहिए। मैट्रिक्स (matrix strategy) प्रत्येक संयोजन के लिए समानांतर जॉब चलाने की अनुमति देता है।

\n\n
jobs:\n  matrix-test:\n    strategy:\n      matrix:\n        go-version: ['1.21', '1.22', '1.23']\n        os: [ubuntu-latest, macos-latest, windows-latest]\n    runs-on: ${{ matrix.os }}\n    steps:\n      - uses: actions/checkout@v4\n      - name: Go ${{ matrix.go-version }} स्थापित करें\n        uses: actions/setup-go@v5\n        with:\n          go-version: ${{ matrix.go-version }}\n      - name: परीक्षण\n        run: go test ./...
\n\n

यह दृष्टिकोण विभिन्न प्लेटफार्मों पर संगतता समस्याओं का पता लगाता है। Windows के लिए पथ और लाइन ब्रेक के अतिरिक्त कॉन्फ़िगरेशन की आवश्यकता हो सकती है। fail-fast: false जोड़ें ताकि यदि एक जॉब विफल हो जाए तो बाकी जॉब काम करती रहें।

\n\n

3. Docker इमेज और GitHub Release प्रकाशित करना

\n\n

सफल परीक्षण के बाद, आर्टिफैक्ट प्रकाशित करना तर्कसंगत है: Docker Hub (या GitHub Container Registry) में Docker इमेज और GitHub Release में बाइनरी। आइए दोनों परिदृश्यों पर विचार करें।

\n\n

Docker इमेज प्रकाशित करना

\n\n

हम एक जॉब बनाएंगे जो केवल परीक्षणों के बाद और केवल main पर पुश या टैग बनाने पर चलती है।

\n\n
jobs:\n  docker:\n    needs: [build-and-test]\n    if: github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/v')\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n\n      - name: Docker Hub में लॉगिन करें\n        uses: docker/login-action@v3\n        with:\n          username: ${{ secrets.DOCKER_USERNAME }}\n          password: ${{ secrets.DOCKER_PASSWORD }}\n\n      - name: इमेज बनाएँ और पुश करें\n        uses: docker/build-push-action@v5\n        with:\n          context: .\n          push: true\n          tags: |\n            ${{ secrets.DOCKER_USERNAME }}/myapp:latest\n            ${{ secrets.DOCKER_USERNAME }}/myapp:${{ github.sha }}
\n\n

नहीं

ब्लॉग

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