GitHub Actions पर Kotlin प्रोजेक्ट्स के लिए उन्नत CI/CD
\n\nआधुनिक Kotlin अनुप्रयोगों के विकास में बिल्ड, परीक्षण और तैनाती का स्वचालन एक महत्वपूर्ण चरण है। यदि बुनियादी CI/CD सेटअप पहले से ही सीख लिया गया है, तो अब उन्नत तकनीकों की ओर बढ़ने का समय है। इस लेख में, हम Kotlin प्रोजेक्ट्स के लिए GitHub Actions का अधिकतम लाभ उठाने के तरीकों पर चर्चा करेंगे: मैट्रिक्स बिल्ड, बुद्धिमान कैशिंग, समानांतर परीक्षण और लचीला डिप्लॉय।
\n\n1. मैट्रिक्स बिल्ड: कई संस्करणों और ऑपरेटिंग सिस्टम पर परीक्षण
\n\nGitHub Actions की सबसे शक्तिशाली विशेषताओं में से एक मैट्रिक्स रणनीति (strategy.matrix) है। यह एक ही workflow को विभिन्न मापदंडों के साथ चलाने की अनुमति देती है। Kotlin के लिए यह अपरिहार्य है यदि आप JVM के कई संस्करणों या लक्ष्य प्लेटफार्मों (जैसे, JVM + Native) का समर्थन करते हैं।
Kotlin Multiplatform प्रोजेक्ट के लिए मैट्रिक्स बिल्ड का उदाहरण:
\n\nname: Matrix Build Kotlin\non: [push, pull_request]\n\njobs:\n build:\n runs-on: ${{ matrix.os }}\n strategy:\n matrix:\n os: [ubuntu-latest, macos-latest, windows-latest]\n java: [11, 17, 21]\n kotlin-version: [1.9.22, 2.0.0]\n fail-fast: false # एक में त्रुटि होने पर अन्य बिल्ड को न रोकें\n\n steps:\n - uses: actions/checkout@v4\n\n - name: Set up JDK ${{ matrix.java }}\n uses: actions/setup-java@v4\n with:\n java-version: ${{ matrix.java }}\n distribution: 'temurin'\n\n - name: Validate Gradle wrapper\n uses: gradle/wrapper-validation-action@v2\n\n - name: Build with Gradle\n run: ./gradlew build -Dkotlin.version=${{ matrix.kotlin-version }}\n\n\nसिफारिशें:
\n- \n
- यदि कोई संयोजन विफल हो जाता है तो अन्य संयोजनों के परिणामों को न खोने के लिए
fail-fast: falseका उपयोग करें। \n - Actions के अनावश्यक मिनटों को बर्बाद करने से बचने के लिए मैट्रिक्स को केवल प्रासंगिक संस्करणों तक सीमित रखें। \n
- Windows के लिए, Gradle के सही पथ सेट करना और लाइन ब्रेक (CRLF) की जाँच करना सुनिश्चित करें। \n
2. Gradle और निर्भरताओं की बुद्धिमान कैशिंग
\n\nGradle पर Kotlin प्रोजेक्ट CI के प्रत्येक रन पर दसियों मेगाबाइट निर्भरताएँ डाउनलोड कर सकते हैं। कैशिंग के बिना, बिल्ड में 5-10 मिनट लग सकते हैं, और इसके साथ, 30-40 सेकंड। कैशिंग के लिए अंतर्निहित actions का उपयोग करें।
\n\nsteps:\n - uses: actions/cache@v4\n with:\n path: |\n ~/.gradle/caches\n ~/.gradle/wrapper\n build/\n key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}\n restore-keys: |\n ${{ runner.os }}-gradle-\n\n - name: Build with Gradle\n run: ./gradlew build --build-cache --no-daemon\n\n\nउन्नत ट्रिक्स:
\n- \n
- कैश कुंजी में
gradle.lockfileका हैश जोड़ें (यदि आप--write-locksका उपयोग कर रहे हैं) - यह निर्भरता संस्करणों में बदलाव पर कैश को अमान्य करने की गारंटी देता है। \n - Gradle से
gradle-build-actionका उपयोग करें (action:gradle/gradle-build-action@v3) - यह स्वचालित रूप से कैशिंग का प्रबंधन करता है और--build-cacheके लिए समर्थन शामिल करता है। \n ~/.gradle/daemonको कैश न करें - इससे डेमॉन के विभिन्न संस्करणों के बीच विरोध हो सकता है। \n
3. समानांतर परीक्षण और गतिशील वितरण (sharding)
\n\nसैकड़ों परीक्षणों वाले बड़े प्रोजेक्ट्स के लिए, निष्पादन समय एक बाधा हो सकता है। GitHub Actions परीक्षणों को शार्ड में विभाजित करके समानांतर रूप से चलाने की अनुमति देता है। यह विशेष रूप से Kotlin + JUnit 5 के लिए उपयोगी है।
\n\nशार्ड द्वारा परीक्षणों को विभाजित करने का उदाहरण:
\n\njobs:\n test:\n runs-on: ubuntu-latest\n strategy:\n matrix:\n shard: [1, 2, 3, 4] # 4 समानांतर शार्ड\n steps:\n - uses: actions/checkout@v4\n - name: Set up JDK 17\n uses: actions/setup-java@v4\n with:\n java-version: '17'\n distribution: 'temurin'\n\n