परिचय: बुनियादी पाइपलाइनों से औद्योगिक समाधानों तक
\n\nJava प्रोजेक्ट के लिए बुनियादी CI/CD पाइपलाइन अच्छी है। लेकिन वास्तविक विकास में, जब प्रोजेक्ट दर्जनों मॉड्यूल तक बढ़ जाता है और टीम में कई डेवलपर होते हैं, तो सरल `mvn clean test` आवश्यकताओं को पूरा नहीं करता है। सवाल उठते हैं: बिल्ड को कैसे तेज़ करें? JDK के विभिन्न संस्करणों पर कैसे परीक्षण करें? समानांतर परीक्षण कैसे व्यवस्थित करें? Docker Hub में स्वचालित रूप से आर्टिफैक्ट कैसे प्रकाशित करें?
\n\nइस लेख में, हम Java प्रोजेक्ट्स के लिए GitHub Actions की उन्नत तकनीकों पर चर्चा करेंगे। आप सीखेंगे कि अपनी पाइपलाइन को एक रैखिक चरण अनुक्रम से एक शक्तिशाली, समानांतर और अनुकूलित निरंतर एकीकरण और वितरण प्रणाली में कैसे बदलें।
\n\n1. मैट्रिक्स बिल्ड: कई JDK और OS पर परीक्षण
\n\nCI का एक मुख्य कार्य यह सुनिश्चित करना है कि आपका Java कोड सभी समर्थित प्लेटफार्मों पर काम करता है। Windows, macOS और Linux पर JDK (11, 17, 21) के विभिन्न संस्करणों के साथ मैन्युअल रूप से परीक्षण चलाना एक अक्षम्य विलासिता है। GitHub Actions एक सुंदर समाधान प्रदान करता है: मैट्रिक्स बिल्ड (matrix builds)।
यह कैसे काम करता है
\n\nआप पैरामीटर का एक मैट्रिक्स (JDK संस्करण, ऑपरेटिंग सिस्टम) परिभाषित करते हैं, और GitHub स्वचालित रूप से प्रत्येक संयोजन के लिए एक अलग जॉब बनाता है। वे सभी समानांतर रूप से चलते हैं।
\n\nकॉन्फ़िगरेशन उदाहरण
\n\nname: Java CI Matrix\non: [push, pull_request]\n\njobs:\n build:\n runs-on: ${{ matrix.os }}\n strategy:\n matrix:\n os: [ubuntu-latest, windows-latest, macos-latest]\n java: [11, 17, 21]\n exclude:\n - os: windows-latest\n java: 21 # Windows पर JDK 21 को बाहर करें यदि यह समर्थित नहीं है\n fail-fast: false # एक जॉब में त्रुटि होने पर अन्य जॉब को न रोकें\n\n steps:\n - uses: actions/checkout@v4\n - name: Set up JDK ${{ matrix.java }}\n uses: actions/setup-java@v4\n with:\n java-version: ${{ matrix.java }}\n distribution: 'temurin'\n - name: Build with Maven\n run: mvn -B clean verify --file pom.xml\n\nमुख्य बिंदु:
\n- \n
strategy.matrix— पैरामीटर के संयोजन को परिभाषित करता है। \n exclude— जानबूझकर गैर-कार्यशील या अनावश्यक संयोजनों को बाहर करने की अनुमति देता है। \n fail-fast: false— यदि एक जॉब विफल हो जाता है, तो बाकी काम करना जारी रखेंगे। यह संगतता की पूरी तस्वीर देता है। \n
2. निर्भरता कैशिंग: बिल्ड को 2-3 गुना तेज़ करें
\n\nपाइपलाइन का प्रत्येक रन एक साफ वातावरण से शुरू होता है। Maven या Gradle रिपॉजिटरी से सभी निर्भरताओं को फिर से डाउनलोड करते हैं। इसमें 3-5 मिनट लग सकते हैं। कैशिंग रन के बीच फ़ोल्डर ~/.m2/repository (Maven के लिए) या ~/.gradle/caches (Gradle के लिए) को सहेज कर इस समस्या को हल करता है।
GitHub Actions अंतर्निहित क्रिया actions/cache प्रदान करता है। कैश कुंजी निर्भरता फ़ाइल (pom.xml) के आधार पर बनाई जाती है। यदि फ़ाइल नहीं बदली है, तो कैश तुरंत पुनर्स्थापित हो जाता है।
Maven के लिए उदाहरण
\n\nsteps:\n - uses: actions/checkout@v4\n\n - name: Cache Maven dependencies\n uses: actions/cache@v3\n with:\n path: ~/.m2/repository\n key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}\n restore-keys: |\n ${{ runner.os }}-maven-\n\n - name: Set up JDK 17\n uses: actions/setup-java@v4\n with:\n java-version: '17'\n distribution: 'temurin'\n\n - name: Build with Maven\n run: mvn -B clean verify --file pom.xml\n\nमहत्वपूर्ण: कैशिंग बिल्ड चरण से पहले होनी चाहिए। कुंजी hashFiles('**/pom.xml') यह सुनिश्चित करती है कि कैश केवल तभी अपडेट हो जब निर्भरताएँ बदलें।
3. परीक्षणों का समानांतर निष्पादन और बिल्ड आर्टिफैक्ट
\n\nजब आपके प्रोजेक्ट में सैकड़ों या हज़ारों परीक्षण हों, और