Go परियोजनाओं के लिए GitHub Actions के साथ उन्नत CI/CD
\n\nबिल्ड, परीक्षण और डिप्लॉयमेंट का स्वचालन आधुनिक Go-डेवलपमेंट का आधार है। बुनियादी पाइपलाइन शुरुआत के लिए अच्छी हैं, लेकिन जब प्रोजेक्ट बढ़ता है, तो उन्नत तकनीकों की आवश्यकता होती है: डिपेंडेंसी कैशिंग, समानांतर जॉब्स, विभिन्न OS और आर्किटेक्चर के लिए मैट्रिक्स बिल्ड, Docker Hub में आर्टिफैक्ट प्रकाशन और स्मार्ट डिप्लॉयमेंट। इस लेख में, हम जानेंगे कि पेशेवर स्तर पर Go-प्रोजेक्ट के लिए GitHub Actions कैसे सेट अप करें।
\n\n1. Go मॉड्यूल और बाइनरी फ़ाइलों की कैशिंग
\n\nपाइपलाइन का प्रत्येक रन दसियों मेगाबाइट डिपेंडेंसी डाउनलोड कर सकता है। प्रक्रिया को गति देने के लिए, हम go mod और बिल्ड कैश के लिए GitHub Actions के अंतर्निहित कैशिंग का उपयोग करते हैं।
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) संकलित ऑब्जेक्ट्स को सहेजता है, पुनर्निर्माण को गति देता है।
2. मैट्रिक्स बिल्ड: विभिन्न Go संस्करणों और OS के तहत परीक्षण
\n\nGo प्रोजेक्ट्स को अक्सर Linux, macOS और Windows पर काम करना चाहिए, और भाषा के कई संस्करणों का समर्थन करना चाहिए। मैट्रिक्स (matrix strategy) प्रत्येक संयोजन के लिए समानांतर जॉब चलाने की अनुमति देता है।
\n\njobs:\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 जोड़ें ताकि यदि एक जॉब विफल हो जाए तो बाकी जॉब काम करती रहें।
3. Docker इमेज और GitHub Release प्रकाशित करना
\n\nसफल परीक्षण के बाद, आर्टिफैक्ट प्रकाशित करना तर्कसंगत है: Docker Hub (या GitHub Container Registry) में Docker इमेज और GitHub Release में बाइनरी। आइए दोनों परिदृश्यों पर विचार करें।
\n\nDocker इमेज प्रकाशित करना
\n\nहम एक जॉब बनाएंगे जो केवल परीक्षणों के बाद और केवल main पर पुश या टैग बनाने पर चलती है।
\n\njobs:\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नहीं