GitHub Actions के साथ जावास्क्रिप्ट प्रोजेक्ट्स के लिए उन्नत CI/CD
\n\nबिल्ड, टेस्टिंग और डिप्लॉयमेंट (CI/CD) का स्वचालन आधुनिक जावास्क्रिप्ट डेवलपमेंट का एक अनिवार्य हिस्सा है। यदि आपने पहले से ही बुनियादी GitHub Actions पाइपलाइनों में महारत हासिल कर ली है, तो अब अगले स्तर पर जाने का समय आ गया है। इस लेख में, हम उन्नत तकनीकों को कवर करेंगे: डिपेंडेंसी कैशिंग, मैट्रिक्स बिल्ड, कार्यों का समानांतर निष्पादन, सीक्रेट्स के साथ सुरक्षित कार्य, और VPS और Docker पर स्वचालित डिप्लॉयमेंट। सभी उदाहरण Node.js प्रोजेक्ट्स पर केंद्रित हैं।
\n\n1. बिल्ड समय का अनुकूलन: कैशिंग और सशर्त रन
\n\nबुनियादी पाइपलाइनों की मुख्य समस्याओं में से एक प्रत्येक रन पर node_modules की लंबी इंस्टॉलेशन प्रक्रिया है। GitHub Actions आपको डिपेंडेंसी को कैश करने की अनुमति देता है, जिससे निष्पादन समय 2-4 गुना कम हो जाता है।
node_modules या ~/.npm को कैश करने के लिए actions/cache एक्शन का उपयोग करें:
name: CI Pipeline\non: [push, pull_request]\n\njobs:\n test:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n\n - name: Setup Node.js\n uses: actions/setup-node@v4\n with:\n node-version: '20'\n\n - name: Cache node_modules\n uses: actions/cache@v3\n id: npm-cache\n with:\n path: node_modules\n key: ${{ runner.os }}-node-${{ hashFiles('package-lock.json') }}\n restore-keys: |\n ${{ runner.os }}-node-\n\n - name: Install dependencies\n if: steps.npm-cache.outputs.cache-hit != 'true'\n run: npm ci\n\n\nउन्नत सुझाव:
\n- \n
- डिपेंडेंसी बदलने पर कैश को सटीक रूप से अमान्य करने के लिए
hashFiles('package-lock.json')का उपयोग करें। \n - मोनोरेपो के लिए,
path: packages/*/node_modulesका उपयोग करके प्रत्येक पैकेज को अलग-अलग कैश करें। \n - सशर्त रन जोड़ें (
if: github.ref == 'refs/heads/main') ताकि भारी कार्य (जैसे, प्रोडक्शन बिल्ड) केवल मुख्य ब्रांच पर पुश करने पर ही निष्पादित हों। \n
2. मैट्रिक्स बिल्ड और समानांतर कार्य
\n\nमैट्रिक्स रणनीति आपको विभिन्न मापदंडों के साथ एक ही वर्कफ़्लो को चलाने की अनुमति देती है। यह Node.js या ऑपरेटिंग सिस्टम के कई संस्करणों पर परीक्षण के लिए अपरिहार्य है।
\n\njobs:\n test:\n strategy:\n matrix:\n node-version: [18, 20, 22]\n os: [ubuntu-latest, windows-latest]\n runs-on: ${{ matrix.os }}\n steps:\n - uses: actions/checkout@v4\n - name: Use Node.js ${{ matrix.node-version }}\n uses: actions/setup-node@v4\n with:\n node-version: ${{ matrix.node-version }}\n - run: npm ci\n - run: npm test\n\n\nस्वतंत्र कार्यों (जैसे, लिंटिंग, यूनिट टेस्ट, इंटीग्रेशन टेस्ट) के समानांतर निष्पादन के लिए, अलग-अलग jobs का उपयोग करें। वे एक साथ निष्पादित होते हैं और एक-दूसरे को ब्लॉक नहीं करते हैं:
\n\njobs:\n lint:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n - run: npm ci\n - run: npm run lint\n\n unit-tests:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n - run: npm ci\n - run: npm run test:unit\n\n integration-tests:\n needs: [lint, unit-tests] # lint और unit के पूरा होने की प्रतीक्षा करें\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n - run: npm ci\n - run: npm run test:integration\n\n\nमहत्वपूर्ण: आश्रित कार्यों के निष्पादन क्रम को निर्धारित करने के लिए needs का उपयोग करें। इससे समय और संसाधनों की बचत होती है।
3. उन्नत डिप्लॉयमेंट: आर्टिफैक्ट्स का उपयोग करके Docker और VPS
\n\nसफल परीक्षण के बाद, एप्लिकेशन को डिप्लॉय करना आवश्यक है। आइए दो लोकप्रिय परिदृश्यों पर विचार करें: Docker इमेज में डिप्लॉयमेंट और VPS पर डिप्लॉयमेंट।
\n\n3.1. Docker इमेज बनाना और प्रकाशित करना
\n\njobs:\n build-and-push:\n needs: [test]\n runs-on: ub