paint-brush
GitHub और AWS EC2 का उपयोग करके CI/CD पाइपलाइन कैसे बनाएंद्वारा@wesleybaxterhuber
1,357 रीडिंग
1,357 रीडिंग

GitHub और AWS EC2 का उपयोग करके CI/CD पाइपलाइन कैसे बनाएं

द्वारा Wes Huber6m2024/04/30
Read on Terminal Reader

बहुत लंबा; पढ़ने के लिए

यह तकनीक अनिवार्य रूप से आपके EC2 सर्वर को आपके Github रिपॉजिटरी में भेजे गए परिवर्तनों पर प्रतिक्रिया करने में सक्षम बनाती है।
featured image - GitHub और AWS EC2 का उपयोग करके CI/CD पाइपलाइन कैसे बनाएं
Wes Huber HackerNoon profile picture

हेलो सब लोग, आज मैं NodeJS/Express का उपयोग करके Amazon EC2 सर्वर पर एक त्वरित REST API तैनात करने के अपने पसंदीदा तरीकों में से एक पर एक ट्यूटोरियल करना चाहता हूँ। यह तकनीक अनिवार्य रूप से आपके EC2 सर्वर को आपके GitHub रिपॉजिटरी में पुश किए गए परिवर्तनों का जवाब देने में सक्षम बनाती है।

सबसे पहले, “हैलो वर्ल्ड”

NodeJS/Express ऐप को चालू करने के लिए अपनी मशीन पर एक नई डायरेक्टरी बनाएँ। मैं इसे rekognition कह रहा हूँ


टर्मिनल खोलें, और package.json को आरंभ करने के लिए यह कमांड चलाएँ npm init -y


express.js npm i express स्थापित करें


डिफ़ॉल्ट रूट पर 'हेलो वर्ल्ड' के साथ एक बेसिक एक्सप्रेस सर्वर बनाएं

 const express = require('express'); const app = express(); const port = 3000; app.get('/', (req, res) => { res.send('Hello World!'); }); app.listen(port, () => { console.log(`Example app listening at http://localhost:${port}`); });

यह सुनिश्चित करने के लिए परीक्षण करें कि आप http://localhost:3000/ पर 'Hello World!' देख रहे हैं


बहुत बढ़िया, पहला चरण पूरा हो गया! 💪

अब, चलिए अपना कोड GitHub पर डालते हैं

अपनी निर्देशिका में एक Git रेपो आरंभ करें, और अपना पहला कमिट करें -

 git init git add . git commit -m "First commit"


अपने GitHub खाते पर एक दूरस्थ रिपोजिटरी बनाएँ

नए रिपोजिटरी को मूल के रूप में जोड़ें, और अपनी शाखा को पुश करें।

 git remote add origin <REMOTE_REPOSITORY_URL> git push -u origin master


<REMOTE_REPOSITORY_URL> उस दूरस्थ रिपोजिटरी के लिंक से प्रतिस्थापित करें जिसे आपने अभी बनाया है।


आपको 'मुख्य' के स्थान पर 'मास्टर' को डिफ़ॉल्ट शाखा के रूप में उपयोग करने के लिए अपनी रिपॉजिटरी सेटिंग्स को बदलने की आवश्यकता हो सकती है।

ऐसा करने के बाद आप 'मुख्य' शाखा को हटा सकते हैं।


चरण 2: पूरा! हम गैस से खाना बना रहे हैं ⛽️

चलो क्लाउड पर चलते हैं - Ec2 सर्वर सेटअप करें

अपना EC2 इंस्टेंस लॉन्च करने के लिए ये चरण हैं:



  • EC2 डैशबोर्ड पर जाएँ और एक नया इंस्टैंस लॉन्च करें।

  • उपयुक्त AMI (अमेज़न मशीन इमेज) चुनें; मैं अमेज़न लिनक्स 2 का उपयोग कर रहा हूँ।


  • एक इंस्टेंस प्रकार चुनें (उदाहरण के लिए, t2.micro यदि आप निःशुल्क श्रेणी में हैं).


  • इंस्टेंस विवरण कॉन्फ़िगर करें, स्टोरेज जोड़ें, और आवश्यकतानुसार टैग जोड़ें.


  • आपको जिन पोर्ट की आवश्यकता होगी उन पर इनबाउंड ट्रैफ़िक की अनुमति देने के लिए एक सुरक्षा समूह कॉन्फ़िगर करें (SSH और आपके एप्लिकेशन के पोर्ट के लिए कम से कम TCP पोर्ट 22, और फिर वेब ट्रैफ़िक के लिए 3000)।


  • इंस्टेंस की समीक्षा करें और उसे लॉन्च करें; सुनिश्चित करें कि आपने SSH एक्सेस के लिए प्रयुक्त कुंजी युग्म को सहेज लिया है।


अब, आइए टर्मिनल पर SSH के माध्यम से आपके सर्वर में लॉग इन करने का परीक्षण करें:

ssh ec2-user@<YOUR_SERVER_IP> -i <YOUR_PRIVATE_KEY>.pem


वहां मौजूद वेरिएबल्स को आपके EC2 इंस्टैंस के लिए परिभाषित मानों से बदलें।

यदि आप यह देखते हैं तो आप अपने सर्वर से जुड़ गए हैं, बधाई हो! 👏

हमने अभी तक काम पूरा नहीं किया है - हम अभी शुरुआत कर रहे हैं 😏

आइए अपने सर्वर पर NodeJS स्थापित करें:
sudo yum install -y nodejs


npm के माध्यम से हमारे सर्वर पर pm2 को वैश्विक रूप से स्थापित करें

sudo npm i -g pm2


सर्वर पर git स्थापित करें, और अपने क्रेडेंशियल कॉन्फ़िगर करें:

sudo yum install git -y

 git config --global user.name "Your Name" git config --global user.email "[email protected]"


ठीक है, अब हम एक var/www/ फ़ोल्डर बनाने जा रहे हैं यदि यह पहले से मौजूद नहीं है:

sudo mkdir -p /var/www


फिर हमारे ec2-user में स्वामित्व जोड़ें:

sudo chown -R ec2-user:ec2-user /var/www


अपने सर्वर के रूट से डायरेक्टरी पर जाएँ - /home फोल्डर पर नहीं 👌 cd ~/var/www


अब, यहाँ से, हम अपने git रिपॉजिटरी को क्लोन करेंगे: git clone https://github.com/USERNAME/REPO_NAME.git YOUR_PROJECT_DIRECTORY

[USERNAME] [REPO_NAME] और [YOUR_PROJECT_DIRECTORY] को अपने स्वयं के मानों से बदलें.


इसके बाद, हम निर्देशिका को अपने रिपॉजिटरी में बदलते हैं, ताकि cd YOUR_PROJECT_DIRECTORY हमारे pm2 सेटअप के लिए ecosystem.config.js फ़ाइल बना सके:

nano ecosystem.config.js


यह इस तरह दिख रहा है:

 module.exports = { apps : [{ name: "my-app", // A name for your application script: "app.js", // The script file to launch the app instances: "max", // This can be set to the number of CPU cores to use, or "max" to use all available autorestart: true, // Automatically restart app if it crashes watch: false, // Enable/disable watching file changes for automatic restart max_memory_restart: '1G', // Optional: Restart app if it reaches a memory limit env: { NODE_ENV: "development", }, env_production: { NODE_ENV: "production", } }] };

ठीक है, ठीक है - एक बार यह बना और सहेजा गया, चलो pm2 के साथ ऐप शुरू करते हैं:

pm2 start ecosystem.config.js


अब, हम जाँच सकते हैं कि हमारे सर्वर से पोर्ट 3000 पर 'Hello World!' संदेश आया है या नहीं:

सर्वर पुनः आरंभ होने पर pm2 को स्वचालित रूप से प्रारंभ करने के लिए, आइए चलाएँ:

 pm2 save pm2 startup

यह जांचने के लिए कि आपका सर्वर चल रहा है, आप pm2 status कर सकते हैं; आप pm2 पर दस्तावेज़ यहां पढ़ सकते हैं


अगर आप यहां तक पहुंच गए हैं, तो आप सुपरस्टार हैं ⭐️

GitHub क्रियाओं के साथ एकीकरण

यह हमारी प्रक्रिया का अंतिम चरण है। हम Github क्रियाओं के लिए एक .yml फ़ाइल बनाने जा रहे हैं ताकि जब भी कोई परिवर्तन हमारी मास्टर शाखा में भेजा जाए तो हमारा सर्वर अपडेट हो जाए

अपने रिपॉजिटरी में, 'एक्शन' टैब पर जाएं और एक नया कस्टम वर्कफ़्लो बनाएं। मैं अपना nodejs.yml कह रहा हूँ


रिपो को अद्यतन करने और pm2 को पुनः आरंभ करने के लिए .yml फ़ाइल यहां दी गई है:

 name: Node.js CI/CD on Amazon Linux on: push: branches: [ master ] jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Install dependencies run: npm install - name: Deploy to AWS EC2 uses: appleboy/scp-action@master with: host: ${{ secrets.REMOTE_HOST }} username: ${{ secrets.REMOTE_USER }} key: ${{ secrets.SSH_PRIVATE_KEY }} source: "./" # This now correctly points to the current directory target: "/var/www/your_project_directory" - name: Restart PM2 application uses: appleboy/ssh-action@master with: host: ${{ secrets.REMOTE_HOST }} username: ${{ secrets.REMOTE_USER }} key: ${{ secrets.SSH_PRIVATE_KEY }} script: | cd /var/www/your_project_directory pm2 reload all # This command restarts your application

'your_project_directory' को अपडेट करना सुनिश्चित करें


अंत में, आपको इन पर्यावरण रहस्यों को जोड़ना होगा। REMOTE_HOST यह आपके सर्वर का IP पता है; REMOTE_USER यह Amazon Linux 2 AMI के लिए ec2-user है, और फिर अपनी .pem फ़ाइल की सामग्री को SSH_PRIVATE_KEY के रूप में पेस्ट करें।


आप यह सब रिपोजिटरी सेटिंग्स में कर सकते हैं:

बस हो गया! हमने काम पूरा कर लिया, वाह 😁


आप 'हैलो वर्ल्ड' संदेश को बदलकर और उस परिवर्तन को अपनी मास्टर शाखा में डालकर यह सब परीक्षण कर सकते हैं; फिर आपको http://your.ip.address:3000 पर अपडेट दिखाई देगा।


इसे सेट अप करना थोड़ा मुश्किल है, लेकिन जब आप विकास कर रहे हों, तो आपके REST API सर्वर पर परिवर्तनों को स्वचालित रूप से तैनात करने वाली एक आसान CI/CD पाइपलाइन होना वाकई बहुत अच्छा है। इस तरह, आप परिवर्तनों को जल्दी से लाइव तैनात कर सकते हैं और उन्हें अपने वेब/मोबाइल एप्लिकेशन के फ्रंट एंड में देख सकते हैं।


टिप्पणियों में मुझे बताएं कि क्या यह उपयोगी था, और पढ़ने के लिए धन्यवाद!!


मित्रों अलविदा,

— वेस