परिचय: CI/CD आधुनिक .NET डेवलपमेंट का मानक क्यों है
C# और .NET प्लेटफॉर्म पर आधुनिक डेवलपमेंट ऑटोमेशन के बिना अधूरा है। बिल्ड, टेस्ट और डिप्लॉयमेंट को मैन्युअल रूप से चलाना त्रुटियों, समय की बर्बादी और रिलीज़ में देरी का कारण बनता है। CI/CD (Continuous Integration / Continuous Deployment) इन समस्याओं को हल करता है, कोड डिलीवरी प्रक्रिया को पूर्वानुमानित और तेज़ बनाता है।
GitHub Actions, GitHub पर एक अंतर्निहित ऑटोमेशन टूल है जो C# प्रोजेक्ट्स के लिए एकदम उपयुक्त है। यह YAML फ़ाइलों का उपयोग करके रिपॉजिटरी में ही पाइपलाइन सेट करने की अनुमति देता है। इस लेख में, हम पूरे चक्र को कवर करेंगे: बुनियादी बिल्ड से लेकर NuGet पैकेज पब्लिकेशन और वेब एप्लिकेशन डिप्लॉयमेंट तक।
1. .NET के लिए GitHub Actions की मूल बातें
Workflow और Job क्या है?
Workflow एक स्वचालित प्रक्रिया है जो किसी इवेंट (push, pull request, schedule) पर ट्रिगर होती है। Workflow में एक या अधिक jobs (कार्य) होते हैं, जो रनर्स (runner — Ubuntu, Windows या macOS वाली वर्चुअल मशीन) पर निष्पादित होते हैं।
प्रत्येक job में steps (चरण) होते हैं, जो shell कमांड चला सकते हैं या मार्केटप्लेस से तैयार actions का उपयोग कर सकते हैं।
पहला Workflow: .NET प्रोजेक्ट बिल्ड करना
रिपॉजिटरी की रूट में .github/workflows फ़ोल्डर और build.yml फ़ाइल बनाएँ:
name: Build .NET Project
on: push: branches: [ main ] pull_request: branches: [ main ]
jobs: build: runs-on: ubuntu-latest
steps: - uses: actions/checkout@v4 - name: Setup .NET uses: actions/setup-dotnet@v4 with: dotnet-version: '8.0.x' - name: Restore dependencies run: dotnet restore - name: Build run: dotnet build --no-restore --configuration Release - name: Run tests run: dotnet test --no-build --configuration Release --verbosity normalयह workflow main ब्रांच पर प्रत्येक push या pull request पर चलता है। यह डिपेंडेंसी रिस्टोर करता है, प्रोजेक्ट को Release मोड में बिल्ड करता है और टेस्ट चलाता है। यदि कोई भी चरण विफल होता है, तो workflow रुक जाएगा और आप PR में लाल स्टेटस देखेंगे।
2. उन्नत सेटअप: बिल्ड मैट्रिक्स और कैशिंग
.NET वर्जन मैट्रिक्स
विभिन्न .NET वर्जन के साथ संगतता जाँचने के लिए मैट्रिक्स (matrix) का उपयोग करें:
jobs: build: strategy: matrix: dotnet-version: ['6.0.x', '7.0.x', '8.0.x'] os: [ubuntu-latest, windows-latest] runs-on: ${{ matrix.os }}
steps: - uses: actions/checkout@v4 - name: Setup .NET ${{ matrix.dotnet-version }} uses: actions/setup-dotnet@v4 with: dotnet-version: ${{ matrix.dotnet-version }} - run: dotnet build --configuration Release - run: dotnet testRunner OS और .NET वर्जन के प्रत्येक कॉम्बिनेशन के लिए समानांतर रूप से बिल्ड करेगा। इससे समय बचता है और क्रॉस-प्लेटफॉर्म संगतता सुनिश्चित होती है।
डिपेंडेंसी कैशिंग
हर बार NuGet पैकेज रिस्टोर करने में समय लगता है। कैशिंग चालू करें:
- name: Cache NuGet packages uses: actions/cache@v4 with: path: ~/.nuget/packages key: ${{ runner.os }}-nuget-${{ hashFiles('**/*.csproj') }} restore-keys: | ${{ runner.os }}-nuget-
- name: Restore dependencies run: dotnet restoreअब दोबारा चलाने पर, यदि .csproj फ़ाइलें नहीं बदली हैं, तो पैकेज कैश से रिस्टोर होंगे।
3. GitHub Packages पर NuGet पैकेज प्रकाशित करना
यदि आप C# में लाइब्रेरी विकसित कर रहे हैं, तो इसे रिलीज़ बनाने पर स्वचालित रूप से GitHub Packages पर प्रकाशित किया जा सकता है।
पब्लिकेशन के लिए Workflow
name: Publish NuGet Package
on: release: types: [published]
jobs: publish: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup .NET uses: actions/setup-dotnet@v4