मैन्युअल डिप्लॉय करना कैसे बंद करें और कमिट से न डरें
\n\nक्या आप कभी शुक्रवार शाम को बैठे, प्रोडक्शन को देखते हुए सोचते हैं: "ठीक है, सब कुछ काम कर रहा है, लेकिन अगर मैं अभी बिल्ड चलाऊं तो क्या कुछ नहीं टूटेगा?" परिचित लगता है? मैन्युअल डिप्लॉय बिना प्रशिक्षक के पैराशूट से कूदने जैसा है: एड्रेनालाईन तो है, लेकिन अक्सर दर्दनाक अंत होता है।
\n\nCI/CD पाइपलाइन आपकी स्वचालित सुरक्षा रस्सी है। यह खुद प्रोजेक्ट बनाएगा, टेस्ट चलाएगा, कोड की जांच करेगा और अगर सब ठीक है तो सर्वर पर अपडेट डिप्लॉय करेगा। कोई "अरे, मैं बिल्ड चलाना भूल गया" या "टेस्ट क्यों फेल हुए, जबकि लोकली काम कर रहे थे?" नहीं।
\n\nइस लेख में हम शुरू से एक JavaScript प्रोजेक्ट के लिए पूर्ण CI/CD पाइपलाइन सेटअप करेंगे। बिना अनावश्यक बातों के, वास्तविक कोड उदाहरणों और तैयार कॉन्फ़िग के साथ। चलिए शुरू करते हैं!
\n\nCI/CD पाइपलाइन क्या है और JavaScript डेवलपर को इसकी आवश्यकता क्यों है
\n\nआइए पहले शब्दों को समझ लें ताकि भ्रम न हो।
\n\nContinuous Integration (CI) — सतत एकीकरण। इसका मतलब है कि आपका हर कमिट स्वचालित रूप से जांचा जाता है: कोड लिंटर, टेस्ट और बिल्ड से गुजरता है। अगर कुछ टूटता है, तो आपको एक हफ्ते के बजाय 2 मिनट में पता चल जाता है।
\n\nContinuous Delivery (CD) — सतत वितरण। CI की सभी जांचें सफल होने के बाद तैयार कोड का सर्वर पर स्वचालित डिप्लॉयमेंट।
\n\nJavaScript प्रोजेक्ट्स के लिए CI/CD विशेष रूप से महत्वपूर्ण है। क्यों? क्योंकि JS इकोसिस्टम में हजारों डिपेंडेंसी हैं जो कभी भी अपडेट हो सकती हैं और आपका कोड तोड़ सकती हैं। ऑटोमेशन ऐसे आश्चर्यों से बचाता है।
\n\nहम क्या सेटअप करेंगे
\n- \n
- GitHub Actions — CI/CD के लिए मुफ्त टूल (अधिकांश प्रोजेक्ट्स के लिए पर्याप्त) \n
- लिंटर — कोड शैली की जांच (ESLint) \n
- टेस्ट — Jest का स्वचालित रन \n
- बिल्ड — प्रोजेक्ट बिल्ड (Webpack या Vite) \n
- डिप्लॉय — सर्वर या होस्टिंग पर स्वचालित अपलोड \n
चरण 1: प्रोजेक्ट तैयार करें
\n\nमान लें कि आपके पास पहले से एक JavaScript प्रोजेक्ट है (React, Vue, Node.js — कोई फर्क नहीं पड़ता)। अगर नहीं है, तो परीक्षण के लिए एक सरल प्रोजेक्ट बनाएं:
\n\nmkdir my-ci-cd-project\ncd my-ci-cd-project\nnpm init -y\nnpm install --save-dev jest eslint\n\npackage.json में एक बेसिक स्क्रिप्ट जोड़ें:
{\n "scripts": {\n "test": "jest",\n "lint": "eslint src/",\n "build": "webpack --mode production",\n "deploy": "rsync -avz dist/ user@server:/var/www"\n }\n}\n\nअब हमारे पास लोकल कमांड हैं जिन्हें CI/CD स्वचालित रूप से निष्पादित करेगा।
\n\nचरण 2: GitHub Actions वर्कफ़्लो बनाएं
\n\nGitHub Actions हमारी पाइपलाइन का दिमाग है। सब कुछ .github/workflows/ फ़ोल्डर में YAML फ़ाइलों द्वारा नियंत्रित होता है।
फ़ाइल .github/workflows/ci-cd.yml बनाएं:
name: CI/CD Pipeline\n\non:\n push:\n branches: [ main, develop ]\n pull_request:\n branches: [ main ]\n\njobs:\n build-and-test:\n runs-on: ubuntu-latest\n \n steps:\n - uses: actions/checkout@v3\n \n - name: Setup Node.js\n uses: actions/setup-node@v3\n with:\n node-version: '18'\n \n - name: Install dependencies\n run: npm ci\n \n - name: Run linter\n run: npm run lint\n \n - name: Run tests\n run: npm test\n \n - name: Build project\n run: npm run build\n\nयहाँ क्या हो रहा है? main या develop में हर push पर GitHub Ubuntu के साथ एक वर्चुअल मशीन चलाता है, Node.js 18 स्थापित करता है, डिपेंडेंसी स्थापित करता है (npm ci के माध्यम से क्लीन इंस्टॉल — npm install से तेज़ और अधिक विश्वसनीय), लिंटर से कोड की जांच करता है, टेस्ट चलाता है और प्रोजेक्ट बनाता है।
अगर कोई भी चरण विफल होता है — पाइपलाइन रुक जाएगी और आपको सूचना मिलेगी।
\n\nचरण 3: लिंटर और टेस्ट जोड़ें
\n\nESLint और Jest JavaScript के लिए मानक हैं। आइए उन्हें कॉन्फ़िगर करें ता